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.5.0 released Date: Tue, 23 Aug 2022 09:05:37 +0300 Message-ID: <87lerfo5ou.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="34929"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.1 (gnu/linux) To: Guile Users' Mailing List Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Tue Aug 23 08:07:48 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 1oQN4m-0008sN-L3 for guile-user@m.gmane-mx.org; Tue, 23 Aug 2022 08:07:48 +0200 Original-Received: from localhost ([::1]:46856 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oQN4k-0006g3-VW for guile-user@m.gmane-mx.org; Tue, 23 Aug 2022 02:07:47 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:46506) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oQN2x-0006ef-2G for guile-user@gnu.org; Tue, 23 Aug 2022 02:05:56 -0400 Original-Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130]:41586) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oQN2m-0007tO-Kd for guile-user@gnu.org; Tue, 23 Aug 2022 02:05:46 -0400 Original-Received: by mail-lf1-x130.google.com with SMTP id l1so17742945lfk.8 for ; Mon, 22 Aug 2022 23:05:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:user-agent:message-id:date:subject:to:from:from:to:cc; bh=/frVBItWMM4dUuRtFDcjqF/rmhoQismntPpF+Gm5jV4=; b=AlCBlpLaYJbQMWmSfmYm63RWTtNUs/Fj3gZVgZ4NYiIcL1W2FOyO3VDZInfUgJPNgZ YPTCLYy9rj4IxP1R0iaUQDz9nx7mQW4ii1yUQOudpxxfWCxpPSEP6IiSVLMMDziTa0fG sGypdd0EePG+OZWCxsqx9nkE2ZHtkAq+1boHU9UsdKyUHq5dAOZG2+asvKwx62QtD2Sa I6wigyyGwhMaWG9rTuWd9IesxxTRMz6JkF8dJYwH2jMN8mzyBvM+VsvFRqIgqjLhtHU7 WsLI7KTT0i/3WjSCozvQRqo3TKY/Z2N6p+f/S0ytUYz9QdAks6VLKgEPmPbW+zid9l3d zYSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=mime-version:user-agent:message-id:date:subject:to:from :x-gm-message-state:from:to:cc; bh=/frVBItWMM4dUuRtFDcjqF/rmhoQismntPpF+Gm5jV4=; b=ggGZuDlw8phhaTj2vmFCWpynmHXFYJwCfskoPIFUWehly/+/qmYu/Nw12Dk7eFRa8r ltrqO5YP5I6hqu5sUqQD7ymvh4kzAiqT6ZiVisEpH1gTjE43mau8G9/+j+Q9m0crr9QQ PKCUrB0N0JJk0ZsSGUFgtwzC/YTEA/E5p3PFGzIzLm3IMEo6LFlB/fumH0TsblKjHvGX N/CIUjBL9jRsnn5xx5/TigIvlZiAqVfhD+pJEQbHNY29jemR4g5904SK1ltwaSrQU7Nr ++8rvBvC1xOdL5diF/rZFxNMwr55U3go7sVs17GGKi3R5vp7yVMqqUt18yGkg/DmhxHY Kt6A== X-Gm-Message-State: ACgBeo03UD4MvBDEruvVYf2PFr3Gzp8rz5EfnVXH0IoO25xo0iq5SdSN bwbD3SY8UVfUFa22LAqSXSASSWSfPvoPUA== X-Google-Smtp-Source: AA6agR7rrNTbuKLYXDqGU2pNWiNOzhq5c1KuK/5T1bbfjx1dFWRJcnbGL1O7xSEjq/D1j/tCDiJBDA== X-Received: by 2002:a05:6512:2828:b0:492:f6b8:75f7 with SMTP id cf40-20020a056512282800b00492f6b875f7mr536193lfb.79.1661234741750; Mon, 22 Aug 2022 23:05:41 -0700 (PDT) Original-Received: from elephant ([5.164.199.39]) by smtp.gmail.com with ESMTPSA id k6-20020ac257c6000000b00492b61253a0sm2320735lfo.72.2022.08.22.23.05.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 22 Aug 2022 23:05:40 -0700 (PDT) Received-SPF: pass client-ip=2a00:1450:4864:20::130; envelope-from=poptsov.artyom@gmail.com; helo=mail-lf1-x130.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham 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:18540 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.5.0: https://github.com/artyom-poptsov/guile-smc/releases/tag/v0.5.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] Some of the key features: =2D A transition table can be verified and checked for dead-ends and infinite loops. =2D Guile-SMC FSMs gather statistics when they run (steps/transitions); the statistics can be used can be used to compare/analyze FSMs.. =2D There's an FSM profiler that runs on FSMs trace logs. The profiler output shows how much time the FSM spends in each state. This can be useful for optimization. =2D The state machine compiler supports three "targets" for compilation: a regular Guile target where the output FSM depends on Guile-SMC; "guile-standalone" target that produce an FSM that does not depend on Guile-SMC; "guile-standalone-copy" where all the required parts of Guile-SMC are copied alongside with the output FSM to make the code independent. =2D Guile-SMC allows to run a FSM on-the-fly with a single "smc run" command -- see the docs and the examples for more information. 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.5.0 (2022-08-23) ** Compiler changes *** =3Dguile-standalone=3D: Add missing dependency for the target code *** =3Dguile-standalone=3D: API change: Target now produces =3Dfsm-run!=3D = procedure Guile-SMC now generates =3Dfsm-run!=3D procedure when =3Dguile-standalone= =3D target is set to provide the same API as for other targets. *** =3Dguile-standalone=3D: Improve the output code layout Code from different modules now separated by section headers. ** core: API change: =3D(smc core stack)=3D is removed ** =3Dsmc context=3D: API change: Implement intermediate contexts Now =3Dsmc context=3D 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. ** =3Dsmc context=3D: Allow to read input from a provided file =3Dsmc context=3D now can read the input PlantUML data from a provided file. ** =3Dsmc profile=3D: Fix the help message ** =3Dsmc run=3D=20 *** Ensure that the =3Dcontext-thunk=3D is a procedure with zero parameters *** debug mode: Now print stats for both parent and child FSMs *** Improve help messages ** Update the Texinfo documentation =2D-8<---------------cut here---------------end--------------->8--- * Some ideas for the future development =2D Write a PlantUML generator that take a instance and produces a PlantUML state diagram. =2D Add support for other output languages (e.g. C, Common Lisp, ...) =2D Expand the suite of FSM contexts for FSM of different domains. That is, there's already "char-context" for text processing FSMs and we can add "binary" context, for example. Or "network" context for writing networking applications. Any help with this list will be appreciated, and new ideas are welcome! * 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 The new Guile-INI release will follow soon, with the changes needed to work with Guile-SMC 0.5.0. Happy hacking, =2D Artyom References: 1: https://plantuml.com/state-diagram 2: https://en.wikipedia.org/wiki/INI_file =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----- iQFNBAEBCgA3FiEE0MLqwTMQgi2Y3rV86cWi2QiYoC8FAmMEbjEZHHBvcHRzb3Yu YXJ0eW9tQGdtYWlsLmNvbQAKCRDpxaLZCJigL0PrB/9WgncH7y95zgC0s6c3VJ7z d9883RqvCMB0ObnUGBmGKcntk1N6BbDr2/Xb3RDqx57rFxz3RFpS6Zm0niSpOW9W MxcztPpRyncpRoI0nNnWcoYmKDD/4w/rKRYNX3+K2PNffjz7HMzrxM+TykyX8LBe Xw8M2u8tpk02OZThp93V6lqxGVYOk5XPE+76J+UrnDKMfsnPz3xPMNUXLVShF0a4 +D0Zcg88ewNYEdX+A74jcnC8JQzMuKm4XT9/qQYB+1j0qdpJ6K1zpeMrge8F7BC0 oY86lNZanN98bIVA1mnyTJLiTRj0V9KC0JqPdkaFGyTaKk9KEpZIw4IiLdJSUvsT =48NO -----END PGP SIGNATURE----- --=-=-=--