mrkeyoor.com_
Fri 06 Nov 06:54 UTC
Open Source3 min read

GNU Mes 0.28 replaces its evaluator with a bytecode engine

Maintainer benchmarks show faster self-compilation but slower small builds. Mes 0.28 changes an early tool in the GNU source-bootstrap chain.

GNU Mes 0.28 replaces its evaluator with a compiler and bytecode virtual machine, changing how an early tool in the GNU source-bootstrap chain runs Scheme code. The version-specific changelog identifies the rewrite as a 0.28 change. GNU's download archive lists the release tarball with an October 29, 2026 timestamp.

The performance tradeoff is visible in co-maintainer Ekaitz Zarraga's release report: compiling Mes itself takes less time, while compiling a small hello-world program takes longer. We haven't reproduced these benchmarks.

Why this interpreter sits in the build chain

GNU describes Mes as a Scheme interpreter and C compiler for bootstrapping the GNU System. Its interpreter is written in C, while MesCC, its C compiler, is written in Scheme. The two can build one another. Mes and its C library can then build a bootstrappable TinyCC, which provides a route to building GCC.

That role gives interpreter speed a practical consequence: Scheme execution is part of constructing the compiler toolchain. For developers studying how to rebuild a system from source with fewer prebuilt binary dependencies, the project's bootstrap path explains where Mes fits.

The 0.28 change notes also put the macro expander in Scheme and add multiple-return-value support to the interactive REPL. Those are documented release changes, rather than capabilities inferred from a current README.

Longer runs recover the compilation cost

Zarraga compares 0.28 with 0.27.2 on a 2020 Tuxedo laptop. His wall-time results, in seconds, show the difference:

amd64 workload Mes 0.27.2 Mes 0.28
Fibonacci benchmark 21.39 8.66
Compile hello world with MesCC 1.38 2.92
Compile Mes with MesCC 103.39 60.93

The report attributes the small-build slowdown to the need to compile all of MesCC to bytecode. The self-compilation comparison also has a caveat: Mes grew by about 200 lines between versions, Zarraga notes. The inputs aren't identical.

A separate speed fix belongs to the preceding release. The changelog places the correction for compiling each file twice under 0.27.2. It shouldn't be counted as another improvement introduced by 0.28.

Bootstrap limitations remain

The MesCC-built RISC-V bootstrap version lacks working exception handling. Zarraga attributes this reported limitation to faulty setjmp and longjmp support in the Mes C library. We haven't tested it.

Watch for fixes to the reported RISC-V exception-handling problem and complete-build measurements that show how much the interpreter gains shorten the bootstrap process.

Sources

  1. GNU Mes and the 0.28 release
  2. GNU Mes NEWS: changes in 0.28 and 0.27.2
  3. GNU Mes project overview
  4. GNU Mes release archive