GNU Mes 0.28 released
Ekaitz Zarraga
ekaitz at elenq.tech
Thu Oct 29 21:31:57 UTC 2026
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: 6f50d1008c1491ab51be758c32b420928b533687
SHA256 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 <ekaitz at elenq.tech>
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 bug-mes at gnu.org and #mes on irc.libera.chat for discussions.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0xFDB952BD3F7356D6.asc
Type: application/pgp-keys
Size: 4723 bytes
Desc: OpenPGP public key
URL: <http://lists.reproducible-builds.org/pipermail/rb-general/attachments/20261029/89ca4f21/attachment.key>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 870 bytes
Desc: OpenPGP digital signature
URL: <http://lists.reproducible-builds.org/pipermail/rb-general/attachments/20261029/89ca4f21/attachment.sig>
More information about the rb-general
mailing list