guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[ANN] Guile-SMC 0.4.0 released


From: Artyom V. Poptsov
Subject: [ANN] Guile-SMC 0.4.0 released
Date: Fri, 11 Mar 2022 22:15:13 +0300
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux)

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: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]