From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: "Artyom V. Poptsov" Newsgroups: gmane.lisp.guile.user Subject: [ANN] Guile-SMC 0.4.0 released Date: Fri, 11 Mar 2022 22:15:13 +0300 Message-ID: <87v8wk7132.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha512; protocol="application/pgp-signature" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="3116"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.2 (gnu/linux) To: Guile Users' Mailing List Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Fri Mar 11 20:15:59 2022 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nSkk3-0000ca-JT for guile-user@m.gmane-mx.org; Fri, 11 Mar 2022 20:15:59 +0100 Original-Received: from localhost ([::1]:56704 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nSkk2-0000iR-0b for guile-user@m.gmane-mx.org; Fri, 11 Mar 2022 14:15:58 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:51342) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nSkjR-0000iC-2y for guile-user@gnu.org; Fri, 11 Mar 2022 14:15:22 -0500 Original-Received: from [2a00:1450:4864:20::22c] (port=35535 helo=mail-lj1-x22c.google.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1nSkjP-0007QN-Aw for guile-user@gnu.org; Fri, 11 Mar 2022 14:15:20 -0500 Original-Received: by mail-lj1-x22c.google.com with SMTP id h11so13340915ljb.2 for ; Fri, 11 Mar 2022 11:15:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:subject:date:message-id:user-agent:mime-version; bh=5TRV//2F++L+Dbq1azivRniAgmE2FyFbsPm7aqYCnpE=; b=JLss0tjKX2S6GeinywbaiewjrvbQKPLduN0qwiz+OXkjDePtRgO+DZVAEURN2feioI Qgo1+XE2H9NWPjE13qxNR6lBSjnUsbqhkonvyDHQE8r8lc5/CTFfWnq0A60acfy8ZbDr EwWbExcHyDiEYpxQiJt62PwhQHy3fALqQHYplGFtn3QFhyyGvzRy72x6m4BOqEnA2ZoA 5olyfw50gG/L2R571zvl/1LlHhBZ9sRIaeYItiAFcv3UzEZvz4eyyMAmWazBprhrILRq XTvimsjIYu9O1qMrK2VhokhlgvRSywd/7w+qQZiAvJL6Edig4sJEjS/VkYtxzI/wRWB6 afGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:subject:date:message-id:user-agent :mime-version; bh=5TRV//2F++L+Dbq1azivRniAgmE2FyFbsPm7aqYCnpE=; b=gX8MbiV8vOuIPqDzjatGfonn9cIdM3W0x7ZcfJ5ukBIVWntJ9c06Uat4fSZzk5U3Is 9ScmfuWrXjcZZYQzO3i1LsgxnJ/Fz1AQQsiIn3VNMPohs/J572fyNnD8SSdah02pZZ4i bbnwZ7YkhsPPXCKL+Ct0ieFkDWCMNd6W5U9vro+aiM0TQ8UiB2h3y+AOSYQiPLWE7KJ4 jaaEuf10/vp+FpFIA0ADx7fKZjBQjyOCWaQLm65otPWi4Y7LEbglJvo2z7mYCJDOfXzP OogLnoniSQrdQHvodKd6fWBo181AGeseSCcX1PDEsaVITCVaMfFHbMQGENtiHTYM6Y1u aTNg== X-Gm-Message-State: AOAM531kZxk2Vev7krfITHV2pd8+D4YktQ5+3iS8AZcFr0awLIga4tcf 3HBSukT42gawZj9yGBSgqG/TQZQOAmI= X-Google-Smtp-Source: ABdhPJxb57vUYtlKt0X7DHuGAxMmjA+ch8s2G9mvmiG79/7E1+6B0l2ZULDvO4m/lvHG/IlNk4xJMA== X-Received: by 2002:a05:651c:2102:b0:244:c93d:178b with SMTP id a2-20020a05651c210200b00244c93d178bmr6776222ljq.123.1647026116244; Fri, 11 Mar 2022 11:15:16 -0800 (PST) Original-Received: from elephant ([5.164.192.110]) by smtp.gmail.com with ESMTPSA id g1-20020a19e041000000b00443131b3efcsm1762791lfj.284.2022.03.11.11.15.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Mar 2022 11:15:15 -0800 (PST) X-Host-Lookup-Failed: Reverse DNS lookup failed for 2a00:1450:4864:20::22c (failed) Received-SPF: pass client-ip=2a00:1450:4864:20::22c; envelope-from=poptsov.artyom@gmail.com; helo=mail-lj1-x22c.google.com X-Spam_score_int: -6 X-Spam_score: -0.7 X-Spam_bar: / X-Spam_report: (-0.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, PDS_HP_HELO_NORDNS=0.659, RCVD_IN_DNSWL_NONE=-0.0001, RDNS_NONE=0.793, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.io gmane.lisp.guile.user:18191 Archived-At: --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable 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 =2D-8<---------------cut here---------------start------------->8--- * Version 0.4.0 (2022-03-11) ** Add FSM profiler Add =3Dsmc profile=3D command. Currently the profiler allows to measure= the time a FSM spends in each state. ** Add =3Dguile-standalone=3D 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, a= nd 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 fr= om Guile-SMC that normally goes before this procedure): ** Add =3Dguile-standalone-copy=3D 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. ** =3Dsmc compile=3D now accepts =3D--target=3D option This option allows to set the compilation target. Allowed targets are: - guile - guile-standalone - guile-standalone-copy ** =3Dsmc compile=3D now allows to pass input file as an argument ** =3Dsmc=3D now handles =3D--version=3D 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 =3Dsmc=3D man page ** Update/expand the documentation =2D-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, =2D 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 =2D-=20 Artyom "avp" Poptsov 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 --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEE0MLqwTMQgi2Y3rV86cWi2QiYoC8FAmIrn8EACgkQ6cWi2QiY oC/vJAf/Y26WvrENBD5oyJy2y54uArlLwAtitoykirKvNJePug0m4ghV0Z86jPiF oWjy0j7UAWuZyrzwLIx+292RZNBu2INBeMH+3FL7MNoBf1tcFFJoX6kLpVda+Piu QlDFi+DXrcLlmuycvCFvarl3mZFq7C/9JHRjbma7d6Z+s5DFi8fa9uZ940KWsZik Qw0eglQZJImsm7r9fLJVI22/lncgXeuNYEZUbz3s3aHosreuJqOCPP7MD6aQe2aV sjg179S6bh5QPrbPgRUmoBQrvpPHagWNDAsWM9b1+NTE0qfCFz8ZIQUFw9Exjxtb cGqJ5LWq2nYLxQDF8XXdtvp4lDKAkw== =vA0f -----END PGP SIGNATURE----- --=-=-=--