unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* [ANN] Guile-SMC 0.4.0 released
@ 2022-03-11 19:15 Artyom V. Poptsov
  2022-03-11 19:44 ` Aleix Conchillo Flaqué
  2022-03-11 21:25 ` Dr. Arne Babenhauserheide
  0 siblings, 2 replies; 3+ messages in thread
From: Artyom V. Poptsov @ 2022-03-11 19:15 UTC (permalink / raw)
  To: Guile Users' Mailing List

[-- Attachment #1: Type: text/plain, Size: 3283 bytes --]

Hello,

I'm pleased to announce Guile State Machine Compiler (Guile-SMC), version
0.4.0:
  https://github.com/artyom-poptsov/guile-smc/releases/tag/v0.4.0


* What is Guile-SMC?

Guile-SMC is a state machine compiler that allows to describe finite
state machines (FSMs) in Scheme in terms of transition tables.  It is
capable to generate such transition tables from a PlantUML state
diagrams. [1]

A transition table can be verified and checked for dead-ends and
infinite loops.  Also Guile-SMC FSMs gather statistics when they run.

Guile-SMC comes with a Scheme program called 'smc' -- a state machine
compiler itself.  It produces a Scheme code for an FSM from the PlantUML
format.  This tool is meant to be called on a PlantUML file when a
program with a FSM is being built (for example, from a Makefile.)

I'm hoping that it will ease the burden of writing format parsers and
other useful GNU Guile libraries for the community.


* User-visible changes

--8<---------------cut here---------------start------------->8---
* 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
--8<---------------cut here---------------end--------------->8---


* Usage examples

I wrote an INI[2] format parser to test the foundation ideas behind
Guile-SMC from the practical perspective:
  https://github.com/artyom-poptsov/guile-ini

Also I wrote a simple PNG[3] format parser that uses Guile-SMC as well:
  https://github.com/artyom-poptsov/guile-png

Happy hacking,

- Artyom

References:
1: https://plantuml.com/state-diagram
2: https://en.wikipedia.org/wiki/INI_file
3: https://en.wikipedia.org/wiki/Portable_Network_Graphics


-- 
Artyom "avp" Poptsov <poptsov.artyom@gmail.com>
Home page: https://memory-heap.org/~avp/
CADR Hackerspace co-founder: https://cadrspace.ru/
GPG: D0C2 EAC1 3310 822D 98DE  B57C E9C5 A2D9 0898 A02F

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 487 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2022-03-11 21:25 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-11 19:15 [ANN] Guile-SMC 0.4.0 released Artyom V. Poptsov
2022-03-11 19:44 ` Aleix Conchillo Flaqué
2022-03-11 21:25 ` Dr. Arne Babenhauserheide

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).