-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathCHANGES
203 lines (147 loc) · 7.73 KB
/
CHANGES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
v0.7.1: This minor release fixes a bad include path in the generated output.
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.
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
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.
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.
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.
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.
v0.2.1: Point release, fix minor niggles:
Tickets:
36: Option to disable no-transition events in dot output
31: Expose a way to get internal state? (partial work done)
v0.2: Broader release for some limited use. Generates working C code
for simple state machines.
v0.1: First release for early testing. Generates basic dot output for
a single state machine. Configurable via command line options.