-
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathNEWS
269 lines (251 loc) · 12.2 KB
/
NEWS
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
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
#+TITLE: Guile-SMC News -- history of user-visible changes.
#+STARTUP: content hidestars
Copyright (C) Artyom V. Poptsov <[email protected]>
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
* Version 0.6.3 (2023-12-02)
** PlantUML parser now handles multi-line comments
** =(smc context functional char)=: Bugfix
=pre-action= procedure would increment the row counter even when the input
event is not a newline character. Now the procedure counts rows properly.
** Skip "hide" blocks in state diagrams
For example, the following code will be ignored by the PlantUML parser:
#+BEGIN_EXAMPLE
hide empty description
#+END_EXAMPLE
** Allow to use "end legend" syntax for "legend" blocks
** Improve error reporting in the PlantUML parser
* Version 0.6.2 (2023-08-11)
** Bugfixes
*** =(smc context functional char)=: =pre-action= now always returns context
The procedure would return an undefined value when the input character is an
EOF object. Now =pre-action= procedure always returns a context instance.
Also now the procedure handles cases when the input character is equal to
=#f=.
*** =(smc trace-context)=: Fix timestamp calculation
Procedures from the module now ensure that timestamps are always have positive
values. When a negative value is detected then an error is issued.
*** =(smc cli command-profile)=: Fix time calculation
The profiler would fail to calculate correct time ranges. Now the time is
calculated properly.
*** =(smc context oop generic)=: Add missing =(smc core log)= import
** Allow to set the FSM pre- and post-action in a PlantUML "legend" block
Guile-SMC now allows to set the pre/post actions for an FSM in the PlantUML "legend" block.
#+BEGIN_EXAMPLE plantuml
legend
pre-action: custom-pre-action
post-action: custom-post-action
endlegend
#+END_EXAMPLE
** Add missing procedures for the =<fsm>= to get/set pre/post actions
Now the =(smc fsm)= module provides procedures to get and set pre- and post-actions.
** =(smc core log)= now registers the default logger
=(smc core log)= now registers the default logger under the name "guile-smc".
** =(smc core log)=: New procedure: =smc-log-default-logger=
This procedure allows to get the default logger instance.
** Update the documentation
* Version 0.6.1 (2023-07-30)
** Allow to set a global event source in a PlantUML "legend" block
Now PlantUML parser allows to set a global event source for an FSM in a
"legend" block, like follows:
#+BEGIN_EXAMPLE
event-source: some-event-source
#+END_EXAMPLE
** =smc context=: Allow to set context sub-type
=smc context= now allows to set a context sub-type to minimise the amount of
imported code. This change is backward-compatible with the old CLI as "oop"
and "functional" types still supported. Please see =smc context --help= for
the full list of supported types and subtypes.
** =fsm-run!= bugfix: Return the updated context at the end
Return the updated context at the end of FSM run.
** =(smc core state)=: Bugfix
Add missing serialization of the state "exit-action". Also set the state exit
action when the state is de-serialized.
* Version 0.6.0 (2023-04-30)
** New context implementation :API_CHANGE:
New FSM context implementation consists of three modules that contain
implementation of common actions/guards:
- =(smc context common)= -- Common actions/guards.
- =(smc context char)= -- Guards for a stream of characters.
- =(smc context u8)= -- Guards for a stream of bytes.
Also there are now two types of structures that provide memory for an FSM:
- =(smc context functional ...)= -- FSM context based on =(srfi srfi-9 gnu)=
structures.
- =(smc context oop ...)= -- FSM context based on =(oop goops)=.
** Drop the support for =guile-standalone-copy= target :API_CHANGE:
It seems that only two targets are reasonable to keep for now: =guile= (which
produces code that depends on Guile-SMC) and =guile-standalone= (which
produces code that does not depend on Guile-SMC and mimic hand-crafted FSM
implementation.)
Extra compilation targets are adding extra maintenance burden so I'd prefer to
focus my somewhat limited resources on those that make sense in the long run.
** =<fsm>= now supports "pre-actions" and "post-actions"
The class slots can be set with "#:pre-action" and "#:post-action" keyword
parameters in the class constructor.
"pre-action" is a global action that is performed on a context and event
before all the other guards and actions.
"post-action" is a global action that is performed on a context and event
after all the other guards and actions are executed in a chain.
By default both actions are procedures that return a context as is.
** =smc compile= and =smc context= now support "--guile-smc-path"
The option sets the path where Guile-SMC core modules are stored. E.g.:
=~/.guix-profile/share/guile/site/=
** =smc context=
*** New option: "--type", "-T"
This option allows to specify context type for the output context when an
intermediate context is generated.
=~/.guix-profile/share/guile/site/=
** =smc run=: Remove the deprecated "--log-file= option :API_CHANGE:
** =smc profile= now allow to print data in JSON format
** =smc=: Improve the "--debug" mode
Now when the debug mode is enabled =smc= will not enable stderr logging. To
enable logging to stderr in addition to the regular logging drivers, there's
now logger option "stderr" that can be used to enable/disable stderr logging.
For example,
#+BEGIN_EXAMPLE shell
$ smc compile --log-driver file --log-opt "file=out.log,stderr=true"
#+END_EXAMPLE
* Version 0.5.2 (2022-09-02)
** Bugfixes
*** =smc context=: Add missing =(smc core config)= to the FSM context
Add missing =(smc core config)= to the FSM context generated by =smc context=
command.
*** =smc compile=: Copy =(smc core config)= when standalone-copy target is used
Copy =(smc core config)= when =guile-standalone-copy= compiler target is used
with =smc compile= command.
* Version 0.5.1 (2022-09-02)
** Fix =log= core binding shadowing by =(smc core log)=
** Allow to set the log driver in Guile-SMC CLI.
See the =--help= for each =smc= action for the description of the new command
line options.
Implemented log drivers are: =syslog=, =file= and =null=.
** =stderr= logging now works with any log driver
Updated =(smc core log)= API now allows to use =stderr= logging with any other
driver. That is, Guile-SMC will log messages to the =stderr= even for =none=
driver is set after =log-use-stderr!= is called with =#t=.
The =stderr= logging can be disabled by calling =log-use-stderr!= with =#f= as
the argument.
** PNG parser example now uses =null= log driver
That should make building in isolated/restricted environments (like in Guix)
easier.
** Guile-SMC tests now uses file log driver
Each test suite now logs to a file named =<test-suite-name>-smc.log= in the
=tests= directory.
** Update the Texinfo documentation
* Version 0.5.0 (2022-08-23)
** Compiler changes
*** =guile-standalone=: Add missing dependency for the target code
*** =guile-standalone=: API change: Target now produces =fsm-run!= procedure
Guile-SMC now generates =fsm-run!= procedure when =guile-standalone= target is
set to provide the same API as for other targets.
*** =guile-standalone=: Improve the output code layout
Code from different modules now separated by section headers.
** core: API change: =(smc core stack)= is removed
** =smc context=: API change: Implement intermediate contexts
Now =smc context= allows to generate intermediate contexts that can be used
from custom contexts. Intermediate contexts can be used to implement some
custom code (e.g. user contexts) that is indifferent to target compiler.
** =smc context=: Allow to read input from a provided file
=smc context= now can read the input PlantUML data from a provided file.
** =smc profile=: Fix the help message
** =smc run=
*** Ensure that the =context-thunk= is a procedure with zero parameters
*** debug mode: Now print stats for both parent and child FSMs
*** Improve help messages
** Update the Texinfo documentation
* Version 0.4.0 (2022-03-11)
** Add FSM profiler
Add =smc profile= command. Currently the profiler allows to measure the
time a FSM spends in each state.
** Add =guile-standalone= compilation target
This compilation target produces GNU Guile FSM code in a single file that
does not dependent on Guile-SMC.
All required Guile-SMC procedures will be copied to the output stream, and
the extra procedures that are not used in the output code are removed by
pruning.
Here's an example of an output FSM (without the auxiliary code copied from
Guile-SMC that normally goes before this procedure):
** Add =guile-standalone-copy= compilation target
The compiler can be configured in such way that it will copy all the
modules that are needed to run the output FSM so the FSM will not depend on
Guile-SMC.
** =smc compile= now accepts =--target= option
This option allows to set the compilation target. Allowed targets are:
- guile
- guile-standalone
- guile-standalone-copy
** =smc compile= now allows to pass input file as an argument
** =smc= now handles =--version= option
The state machine compiler now either read input FSM description in
PlantUML format from the standard input or from a file specified as an
argument.
** Optimize the PlantUML parser
PlantUML parser now about 25% faster.
** Add new examples
** Add =smc= man page
** Update/expand the documentation
* Version 0.3.0 (2021-12-04)
** Bootstrap PlantUML parser by itself
Now Guile-SMC uses itself to generate an FSM for PlantUML format.
** =(smc version)=: New module
The module contains information about the current Guile-SMC version.
** Guile-SMC compiler now adds version information to the output file
** Add new context modules
There are now =(smc context context-char)=. This module defines guards
for the whole ASCII table.
** Allow to provide custom event sources for FSMs
** Allow to set entry/exit actions for each state
** Use a logger implementation from the Guile-Library
** Order of parameters of guards and actions is changed
** =(smc puml)=: Improve PlantUML syntax checking
** Guile-SMC now allows to set a FSM description
** =smc= functionality now split between sub-commands
** =smc= now allows to generate and analyze FSM context
See =context= sub-command.
** =(smc fsm)=: API of =fsm-run!= is simplified
** Implement "run" command
The =smc= program now has =run= command that allows to read and run a
finite-state machine based on a PlantUML description right away.
** Add new tests
** Documentation updated
* Version 0.2.0 (2021-06-06)
** Fix installation paths for source and compiled and files
- Compiled files are now installed to the right 'site-ccache' path.
- Guile modules are now installed to the current Guile site directory by
default.
Thanks to Aleix Conchillo Flaqué.
** Expand the Texinfo documentation
** API changes
*** =(smc context context)=: Bugfix
The =<context>= would always have unexpected side effects due to field
initialization with a single global instance of a <stack>. The instance
would become shared between all the context in an application.
Now the error is fixed.
*** =action:no-op= procedure moved to the context
Now it's available from =(smc context char-context)= and =(smc context
context)=.
*** All transition guards are now a part of Guile-SMC contexts
There are modules in =(smc context)= name space that contain the
transition guards.
=(smc guards char)= is removed.
*** =(smc context char-context)=: New module
This module contains a context for handling streams of characters.
*** In =(smc fsm)=
**** New procedures in (smc fsm)
- =fsm?=
**** Renames
- =log-debug-transition= -> =fsm-log-transition=
** Changes in =smc= program
*** Handle FSM validation independently
The =smc= tool now handles FSM validation (=--validation= flag)
independently from e.g. compilation. Compilation stops when any problems in
the output FSM are found.
*** Handle empty =modules= and =fsm-module= options
The program does not throw an error when the options left empty -- it uses
default values instead.
* Version 0.1.0 (2021-05-01)
First version of Guile-SMC.
Local Variables:
mode: org
End: