Releases: smudgelang/smudge
Releases · smudgelang/smudge
0.7.1
0.7
v0.7: First release as a part of Splat: the Smudge Platform.
Project:
The Smudge language now has a distribution, Splat, including both
the Smudge compiler and the Smear environment and runtime.
Oh yeah, the Smudge language also now has an official runtime: Smear!
The compiler supports generating bindings using the `--c-smear` flag.
Features:
The biggest minor feature is that event cycles are detected and
rejected. Yes, that's right, Smudge solves (a tiny subset of) the
halting problem. It is pretty conservative; it rejects machines
unless it can tell that all messages sent to an empty queue halts.
Errata:
Smudge now generates code that no longer yields an unused parameter
warning. This means that all Smudge output compiles silently with:
gcc -c -std=c89 -pedantic -Wall -Wextra -Werror -Wno-unused-function
Additionally, there were several errors that were discovered using
code gen; most of these have been fixed.
Tickets:
21: Reject event cycles.
43: A single state can't handle an event two different ways.
58: Detect undeclared events sent to other state machines.
61: Any cannot be transient
62: Vim mis-highlights parenthesis in name.
67: Forbid nonsensical any states
73: Boolean command line switches should be invertable.:
0.6
v0.6: First open source release, now with better debugging and control.
Project:
In an exciting development for the Smudge project, as of October,
Smudge is now under a BSD 3-clause license!
Releases are now available for Windows using an installer, and on
Ubuntu/Debian using a deb package, in addition to zip/tar archives.
Features:
Smudge files may now begin with some number of pragmas, before the
name of the first state machine, thereby enabling any required
command-line flags (except 'help' and 'version') for that file alone.
For example, to enable strictness checking for a file, simple start
the file with:
#strict
Two helpful debugging flags were added: --logevent and --logstate.
The former calls a log function upon receipt of specified events, and
the latter upon entry into the specified states. For example, in
order to enable logging on all events for the "buggy" state machine
except "noisy" (which is disabled to avoid cluttering the logs):
smudge --log-event --no-logevent=buggy.noisy buggy.smudge
NOTE: in order to use the above logging flags, the function
SMUDGE_debug_print must be defined, which should be the same as
SMUDGE_panic_print (with the exception of not panicking).
Errata:
State machines with leading numbers now yield compilable mangled
names. Mangled names that would produce undefined behavior are
caught and instead yield an error which can be overcome with the
newly added --nsprefix flag.
If GraphViz is not installed, Smudge will now exit with an error.
Errors now refer to the precise location of an error where possible,
instead of the approximate location.
Tickets:
78: lintian - fix file ownership
53: File-level compilation switches
38: Event logging for debugging
44: GraphViz - concatenate parallel edges.
72: C Identifiers can't begin with numbers or underscores
59: Friendly message to install GraphViz
73: Boolean command line switches should be invertable.
69: Add commit hash to version
64: PackageInfo warning
37: Comment header warning of generated code.
47: Error granularity finer than SM
0.5
v0.5: A major release, that makes backwards incompatible changes to
the generated code for the C backend.
The intent is for this release to be the last API-breaking one
before 2.0.
IMPORTANT: This release includes backwards incompatibilities. In
order to use it, you will need to add hooks for message
passing. See the parts of the tutorial that deal with
Handle_Message and Send_Message for details. In addition, some
names generated by Smudge may have been changed. If you use
anything other than alphanumeric characters for the names of
your state machines and events, you will have to update your
C code.
Features: Adds message passing hooks for user code to queue
events. Most names are now prettier. Added memory management
hooks for freeing events.
Documentation: Updated the tutorial to include the new and
exciting features.
Architecture: Replaced monolithic C backend with SmudgeIR
intermediate representation.
Tickets:
20: Refactor C backend to simplify.
60: Duration is Complicated.
65: Standardize on a properly injective mangling scheme
13: Message Passing is Complicated.
68: Fix documentation.
0.4
v0.4: A major release, that corrects some long-standing Smudge issues.
IMPORTANT: This includes a backwards-incompatible rename:
assert -> SMUDGE_panic
printf_assert -> SMUDGE_panic_print
Features: Added --strict flag which only allows functions for
one event type. The prototype for panic_print is now generated.!
Added --namespace flag, with a default namespace of SMUDGE.
Added --rename flag, which lets you rename symbols, e.g.:
smudge --rename="@SMUDGE.@panic @assert"
Architecture: Added a constraint solver type checker. Added a
fleshed out language definition with a section on the grammar
and one on the type checker. Removed the syntax for typed
functions (the semantics of which were never implemented).
Errata: A few minor parser bugs were fixed, including one that
permitted junk at the end of a smudgle, and another that allowed
empty event handler lists.
Tickets:
15: Typed function calls not implemented.
22: Semantic pass to reject conflicting side effect return types
23: Optional semantic pass to strictly reject conflicting side effects
29: Problems with assert and special functions.
39: States must have at least one event.
0.3.1
v0.3.1: This minor release improves certain error messages, and corrects
handling of flags overriding output file locations.
Tickets:
25: Resolve conflict between QualifiedName [] and QualifiedName [""]
48: Map.!: given key is not an element in the map
51: Fix output path messiness.
0.3
v0.3: This release is much polished compared to 0.2, and suitable for
even broader use.
Tickets closed because they were in the roadmap:
14: Any State + Any Event = Maybe Semantic Pass Failure.
17: Exit functions are generated for terminal states.
27: Better error messages
32: Transient state @function prototypes
33: _ [ _ -- ]
34: Clean up release target.
Tickets closed because we felt like it:
18: _ event in _ state.
31: Expose a way to get internal state?
35: Separate object directories
36: Option to disable no-transition events in dot output
41: Debug code takes up global memory.
50: --output-path=PATH
Tickets deferred to 0.4:
15: Typed function calls not implemented.
0.2
v0.2: Broader release for some limited use. Generates working C code
for simple state machines.
0.1
v0.1: First release for early testing. Generates basic dot output for
a single state machine. Configurable via command line options.