Hello lists,

I rewrote GNU m4 in Python. Long story short, I wanted to learn m4 to
fix some issues I had with GNU Guile and Autotools, and after
realizing m4 1.4 is ~8000 lines of code and reading e.g.
<https://www.owlfolio.org/development/autoconf-swot/> which claims
"Feature gaps in GNU M4 hold back development of Autoconf." I thought
I'd rewrite it in Rust. (It turned out to be more beneficial to
rewrite in Python due to faster prototyping for the time being.)
Eventually I plan to get back to my original purpose of fixing the
integration of GNU Guile and Autotools.

You can find the project home page here,
<https://codeberg.org/annoyingusername/m4p> and you can install with
pip via `pip install m4p`.

I'm hoping that this is a welcome addition. I'm interested to hear if
m4p works as a GNU m4 replacement for you, and any issues that arise.

I have not yet implemented:

1. traceon, traceoff, changeword, debugmode, debugfile, dumpdef
2. Some of the command-line options.

I'm worried about:

1. What mode GNU m4 opens files in; m4p always open in binary,
potentially treating carriage return differently on Windows.
2. Sneaky bugs.

The functions that I have not yet implemented are debug functions, so
they probably will not affect production m4 macros. The changeword
macro might be removed in future versions of GNU m4 and I might not
implement it at all, not sure if anyone uses it. I have not had any
benchmarks, but from roughly looking at
how long tests take I'm measuring a 100x slowdown. I'm hoping to
rewrite it in Rust later to address that.

Regards,
Nikolaos Chatzikonstantinou

Reply via email to