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" <poptsov.artyom@gmail.com>
Newsgroups: gmane.lisp.guile.user
Subject: [ANN] Guile-DSV 0.7.0 released
Date: Tue, 15 Aug 2023 12:34:23 +0300
Message-ID: <87wmxwejj4.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="40935"; mail-complaints-to="usenet@ciao.gmane.io"
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.2 (gnu/linux)
To: Guile Users' Mailing List <guile-user@gnu.org>
Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Tue Aug 15 11:35:33 2023
Return-path: <guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org>
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 <guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org>)
	id 1qVqSZ-000AOA-T4
	for guile-user@m.gmane-mx.org; Tue, 15 Aug 2023 11:35:32 +0200
Original-Received: from localhost ([::1] helo=lists1p.gnu.org)
	by lists.gnu.org with esmtp (Exim 4.90_1)
	(envelope-from <guile-user-bounces@gnu.org>)
	id 1qVqRx-00061T-4T; Tue, 15 Aug 2023 05:34:53 -0400
Original-Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <poptsov.artyom@gmail.com>)
 id 1qVqRv-00061J-6O
 for guile-user@gnu.org; Tue, 15 Aug 2023 05:34:51 -0400
Original-Received: from mail-lf1-x130.google.com ([2a00:1450:4864:20::130])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <poptsov.artyom@gmail.com>)
 id 1qVqRq-0004Jg-NC
 for guile-user@gnu.org; Tue, 15 Aug 2023 05:34:50 -0400
Original-Received: by mail-lf1-x130.google.com with SMTP id
 2adb3069b0e04-4fe8c16c1b4so8027674e87.2
 for <guile-user@gnu.org>; Tue, 15 Aug 2023 02:34:30 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20221208; t=1692092068; x=1692696868;
 h=mime-version:user-agent:message-id:date:subject:to:from:from:to:cc
 :subject:date:message-id:reply-to;
 bh=9H9Ztyvtpe9IU1rdZ3L/Bvg47QPBms4D+znP87E5ZsQ=;
 b=FpCe0FVe8b/5nh/roFiCmISRByAiUytQfigvWJYsurwPPUAt/zzg8So/KIngV+Lx/g
 58FeyrU4o+IvHh5ouOMTBJvwh3NdXgXmFZlEbtZ1uRbQ0kIlEvEdl5GZHBBJk3OQUWq/
 Cj+pd5crp5BufaomBuf+Lp2IlrMWFMjq3dQdDnIoTGyGHDFechd4fnBVqw72QCotLAHH
 A68iXAXi2mFkFIqekyMMDjoHkcA+/w2ucIiHbuj/jRi08Dakhio5DLZIE5okeUy5ih38
 HAWGTNeRSL6cXQL4tEYrpM3aNohVgGxtTSCzuKy2GngQG3KD2vyRgjhjjmrcKX20MRVV
 0T9A==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20221208; t=1692092068; x=1692696868;
 h=mime-version:user-agent:message-id:date:subject:to:from
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=9H9Ztyvtpe9IU1rdZ3L/Bvg47QPBms4D+znP87E5ZsQ=;
 b=IpnhePWNugKQ+Oa1t8D5NyeNKicopI7R/vQ2+cQBtwLcEq8HlkyiyWlGVG0vMw0ssX
 xk0FWFEEYU3crA9ntQhYNVU6qoFdwVuDRy2XJH36B8pxWVRdQJw/N6t7dSFWQyeNYqsf
 4/ndwZKufBx1VQxbekRW9IIR3/q7I2D7F5nsuBQ/ay2FkIQeVr/KfK2D5cIbVMrqClrD
 yJUrZ6ijMfdKTniSW7URxOtbm/Q7gZ16PuE823WE0wR4O0oz2JmK9A7EZ1DIvkTfsmUV
 jez8X/0Bs33cnu1t3eWK7Od3kxRsh6lVKEX6MUZ5Ep6VC0VX07Eb5cph08BgBSYaouhp
 6Myw==
X-Gm-Message-State: AOJu0YxoGjbHCRxBYxOSo+Xs15rQmQsl0hkezuFlC9EfQMJNWkzpr36a
 pcODKZiTpPZzGZrl0dIjJLfrRwVye5g=
X-Google-Smtp-Source: AGHT+IG8hApm4BMU8zBtwGFPi7xEkhoLmgvR5rk3xXAPTK5dHhVyHTI9G8sFxqtYj/+Y9KqJIVWsaQ==
X-Received: by 2002:a05:6512:3b97:b0:4f4:d071:be48 with SMTP id
 g23-20020a0565123b9700b004f4d071be48mr11125509lfv.14.1692092067843; 
 Tue, 15 Aug 2023 02:34:27 -0700 (PDT)
Original-Received: from elephant ([5.166.203.208]) by smtp.gmail.com with ESMTPSA id
 s6-20020a19ad46000000b004fb757bd429sm2364221lfd.96.2023.08.15.02.34.26
 for <guile-user@gnu.org>
 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
 Tue, 15 Aug 2023 02:34:26 -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 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 <guile-user.gnu.org>
List-Unsubscribe: <https://lists.gnu.org/mailman/options/guile-user>,
 <mailto:guile-user-request@gnu.org?subject=unsubscribe>
List-Archive: <https://lists.gnu.org/archive/html/guile-user>
List-Post: <mailto:guile-user@gnu.org>
List-Help: <mailto:guile-user-request@gnu.org?subject=help>
List-Subscribe: <https://lists.gnu.org/mailman/listinfo/guile-user>,
 <mailto:guile-user-request@gnu.org?subject=subscribe>
Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org
Original-Sender: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org
Xref: news.gmane.io gmane.lisp.guile.user:19162
Archived-At: <http://permalink.gmane.org/gmane.lisp.guile.user/19162>

--==-=-=
Content-Type: multipart/mixed; boundary="=-=-="

--=-=-=
Content-Type: text/plain

Hello Guilers,

I'm pleased to announce Guile-DSV 0.7.0:
  https://github.com/artyom-poptsov/guile-dsv/releases/tag/v0.7.0

This release replaces the old finite-state machine (FSM) implementation
with the new one that uses Guile State Machine Compiler (Guile-SMC) [1].
The new FSM code is generated at build-time from PlantUML description
directly.

See the full list of user-visible changes below.

As the result of re-writting FSMs of Guile-DSV with PlantUML/Guile-SMC,
Guile-DSV gained some speed improvements.  You can find an attached
LibreOffice Calc document with some benchmarking using around 5 million
lines of data (source: [2])

--=-=-=
Content-Type: application/vnd.oasis.opendocument.spreadsheet
Content-Disposition: attachment;
 filename=guile-dsv-fsm-benchmark-2023-08-14.ods
Content-Transfer-Encoding: base64

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
aUldcVVbY0xhdlpiZ1VnemlXRmRdVnFcR2dhXHZhTXpnVGFhYWZsc2pyenNsZnpyand3dldsgVxx
hmV3iml9kXV8hHSIAG2ClnuBiXSHmneMoX2SpoFsAIl2AJF9AIFtWIZyXYp3ZYR8dZJ9aIiHAISE
F4eaAJmIAJqZAJiYI4yhAJOmAJ6yAKGNAKeVALGcAKysAKSkHaa4AbenALm4ALu7IYmCe5aBbJqH
daGMeKaSfaCgX6urZb6+dbXHAMCrAMa3ANK9APKbffKhfsfHAMjXAdXJANTVBM3gANnlAOXbAOHh
AOrzAPLqAP7+AM3NeoiJiYWMlImSm5SMhpmRiJiYmYaXqIidspWcpYyhtpeiq5anuamXhKSclLGc
iKmhmbahjLinlqWlpaSstKmyurSspbCvsbuyqLa2tpmtwZ2yxqW3yai90rW9xa7CzKzB1brDyrXI
2LzQ3bfM4L7S5MGtmMayncm4pcS8tdG9qPKcg/OliPKqlvWwjvW0mPOvovW4pfS9s8rCudfDrtnI
td7QvuLNuePRvvfEqvfIt/nSuunpisHCwsbN08nS2dTMxNvTytHR0cjY5sne8dPc5N7g187g7M3h
8Njj6tjp89zw/ebYx+Td1fbLxfjXyPja1vje4O3hz+vi2Prhzfjn2Prw3unp6eXt9Ozy6ur1+vfq
5fvt8frz6v7+/mQXuVsAADsOSURBVHja7Z0LXBPH9+iHkBBR+WMwKoI8LaVaH9W2Plv0/n1UmyKo
9YlYxUe1atWi/qu3T//qz9e9l1qKWhVyqRVtK9X6ttra2hZFQIqKv6oXef3AHxTFGmEx2Z17zmwC
qH2EkEToZw4ku9nszp757tkzM2dmJ4RycaYQjoDz/nvz3hUTk/xJvmNPcyVe/Mt9snPklx0lO0O0
Yq+7ZuU+ympo+tXxF/4iR1L2/bsAby1BGV1j2XTGpcYBvE3ySnwVFT8y/e4+H4Fi8VftyzvTGt5X
MuiDvM/fspW3VM+yIEeV8RdMD/J2MdKiwWQ8pUX7D9bQomEuh2powf5DgnmXiylHy2BhOHjwOiSX
B2+FeUYpL//mQTziEF6cgpTjRkqF0j/jbaoUqXQ1/lbVtfhboqmKVt1FxaS7t9kCdb+NL/iGilWw
raoKFDU9sCbnRT6oSpRuw7ucAJW/xKNpVeVv7HOlyHhXVVZZ1Lh9W5Twg0lOAEnAW3YWnvK2zPv2
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
Tkhk8UFZQQT9Xl1AdjkYsxLoeykSauPfIxX698kyuERa8CxaMiKhN+y/yM3JvM2POWzx6ogdDWAo
etZL9V69UPx7bFDdoqZm33XxWFnBJE1t23I7BlrfU3Z5RvF2XX8a9jd0XM14s+dNwJm/+Qj8t57Z
94cdOvRXPgdG7ObDulTfrevHXk48tjmWt+3xb6bkIllB+SEHJvJDDtDIUdQ+n+bTMUk5wg37G2T7
htf7j5C3lj029Zb+vSHLGNg6+36ddNmhb8r2/br8RAB7usFi3rBlOxp9b/LflvLSQz9USTab7TsR
+1eQd2LiI+GdhM7uXTInYaVeftiL3WtJO3Cj+UmWJmnfb7OuSvbhfTZqA4cgy8Zifr7hTdWD/Q31
7HuOfqGzy8tNLz5HOr64aiAZsRIqJyPxma4B+pUL+5P+c+DTqiQN6f/cc89tfm/OM2TAws1Nyb5R
yQEvrlEyBT/GR0v0evmhBHxIQQ91k7dWKBVxZv/9TBd9ks8I/Sa3d/TPwI3QuxPUJDu87fzychEb
1jhn+1A3ZccV+qSBSrfnoJaEgx693lxI4pLkIZBxQ708vDp4vNOU7HukWwdQao4PG6UZBx83Wzz3
UDfs6v6wt1LZJa7JxmMtnqy+Q9Nubnbty/r9DZiX5tSed1Z/gx3jJ+89+NzkVvdmFD9xUn+DHe07
8ffjVf3/4Xhx+2/7p/lfnRygaO//ciCF/8l4h+ocLw45R7dmkma91JE35eJM4bw5b86bC+fNeXPh
vDlvzpsL5815c+G8OW8unDfnzXlz4bw5by6cN+fNhfPmvDlvLpw3582F8+a8uXDenDfnzYXz5ry5
cN6cNxfOm/PmvLlw3pw3F86b8+bCeXPenDcXzpvz5sJ5c95cOG/Om/Pmwnlz3lw4b86bC+fNeXPe
XDhvzpsL5815c+G8OW/OmwvnzXlz4bw5b86bC+fNeXPhvDlvLpw35815c+G8OW8unDfnzYXz5rw5
by6cN+fNhfPmvLlw3pw3582F8+a8uXDenDcXzpvz5ry5cN6cNxfOm/Pmwnlz3pw3F86b8+bCeXPe
XDhvzpvz5sJ5c95cOG/OmwvnzXlz3lw4b86bC+fNeXPhvDlvzpsL5815c+G8OW8unDfnzXlz4bw5
by6cN+fNeXPhvDlvLpw3582F8+a8OW8unDfnzYXz5ry5cN6cN+fNhfPmvLlw3pw3F86b8+a8uXDe
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
xbfqe7H6OZv8A1zr2BuTYGn5gZ7LE9uCAi/Whj6IvYHHMToq4ywu4/TuQajutHter3arPHgH7I5G
/wbmUIbvvnRC8iidTS7nTeefP1HrfIvWCRaMddfsJURMd8r5sYdTkYGUSy0v5qLeD04XFNEaXd0Q
uvU30L9QSwcIGrO9iKABAABLAwAAUEsDBBQAAAgAAFidDlcAAAAAAAAAAAAAAAAcAAAAQ29uZmln
dXJhdGlvbnMyL3Byb2dyZXNzYmFyL1BLAwQUAAAIAABYnQ5XAAAAAAAAAAAAAAAAGgAAAENvbmZp
Z3VyYXRpb25zMi90b29scGFuZWwvUEsDBBQAAAgAAFidDlcAAAAAAAAAAAAAAAAaAAAAQ29uZmln
dXJhdGlvbnMyL3N0YXR1c2Jhci9QSwMEFAAACAAAWJ0OVwAAAAAAAAAAAAAAABwAAABDb25maWd1
cmF0aW9uczIvYWNjZWxlcmF0b3IvUEsDBBQAAAgAAFidDlcAAAAAAAAAAAAAAAAYAAAAQ29uZmln
dXJhdGlvbnMyL3Rvb2xiYXIvUEsDBBQAAAgAAFidDlcAAAAAAAAAAAAAAAAYAAAAQ29uZmlndXJh
dGlvbnMyL2Zsb2F0ZXIvUEsDBBQAAAgAAFidDlcAAAAAAAAAAAAAAAAaAAAAQ29uZmlndXJhdGlv
bnMyL3BvcHVwbWVudS9QSwMEFAAACAAAWJ0OVwAAAAAAAAAAAAAAABgAAABDb25maWd1cmF0aW9u
czIvbWVudWJhci9QSwMEFAAACAAAWJ0OVwAAAAAAAAAAAAAAAB8AAABDb25maWd1cmF0aW9uczIv
aW1hZ2VzL0JpdG1hcHMvUEsDBBQACAgIAFidDlcAAAAAAAAAAAAAAAAKAAAAc3R5bGVzLnhtbMVa
WXPbNhB+76/QKNO+0dSRy6qPaZOmV5Lp5GgfMxAIUmhAggOAlp1f38XJQyRNy4krz9hD7GJ3v72w
hHx2eZ2z2RURkvLifL48WcxnpMA8oUV2Pv/44VX0fH558d0ZT1OKySbhuMpJoSKpbhiRM9hcyE0p
iIRFpIyMShQbjiSVmwLlRG4U3vCSFH7r5nDPxqi161jKtTqf75QqN3G83+9P9usTLrL4w7tY0yJF
rlXsuUVZ82ol1kzDv1osnsSClFwoz53gwFxWghm2BMeEEW2YjJcnyyAZ75BQU8EY5iYKeZVN3Qus
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
--=-=-=
Content-Type: text/plain
Content-Transfer-Encoding: quoted-printable


More detailed information about the data (lines/words/characters):
=2D-8<---------------cut here---------------start------------->8---
$ $ wc datasets/FeedGrains.csv
  498929  6010097 93054624 datasets/FeedGrains.csv
=2D-8<---------------cut here---------------end--------------->8---

I took five "dsv" runs using RFC 4180 input format with "--summary"
option on Guile-DSV 0.6.0 and Guile-DSV 0.7.0 with the same options (and
disabled logging) and in some cases the new parser implementation is 15
times faster that the old one.

As a bonus Guile-DSV FSMs are now much nicer and easier to maintain.
The downside is that now Guile-DSV depends on Guile-SMC.


* What is Guile-DSV?

Guile-DSV is a library that allows to parse Delimiter-Separated Values
format (DSV).  It supports two flavors of DSV: Unix-style[3] and RFC4180[4].

Also Guile-DSV is shipped with a program named "dsv" that allows to read
and process DSV format (including delimiter change and conversion from
one standard to another, formatting tables etc.)  See README file for
usage examples.


* List of user visible changes

Here's an excerpt from the NEWS file:

=2D-8<---------------cut here---------------start------------->8---
* Changes in version 0.7.0 (2023-08-15)
** Guile-DSV now uses Guile State Machine Compiler (Guile-SMC)
Guile-DSV now uses Guile State Machine Compiler (Guile-SMC) for the state
machine code generation from the PlantUML description:
  https://github.com/artyom-poptsov/guile-smc

** =3Ddsv->scm=3D and =3Ddsv-string->scm=3D now accept additional parameters
Now =3Ddsv->scm=3D and =3Ddsv-string->scm=3D procedures accept additional p=
arameters:
=2D =3D#:debug-mode?=3D -- Enable/disable the debug mode.
=2D =3D#:log-driver=3D -- Set the logging driver.
=2D =3D#:log-opt=3D -- Set the logging options.
** =3Ddsv=3D tool now accepts =3D--log-driver=3D and =3D--log-opt=3D
** Update Texinfo documentation
=2D-8<---------------cut here---------------end--------------->8---


Thanks and happy hacking!

=2D Artyom

1. https://github.com/artyom-poptsov/guile-smc
2. https://www.ers.usda.gov/data-products/feed-grains-database/feed-grains-=
yearbook-tables/
3. http://www.catb.org/~esr/writings/taoup/html/ch05s02.html#id2901882
4. https://tools.ietf.org/html/rfc4180


=2D-=20
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

--=-=-=--

--==-=-=
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQFNBAEBCgA3FiEE0MLqwTMQgi2Y3rV86cWi2QiYoC8FAmTbRp8ZHHBvcHRzb3Yu
YXJ0eW9tQGdtYWlsLmNvbQAKCRDpxaLZCJigLz2WB/9ivMg3+icfNXOe092mC3gY
sdsRWTz8OoExYzQDWYAw1wyc+QFiYg5qcwPpO7Ne6JvZo0YEh2UbYYgPoPKchoW3
IQDDzE3nqgQ435YZPQ5Mud8AtJ0nadAzdNmnHoiACCsDDEA3IOGVXA50qWuxpLSj
RZK9CD/Y8TLI2PEOEfD0XQ4SyI2mkmGo0OWgasalqRxp3w3b/0taiwKCSryr5D/1
LfmCX53fHcOGxGvLVuZ5jXEy8eO2XUWYHnTkXE253gVhFWKgEmEg3i5qHmKD1FBI
7X00I+FNB5GhleRILa8Hyt6qYA2RaqZGqtDQ3vaKTJpn6+f63adbp9yGD0icYIHf
=qX0I
-----END PGP SIGNATURE-----
--==-=-=--