We are happy to announce the release of GNU Mes 0.28.
Mes 0.28 is a big change. It represents hundreds of commits during around a year and a half happening in parallel with the main release cycle, but that have been reduced and cleaned up to 58 commits since 0.27.2. This release reimplements the core of the Scheme interpreter moving from a Tree-Walk interpreter to a Bytecode compiler and interpreter, and implements the Macro Expansion directly in Scheme, achieving a substantial performance increase. It also includes a few cleanups and bugfixes. See the NEWS below for a brief summary. We are most grateful for NLnet sponsoring this work. Thanks to everyone who has contributed! The following people contributed changes to this release: Ekaitz Zarraga (34) Janneke Nieuwenhuizen (4) Timothy Sample (20) What's next? Speeding up the build system using a unity build. Adding support for for bignums. Integrating Popsyntax, a fully-hygienic macro expander. Also, lots of performance improvements. Enjoy! Ekaitz [on behalf of the mes maintainers] ABOUT GNU Mes is a Scheme interpreter and C compiler for bootstrapping the GNU System. It has helped to decimate the number and size of binary seeds that were used in the bootstrap of GNU Guix 1.0. Recently, version 0.24.2 has realized the first Full Source Bootstrap for Guix <https://guix.gnu.org/en/blog/2023/the-full-source-bootstrap-building-from-source-all-the-way-down/>. The final goal is to help create a full source bootstrap as part of the bootstrappable builds effort <https://bootstrappable.org> for any UNIX-like operating system. Mes + MesCC + Mes C Library can build a bootstrappable TinyCC <https://gitlab.com/janneke/tinycc> that is self-hosting. Using this bootstrappable-tcc and the Mes C library we can build gcc-4.6. This is enough to bootstrap Guix for i686-linux, x86_64-linux, armhf-linux, aarch64-linux, and riscv64-linux. Mes was inspired by The Maxwell Equations of Software: LISP-1.5 -- John McCarthy page 13, Guix's source/binary packaging transparency and Jeremiah Orians's Stage0 <https://github.com/oriansj/stage0>, a ~300-byte self-hosting hex assembler. ================================================================== Here is the GNU mes home page: https://gnu.org/s/mes/ Here are the compressed sources and a GPG detached signature: https://ftp.gnu.org/gnu/mes/mes-0.28.tar.gz https://ftp.gnu.org/gnu/mes/mes-0.28.tar.gz.sig Use a mirror for higher download bandwidth: https://ftpmirror.gnu.org/mes/mes-0.28.tar.gz https://ftpmirror.gnu.org/mes/mes-0.28.tar.gz.sig Here are the SHA1 and SHA256 checksums: File: mes-0.28.tar.gz SHA1 sum: 6f50d1008c1491ab51be758c32b420928b533687SHA256 sum: 22d92e0b76d413dacd2eaa6db864093926f111389aa515a447555d4a2ff07842
Use a .sig file to verify that the corresponding file (without the
.sig suffix) is intact. First, be sure to download both the .sig file
and the corresponding tarball. Then, run a command like this:
gpg --verify mes-0.28.tar.gz.sig
The signature should match the fingerprint of the following key:
pub rsa4096 2024-11-09 [SC]
5DBE 23D3 9053 6526 7F8C C76A FDB9 52BD 3F73 56D6
uid Ekaitz Zarraga <[email protected]>
0A92 A1B1 D60B A6CD 2101 9072 B900 C031 4670 10E0
If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.
gpg --recv-keys 5DBE23D3905365267F8CC76AFDB952BD3F7356D6
As a last resort to find the key, you can try the official GNU
keyring:
wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg
gpg --keyring gnu-keyring.gpg --verify mes-0.28.tar.gz.sig
This release is based on the mes git repository, available as
git clone https://git.savannah.gnu.org/git/mes.git
with commit c54282e9c7102e88374031d97ae7d448ce31603b tagged as v0.28.
For a summary of changes and contributors, see:
https://git.sv.gnu.org/gitweb/?p=mes.git;a=shortlog;h=v0.28
or run this command from a git-cloned mes directory:
git shortlog v0.27.2..v0.28
Alternatively, Mes can be installed using GNU Guix:
guix pull
guix install mes
NEWS
* Changes in 0.28 since 0.27.2
** Core
*** Evaluator is replaced by a compiler and a bytecode virtual machine.
*** Macro expander is written in Scheme.
*** Stack and Heap are now allocated separately.
*** Structs and Vectors are now Bytes with raw pointers to their elements.
*** Builtins are now indices to a static table.
*** initial-module is now a module instead of just an obarray.
*** Variables are now basic types and not records.
*** Builtins now fail throwing exceptions instead of halting the execution.
*** Overall, the interpreter performance has been improved by a 40%
(execution
time). ** Mes *** REPL accepts multiple return values. *** Module eval-closure is removed. *** current-environment is removed. *** 4 new functions are added: bytevector-fill!, procedure-name, procedure-arguments, procedure-disassemble ** MesCC *** Memory used in global uninitialized arrays is vastly reduced. ** Noteworthy bug fixes *** close-port now returns a value: *unspecified*. See also <https://bootstrappable.org>. Join [email protected] and #mes on irc.libera.chat for discussions.
OpenPGP_0xFDB952BD3F7356D6.asc
Description: OpenPGP public key
OpenPGP_signature.asc
Description: OpenPGP digital signature
