mirror of
https://github.com/fosslinux/live-bootstrap.git
synced 2026-03-17 08:45:23 +01:00
Add mes and mescc-tools-extra
mescc-tools-extra contains two important tools: - cp - chmod mes first builds itself from a mes 0.21 seed as used by guix, and then builds a mes 0.22 and then mes 0.22 using that created mes 0.22. It does /not/ use bootstrap.sh as we don't have a proper shell at this point, it has been manually adapted for kaem.
This commit is contained in:
parent
2706e07556
commit
649d7b68dc
1029 changed files with 120985 additions and 18 deletions
45
sysa/mes-0.22/doc/announce/ANNOUNCE
Normal file
45
sysa/mes-0.22/doc/announce/ANNOUNCE
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
Subject: on bootstrapping: introducing Mes
|
||||
Date: Sun, 19 Jun 2016 13:08:02 +0200
|
||||
|
||||
Hi,
|
||||
|
||||
I have a minimal LISP-1.5-resembling interpreter in C that now can
|
||||
also interpret itself
|
||||
|
||||
https://gitlab.com/janneke/mes
|
||||
|
||||
It was inspired by the seemingly often ignored bootstrapping question
|
||||
made so painfully visible by GuixSD and by OriansJ with their self
|
||||
hosting hex assembler project.
|
||||
|
||||
As a next step after a hex assembler I was thinking of getting Scheme up
|
||||
and running and use that to create a tiny C compiler, probably using
|
||||
PEG. For that I think we need define-syntax, which I had a peek at and
|
||||
still scares the all-sorts-of-things out of me :-)
|
||||
|
||||
I searched for minimal Lisp/Scheme to get that going and found an
|
||||
article called the Maxwell Equations of Software 1) with a pointer to
|
||||
the 1962 LISP 1.5 paper by John McCarthy 2).
|
||||
|
||||
First I `implemented' Mes/LISP-1.5: the bottom half of page 13 and the
|
||||
necessary helper procedures defined on pages 8-12 using Guile, removing
|
||||
all but the primitives needed to run LISP-1.5/Mes (I think): car, cdr,
|
||||
cond, cons, define, eq?, '()/nil, null?, pair? and quote. I cheated
|
||||
with read, and with display and newline for debugging.
|
||||
|
||||
Then I translated the program into C and got rid of read by using
|
||||
getchar/ungetchar.
|
||||
|
||||
It's been great fun and now I'm kind of stuck a bit at the point of
|
||||
implementing macros. I have a simplistic version in C but want to
|
||||
remove that again --I like the idea of having the absolute minimal LISP
|
||||
interpreter in C-- and only introduce macros after having bootstrapped
|
||||
into the LISP/Mes domain.
|
||||
|
||||
Greetings,
|
||||
Jan
|
||||
|
||||
1) http://www.michaelnielsen.org/ddi/lisp-as-the-maxwells-equations-of-software/
|
||||
2)
|
||||
http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
|
||||
96
sysa/mes-0.22/doc/announce/ANNOUNCE-0.10
Normal file
96
sysa/mes-0.22/doc/announce/ANNOUNCE-0.10
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
Subject: Mes 0.10 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.10, representing 82
|
||||
commits over 6 weeks. Mescc now compiles a bootstrappable-modified
|
||||
TinyCC into a mes-tcc that in turn can successfully compile a trivial
|
||||
C program.
|
||||
|
||||
* About
|
||||
|
||||
Mes[0] aims to create full source bootstrapping for GuixSD[1] as
|
||||
part of the bootstrappable builds[2] project.
|
||||
|
||||
It currently consists of a mutual self-hosting [close to Guile-]
|
||||
Scheme interpreter prototype in C and a Nyacc-based C compiler in
|
||||
[Guile] Scheme. This C prototype will be rewritten in stage0[3]
|
||||
M1 assembly (or possibly stage2 slow-LISP, or ...).
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[4], Pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
(mescc.mes).
|
||||
|
||||
The simple C compiler can compile a modified TinyCC[8] that is
|
||||
starting to work! A gcc-compiled tcc is known[9] to compile GCC.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10]
|
||||
-- John McCarthy page 13, GNU Guix's source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0 ~300 byte self-hosting
|
||||
hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.10 -O mes-0.10.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.10 since 0.9
|
||||
** Core
|
||||
*** 2 new functions
|
||||
logand, lognot.
|
||||
** Mescc
|
||||
*** Mes now includes M1 sources for full source bootstrapping up to tcc.
|
||||
*** Mescc now depends on Nyacc 0.81.0.
|
||||
*** Mescc now compiles a mes-tcc that compiles a trivial C to a running a.out.
|
||||
*** Mescc now supports several (as used my tinycc) struct by value assignments.
|
||||
*** Mescc now has _start in a separate crt1.c.
|
||||
*** Mescc now supports initializer arithmetic.
|
||||
*** Mescc now supports arrays of struct of arbitrary size.
|
||||
*** Mescc now supports pointer arithmetic.
|
||||
*** Mescc now defines __i386__, __linux__.
|
||||
*** Mescc now supports --*p, ++*p.
|
||||
*** Mescc now supports int foo[bar] = {baz,...}.
|
||||
*** Mescc now supports \x00 in strings in M1.
|
||||
*** Mescc now supports complex enum expressions. Thanks, rain1!
|
||||
*** Mescc now supports short.
|
||||
*** Mescc now supports foo.bar = foo.baz = bla.
|
||||
*** Mescc now supports foo = bar < baz and comparison permutations.
|
||||
*** Mescc now supports (anonymous) structs in unions.
|
||||
*** Mescc now writes M1 strings if possible.
|
||||
**** 2 improved mlibc functions
|
||||
malloc, realloc.
|
||||
**** 13 new mlibc functions
|
||||
fclose, fgetc, fprintf, fwrite, memcpy, memmove, memset, snprintf, strcat,
|
||||
strchr, strrchr, strtoull, vnsprintf.
|
||||
**** 15 new tinycc-support tests
|
||||
76-pointer-arithmetic.c, 77-pointer-assign.c, 78-union-struct.c,
|
||||
79-int-array.c, 7a-struct-char-array.c, 7b-struct-int-array.c,
|
||||
7c-dynarray.c, 7d-cast-char.c, 7e-struct-array-access.c,
|
||||
7f-struct-pointer-arithmetic.c, 7g-struct-byte-word-field.c,
|
||||
7h-struct-assign.c, 7i-struct-struct.c, 7j-strtoull.c,
|
||||
7k-for-each-elem.c.
|
||||
** Noteworthy bug fixes
|
||||
*** Mescc has many fixes for foo.bar[baz], foo[bar].baz with ./-> permutations.
|
||||
*** Many bugs and limitations in mescc have been fixed and removed.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://gitlab.com/janneke/mes
|
||||
[1] https://www.gnu.org/software/guix
|
||||
[2] http://bootstrappable.org
|
||||
[3] https://github.com/oriansj/stage0
|
||||
[4] https://github.com/schemeway/lalr-scm
|
||||
[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[6] https://www.nongnu.org/nyacc/
|
||||
[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[8] https://gitlab.com/janneke/tinycc
|
||||
[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
70
sysa/mes-0.22/doc/announce/ANNOUNCE-0.11
Normal file
70
sysa/mes-0.22/doc/announce/ANNOUNCE-0.11
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
Subject: Mes 0.11 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.11, representing 16
|
||||
commits over 10 weeks. MesCC now compiles a less heavily patched
|
||||
TinyCC into a mes-tcc that in turn passes 41/69 of mescc's C tests.
|
||||
|
||||
When mes-tcc passes all 69 tests, this almost-full-source-bootstrapped
|
||||
version of TinyCC should be able to compile itself. An unpatched, GNU
|
||||
Gcc-compiled tcc is known to compile GNU Gcc.
|
||||
|
||||
* About
|
||||
|
||||
Mes[0] aims to create full source bootstrapping for GuixSD[1] as
|
||||
part of the bootstrappable builds[2] project.
|
||||
|
||||
It currently consists of a mutual self-hosting [close to Guile-]
|
||||
Scheme interpreter prototype in C and a Nyacc-based C compiler in
|
||||
[Guile] Scheme. This C prototype will be rewritten in stage0[3]
|
||||
M1 assembly (or compiled by M2-Planet or stage2 slow-LISP, or ...).
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[4], Pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
MesCC (mescc.mes).
|
||||
|
||||
MesCC can compile a modified TinyCC[8] that is close to being
|
||||
self-hosting. A GNU Gcc-compiled tcc is known[9] to compile GCC.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10]
|
||||
-- John McCarthy page 13, GNU Guix's source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0 ~300 byte self-hosting
|
||||
hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.11 -O mes-0.11.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.11 since 0.10
|
||||
** MesCC
|
||||
*** MesCC now compiles a mes-tcc that passes 41/69 of mescc's C tests.
|
||||
*** MesCC's libc can now be compiled with tcc (syscall support: write).
|
||||
*** MesCC now compiles a less-patched tcc: -214/+458 lines [WAS: -333/+747].
|
||||
*** MesCC now supports empty for.
|
||||
*** MesCC has been greatly refactored, 500/3000 lines have been removed.
|
||||
*** MesCC now supports complex [struct] by value assign foo.bar, foo->bar, foo[bar].
|
||||
*** MesCC now depends on Nyacc 0.82.4.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://gitlab.com/janneke/mes
|
||||
[1] https://www.gnu.org/software/guix
|
||||
[2] http://bootstrappable.org
|
||||
[3] https://github.com/oriansj/stage0
|
||||
[4] https://github.com/schemeway/lalr-scm
|
||||
[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[6] https://www.nongnu.org/nyacc/
|
||||
[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[8] https://gitlab.com/janneke/tinycc
|
||||
[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
97
sysa/mes-0.22/doc/announce/ANNOUNCE-0.12
Normal file
97
sysa/mes-0.22/doc/announce/ANNOUNCE-0.12
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
Subject: Mes 0.12 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.12, representing 120
|
||||
commits over 20 weeks. MesCC is prototyped running on Guile and can
|
||||
now run on Mes. Performance of Mes running MesCC has been improved by
|
||||
a factor of 100; mes.c (~3000 LOC) now compiles in ~4min. Many fixes
|
||||
and enhancements make that now also TinyCC parses (~1.5h) and compiles
|
||||
(~20min) with Mes+MesCC (Guile+MesCC takes ~2min).
|
||||
|
||||
Special thanks go to Ricardo Wurmus for sharing the recursive macro
|
||||
expand perspective and starting work on that, to Han-Wen Nienhuys for
|
||||
his sharp `Ah, so you skipped SICP chapter 3' remark and to rain1 for
|
||||
their continuous help on #bootstrapping and their `let's only expand
|
||||
global variables' insight.
|
||||
|
||||
* About
|
||||
|
||||
Mes[0] aims to create full source bootstrapping for GuixSD[1] as
|
||||
part of the bootstrappable builds[2] project.
|
||||
|
||||
It currently consists of a mutual self-hosting [close to Guile-]
|
||||
Scheme interpreter prototype in C and a Nyacc-based C compiler in
|
||||
[Guile] Scheme. This C prototype will be simplified to be
|
||||
transpiled by M2-Planet[3].
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[4], pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
MesCC (mescc.mes).
|
||||
|
||||
MesCC can compile a modified TinyCC[8] that is close to being
|
||||
self-hosting. A GNU Gcc-compiled tcc is known[9] to compile GCC.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10]
|
||||
-- John McCarthy page 13, GNU Guix's source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0[11] ~300 byte self-hosting
|
||||
hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.12 -O mes-0.12.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.12 since 0.11
|
||||
** Core
|
||||
*** Mes can now run Nyacc (0.80.42) to compile itself in ~4min (~3000 LOC).
|
||||
*** Mes now recursively expands global variables per top level statement.
|
||||
*** Mes now recursively expands macros per top level statement.
|
||||
*** Mes now boots from MES_BOOT (default: module/mes/boot-0.scm).
|
||||
*** Mes now has a full Scheme reader in C again.
|
||||
This gives a 10x-20x performance improvement and increases the
|
||||
bootstrap footprint by 160 LOC.
|
||||
*** Mes reader now supports older abbreviated character forms
|
||||
#\bel, #\bs, #\ht and #\vt.
|
||||
*** 3 new functions
|
||||
equal2?, memq, core:write.
|
||||
** Language
|
||||
*** Mes now has an incremental Scheme semantics test suite with 71 small tests.
|
||||
*** Variable names can now have ticks.
|
||||
*** Mes now evaluates expresions of COND only once.
|
||||
*** srfi-9 records have been reimplemented.
|
||||
*** #\page is now whitespace.
|
||||
*** #<eof> is no longer a character.
|
||||
*** 2 new macros
|
||||
define-macro*, with-fluids.
|
||||
*** 9 new functions
|
||||
dirname, last, reverse-list->string, setenv, string-drop-right,
|
||||
string-fold, string-fold-right, string-null?, write.
|
||||
** MesCC
|
||||
**** 9 new functions
|
||||
chmod, getopt_long, ferror, itoab, longjmp, qsort, setenv, setjmp, strtol.
|
||||
**** 2 new header files
|
||||
endian.h, sys/signal.h.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://gitlab.com/janneke/mes
|
||||
[1] https://www.gnu.org/software/guix
|
||||
[2] http://bootstrappable.org
|
||||
[3] https://github.com/oriansj/m2-planet
|
||||
[4] https://github.com/schemeway/lalr-scm
|
||||
[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[6] https://www.nongnu.org/nyacc/
|
||||
[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[8] https://gitlab.com/janneke/tinycc
|
||||
[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[11] https://github.com/oriansj/stage0
|
||||
81
sysa/mes-0.22/doc/announce/ANNOUNCE-0.13
Normal file
81
sysa/mes-0.22/doc/announce/ANNOUNCE-0.13
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
Subject: Mes 0.13 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.13, representing 45
|
||||
commits over 3 weeks. MesCC can now compile a functional tcc when
|
||||
running on Mes (in ~1h45') or on Guile (in ~3min).
|
||||
|
||||
This means that we are getting very close to a full source bootstrap
|
||||
of tcc: it is now built without gcc, glibc or guile; using only
|
||||
MesCC-tools and Mes sources and corresponding ascii/binary seeds.
|
||||
|
||||
* About
|
||||
|
||||
Mes[0] aims to help create full source bootstrapping for GuixSD[1]
|
||||
as part of the bootstrappable builds[2] project.
|
||||
|
||||
It currently consists of a mutual self-hosting Scheme interpreter
|
||||
prototype in C and a Nyacc-based C compiler in Scheme. This C
|
||||
prototype is being simplified to be transpiled by M2-Planet[3].
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[4], pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
MesCC.
|
||||
|
||||
Mes+MesCC can compile a modified TinyCC[8] that is close to being
|
||||
self-hosting. A GNU Gcc-compiled tcc is known[9] to compile GCC.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10]
|
||||
-- John McCarthy page 13, GNU Guix's source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0[11] ~300 byte self-hosting
|
||||
hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/-/archive/v0.13/mes-0.13.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.13 since 0.12
|
||||
** Core
|
||||
*** Bootstrapped Mes+MesCC can now compile a patched tcc in ~2h30' (~25,000 LOC).
|
||||
*** MesCC scripts for Mes and Guile are now merged; executable is: `mescc'.
|
||||
*** Mes now uses only one arena for stop-and-copy; doubles available size.
|
||||
*** Mes now has a Guile-like command-line interface (mes.repl has been removed).
|
||||
*** Mes now boots into a full Scheme by default.
|
||||
*** Mes can now be compiled (MES_MINI=1) to boot into a minimal Scheme (~2000 cells).
|
||||
*** Mes now creates less garbage in the reader and in
|
||||
append2, append_reverse, reverse, reverse!, vector-for-each, vector-to-list, vector-map.
|
||||
*** 5 new functions
|
||||
append-reverse, chmod, ioctl, isatty, isspace, last_pair, reverse!.
|
||||
** Language
|
||||
*** 3 new functions
|
||||
char-whitespace?, chmod, isatty?
|
||||
** Noteworthy bug fixes
|
||||
*** Two bugs in the jam scraper/garbage collector have been fixed.
|
||||
*** equal2_p now uses tail call elimination.
|
||||
*** Escaped characters in strings are now read and write'd correctly.
|
||||
*** The repl now expands macros again.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://gitlab.com/janneke/mes
|
||||
[1] https://www.gnu.org/software/guix
|
||||
[2] http://bootstrappable.org
|
||||
[3] https://github.com/oriansj/m2-planet
|
||||
[4] https://github.com/schemeway/lalr-scm
|
||||
[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[6] https://www.nongnu.org/nyacc/
|
||||
[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[8] https://gitlab.com/janneke/tinycc
|
||||
[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[11] https://github.com/oriansj/stage0
|
||||
101
sysa/mes-0.22/doc/announce/ANNOUNCE-0.14
Normal file
101
sysa/mes-0.22/doc/announce/ANNOUNCE-0.14
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
Subject: Mes 0.14 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.14, representing 98
|
||||
commits over 4 weeks. Mes+MesCC now compiles a self-hosting TinyCC
|
||||
that has only been slightly patched.
|
||||
|
||||
This means that we can now build a tcc that depends only on a 1MB
|
||||
ASCII M1 seed. GuixSD currently uses a ~250MB binary seed to build
|
||||
gcc.
|
||||
|
||||
Next targets are: build gcc using this almost full-source bootstrapped
|
||||
tcc, and reduce the 1MB ASCII M1 seed to ~100KB of M2 source, which is
|
||||
a restricted subset of C.
|
||||
|
||||
Packages are available from Guix's wip-bootstrap branch.
|
||||
|
||||
* About
|
||||
|
||||
Mes[0] aims to help create full source bootstrapping for GuixSD[1]
|
||||
as part of the bootstrappable builds[2] project.
|
||||
|
||||
It currently consists of a mutual self-hosting Scheme interpreter
|
||||
prototype in C and a Nyacc-based C compiler in Scheme. This C
|
||||
prototype is being simplified to be transpiled by M2-Planet[3].
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[4], pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
MesCC.
|
||||
|
||||
Mes+MesCC can compile an only slightly patched TinyCC[8] that is
|
||||
self-hosting. A GNU Gcc-compiled tcc is known[9] to compile GCC.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10]
|
||||
-- John McCarthy page 13, GNU Guix's source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0[11] ~300 byte self-hosting
|
||||
hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/-/archive/v0.14/mes-0.14.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.14 since 0.13
|
||||
** Core
|
||||
*** Bootstrapped Mes+MesCC now compiles a tcc that is self-hosting and only slightly patched.
|
||||
*** The reader now supports binary numbers (previously: read as decimal).
|
||||
*** String port support has been moved to C.
|
||||
*** The build has been simplified, the Make-in-Scheme experiment has been removed.
|
||||
*** 2 new functions
|
||||
chmod, logxor.
|
||||
** Language
|
||||
*** Mes now supports define-immutable-record-type and single set-field from srfi-9 gnu.
|
||||
*** 12 new functions
|
||||
basename, chmod, const, delete-duplicates, logxor, string-contains,
|
||||
string-map, string-replace, string-trim, string-trim-both,
|
||||
string-trim-right, unfold.
|
||||
** MesCC
|
||||
*** MesCC now supports standalone usage of nestedly defined enums, structs and unions.
|
||||
*** MesCC now supports comparison of unsigned and promotion of signed/unsigned -> unsigned.
|
||||
*** MesCC now supports sign extension for char, short.
|
||||
*** MesCC now has stubbing for floats; compiling works, data is fu.
|
||||
*** MesCC now has full suport for switch case, e.g. with default as first clause.
|
||||
*** MesCC now supports destruction of casted expressions: ((struct foo*)p)->bar.
|
||||
*** MesCC now has full support for pre/post, e.g.: (foo--)->bar and permutations.
|
||||
*** MesCC now supports sizeof any expression or type.
|
||||
*** MesCC now supports initialization of anonymous unions.
|
||||
*** MesCC now supports bit fields.
|
||||
*** MesCC now supports valued functions in expressions: destruction and dereferencing.
|
||||
*** MesCC now supports function-static variables.
|
||||
*** MesCC now supports initializer lists in structs and unions.
|
||||
*** MesCC now has full support for heterogeneous variable declarations, e.g.: char p, *x = "foo", buf[3];
|
||||
**** 4 new functions
|
||||
__lshrdi3, __ashldi3, __ashrdi3, strncpy.
|
||||
**** 9 new mlibc stubs
|
||||
__fixdfdi, __fixsfdi, __fixunsxfdi, __fixxfdi, __floatundixf, ldexp,
|
||||
strtod, strtof, strtold.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://gitlab.com/janneke/mes
|
||||
[1] https://www.gnu.org/software/guix
|
||||
[2] http://bootstrappable.org
|
||||
[3] https://github.com/oriansj/m2-planet
|
||||
[4] https://github.com/schemeway/lalr-scm
|
||||
[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[6] https://www.nongnu.org/nyacc/
|
||||
[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[8] https://gitlab.com/janneke/tinycc
|
||||
[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[11] https://github.com/oriansj/stage0
|
||||
106
sysa/mes-0.22/doc/announce/ANNOUNCE-0.15
Normal file
106
sysa/mes-0.22/doc/announce/ANNOUNCE-0.15
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
Subject: Mes 0.15 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.15, representing 45
|
||||
commits over 3 weeks. The GNU toolchain is getting bootstrapped!
|
||||
|
||||
As of 0.14, Mes+MesCC compiles a self-hosting TinyCC. Using the 0.15
|
||||
Mes C library, this TinyCC can build the GNU tools triplet:
|
||||
binutils-2.14, gcc-2.95.3, glibc-2.2.5.
|
||||
|
||||
This means that we can build a GNU toolchain that depends only on a
|
||||
critical 1MB ASCII M1 seed. GuixSD currently uses a ~250MB binary
|
||||
seed to build gcc.
|
||||
|
||||
Next targets are: upstream the Mes bootstrap to GuixSD, build a
|
||||
Gcc-4.7 and Glibc-2.23, bootstrap utilities like bison, flex, grep,
|
||||
sed..., replace GuixSD's bootstrap for x86 and reduce the 1MB ASCII M1
|
||||
seed to ~5000 LOC/~100KB of M2 source, which is a restricted subset of
|
||||
C.
|
||||
|
||||
Packages are available from Guix's wip-bootstrap branch.
|
||||
|
||||
* About
|
||||
|
||||
Mes[0] aims to help create full source bootstrapping for GuixSD[1]
|
||||
as part of the bootstrappable builds[2] project.
|
||||
|
||||
It currently consists of a mutual self-hosting Scheme interpreter
|
||||
prototype in C and a Nyacc-based C compiler in Scheme. This C
|
||||
prototype is being simplified to be transpiled by M2-Planet[3].
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[4], pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
MesCC.
|
||||
|
||||
Mes+MesCC can compile an only slightly patched TinyCC[8] that is
|
||||
self-hosting. Using the Mes C library, this tcc can now build the
|
||||
GNU tools triplet: binutils-2.14, gcc-2.95.3, glibc-2.2.5.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[9]
|
||||
-- John McCarthy page 13, GNU Guix's source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0[10] ~300 byte self-hosting
|
||||
hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/-/archive/v0.15/mes-0.15.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.15 since 0.14
|
||||
** Core
|
||||
*** Support fork, exec, waitpid.
|
||||
*** Boot-0 loading has been refactored.
|
||||
*** MesCC now has out of the box Geiser support.
|
||||
** Language
|
||||
*** 2 new functions
|
||||
drop, drop-right.
|
||||
** MesCC
|
||||
*** MesCC and Mes Lib C can now build binutils-2.30, gcc-2.95.3 and glibc-2.2.5.
|
||||
*** MesCC now provides dummy crti.o, crtn.o so that tcc needs not be patched for those.
|
||||
*** Mes Lib C now supports compiling glibc-2.2.25.
|
||||
*** Mes Lib C now supports compiling gcc-2.95.3
|
||||
*** Mes Lib C now supports compiling binutils-2.30.
|
||||
*** Mes Lib C now supports compiling m4-1.4.
|
||||
*** Mes Lib C has been split into archs: gcc, x86-mes-gcc and x86-mes.
|
||||
*** MesCC now has a posixy command line interface.
|
||||
**** 70 new functions
|
||||
abs, access, alarm, alloca, atexit, atol, bcmp, bcopy, brk, bzero,
|
||||
chmod, clearerr, close, dup, dup2, execve, fabs, fcntl, fdgets, feof,
|
||||
fgets, fileno, fork, freopen, fscanf, fstat, fsync, getcwd, getgid,
|
||||
getpid, getrusage, getuid, index, ioctl, isalnum, isalpha, isascii,
|
||||
iscntrl, isprint, ispunct, kill, link, lseek, lstat, mkdir, mktemp,
|
||||
nanosleep, open, perror, pipe, raise, read, rename, rindex, rmdir,
|
||||
sbrk, sbrk, setitimer, signal, sleep, stat, strcspn, strdup, strerror,
|
||||
strncat, strpbrk, strspn, unlink, unsetenv, waitpid.
|
||||
**** 23 new stubs
|
||||
abort, atof, bsearch, bsearch, chown, ctime, fpurge, freadahead,
|
||||
frexp, getpwnam, gmtime, mbstowcs, pclose, popen, rewind, setbuf,
|
||||
sigsetmask, strftime, sys_siglist, system, times, umask, utime.
|
||||
**** 10 new C tests
|
||||
51-strcmp.c, 70-printf.c, 87-sscanf.c, 90-strpbrk.c, 91-fseek.c,
|
||||
92-stat.c, 93-fread-fwrite.c, 94-unsetenv.c, 95-signal.c, 96-strto.c.
|
||||
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://gitlab.com/janneke/mes
|
||||
[1] https://www.gnu.org/software/guix
|
||||
[2] http://bootstrappable.org
|
||||
[3] https://github.com/oriansj/m2-planet
|
||||
[4] https://github.com/schemeway/lalr-scm
|
||||
[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[6] https://www.nongnu.org/nyacc/
|
||||
[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[8] https://gitlab.com/janneke/tinycc
|
||||
[9] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[10] https://github.com/oriansj/stage0
|
||||
100
sysa/mes-0.22/doc/announce/ANNOUNCE-0.16
Normal file
100
sysa/mes-0.22/doc/announce/ANNOUNCE-0.16
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
Subject: Mes 0.16 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.16, representing 27
|
||||
commits over 2 weeks.
|
||||
|
||||
A most annoying ELF header bug was fixed that suddenly had all Mes
|
||||
binaries segfault before entering `_start' on Linux 4.17 and later.
|
||||
|
||||
We now have binutils-2.20.1 and gcc-4.1.0, both compiled with
|
||||
gcc-2.95.3 and glibc-2.2.5.
|
||||
|
||||
This reduced-binary-seed bootstrap still depends on these bootstrap
|
||||
binaries: BOOTSTRAP-GUILE, flex, bash, bzip2, coreutils, diffutils,
|
||||
gawk, grep, gzip, make, sed, tar, on the small binary seeds:
|
||||
tinycc-seed, mescc-seed and on the mes.M1 ASCII seed.
|
||||
|
||||
Next targets:
|
||||
|
||||
- build a Gcc 4.7 and Glibc 2.23
|
||||
- upstream the x86 Mes bootstrap to GuixSD
|
||||
- reduce the 1MB ASCII M1 seed to ~5000 LOC/~100KB of M2 source
|
||||
- revive Gash: a posix shell for Guile to reduce the bootstrap binary
|
||||
dependencies
|
||||
- and/or otherwise reduce the bootstrap binary dependencies
|
||||
|
||||
Packages are available from Guix's wip-bootstrap branch.
|
||||
|
||||
* About
|
||||
|
||||
Mes[0] aims to help create full source bootstrapping for GuixSD[1] as
|
||||
part of the bootstrappable builds[2] effort.
|
||||
|
||||
It currently consists of a mutual self-hosting Scheme interpreter
|
||||
prototype written in C and a Nyacc-based C compiler written in Scheme.
|
||||
This C prototype is being simplified[3] to be transpiled by M2-Planet[4].
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector, a
|
||||
library of loadable Scheme modules-- notably Dominique Boucher's LALR[5],
|
||||
Pre-R6RS portable syntax-case[6] with R7RS ellipsis, Matt Wette's Nyacc[7],
|
||||
Guile's PEG[8] --and test suite just barely enough to support a simple
|
||||
REPL and simple C-compiler: MesCC.
|
||||
|
||||
Mes+MesCC can compile an only lighty patched TinyCC[9] that is
|
||||
self-hosting. Using this tcc and the Mes C library we now have a
|
||||
reduced-binary-seed bootstrap for the gnutools triplet: glibc-2.2.5,
|
||||
binutils-2.20.1, gcc-4.1.0.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] --
|
||||
John McCarthy page 13, GNU Guix's source/binary packaging transparency
|
||||
and Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/-/archive/v0.16/mes-0.16.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Get informed, get involved
|
||||
|
||||
Join #bootstrappable on irc.freenode.net.
|
||||
|
||||
* Changes in 0.16 since 0.15
|
||||
** Core
|
||||
*** Support building with tcc, including Mes Lib C in-line assembly.
|
||||
*** core:execl now supports 1000 arguments.
|
||||
** MesCC
|
||||
*** Mes Lib C now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.1.0.
|
||||
*** MesCC binaries now run on Linux 4.17 too, i.e. survive Linus' new `sane mmap limits.'
|
||||
*** MesCC now runs with mescc-tools 0.5 (no = in long options).
|
||||
**** 3 new C test
|
||||
88-strrchrc, 97-fopen.c, 98-fopen.c.
|
||||
** Noteworthy bug fixes
|
||||
*** strrchr now stops when it reaches start of string.
|
||||
*** fopen now return 0 upon failure. Supports binutils' hack: fd=-2 means `cached'.
|
||||
*** vfprintf, vsprintf now support precision and width on integers strings better.
|
||||
*** fread now produces ungetc'd chars too.
|
||||
*** memcmp now supports comparing 0 bytes, supporting binutils.
|
||||
|
||||
*** The unused ELF header data section, identical to the text section, has been removed.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://gitlab.com/janneke/mes
|
||||
[1] https://www.gnu.org/software/guix
|
||||
[2] http://bootstrappable.org
|
||||
[3] https://github.com/oriansj/mes-m2
|
||||
[4] https://github.com/oriansj/m2-planet
|
||||
[5] https://github.com/schemeway/lalr-scm
|
||||
[6] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[7] https://www.nongnu.org/nyacc
|
||||
[8] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[9] https://gitlab.com/janneke/tinycc
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[11] https://github.com/oriansj/stage0
|
||||
113
sysa/mes-0.22/doc/announce/ANNOUNCE-0.17
Normal file
113
sysa/mes-0.22/doc/announce/ANNOUNCE-0.17
Normal file
|
|
@ -0,0 +1,113 @@
|
|||
Subject: GNU Mes 0.17 released
|
||||
|
||||
<#secure method=pgpmime mode=sign>
|
||||
We are delighted to announce the release of GNU Mes 0.17, representing
|
||||
64 commits over 6 weeks.
|
||||
|
||||
Mes is now an official GNU package and we have bootstrapped gcc-4.7.4
|
||||
for x86-linux with a reduced binary seed (i.e., without regular toolchain).
|
||||
|
||||
Next targets:
|
||||
|
||||
- upstream the x86 Mes bootstrap to GuixSD
|
||||
- create a x86_64 Mes C Lib, see if that is is enough to bootstrap x86_64
|
||||
- reduce the 1MB ASCII M1 seed to ~5000 LOC/~100KB of M2 source
|
||||
- create a plan for Geesh and Gash and use them to reduce the
|
||||
bootstrap binary dependencies
|
||||
- and/or otherwise reduce the bootstrap binary dependencies
|
||||
|
||||
Packages are available from Guix's wip-bootstrap branch.
|
||||
|
||||
* About
|
||||
|
||||
GNU Mes[0] aims to help create full source bootstrapping for GNU/Linux
|
||||
distributions such as GuixSD[1] as part of the bootstrappable builds[2]
|
||||
effort.
|
||||
|
||||
It consists of a mutual self-hosting Scheme interpreter written in
|
||||
~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme.
|
||||
This mes.c is being simplified[3] to be transpiled by M2-Planet[4].
|
||||
|
||||
The Scheme interpreter (mes.c) has a Garbage Collector, a library of
|
||||
loadable Scheme modules-- notably Dominique Boucher's LALR[5],
|
||||
Pre-R6RS portable syntax-case[6] with R7RS ellipsis, Matt Wette's
|
||||
Nyacc[7] --and test suite just barely enough to support a simple REPL
|
||||
and simple C-compiler: MesCC.
|
||||
|
||||
Mes+MesCC can compile an only lightly patched TinyCC[8] that is
|
||||
self-hosting. Using this tcc and the Mes C library we now have a
|
||||
reduced-binary-seed bootstrap for the gnutools triplet: glibc-2.2.5,
|
||||
binutils-2.20.1, gcc-4.7.4.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[9] --
|
||||
John McCarthy page 13, GNU Guix's source/binary packaging transparency
|
||||
and Jeremiah Orians's stage0[10] ~500 byte self-hosting hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone git://git.savannah.gnu.org/mes.git
|
||||
|
||||
Here are the compressed sources and a GPG detached signature[*]:
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.17.tar.gz
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.17.tar.gz.sig
|
||||
|
||||
Use a mirror for higher download bandwidth:
|
||||
https://www.gnu.org/order/ftp.html
|
||||
|
||||
Here are the MD5 and SHA1 checksums:
|
||||
|
||||
93ca82612e203fd667dfbdfb83c06549 mes-0.17.tar.gz
|
||||
d38ec93ab6dc2c92a5c5e96fef7f9295972772c2 mes-0.17.tar.gz
|
||||
|
||||
[*] 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.17.tar.gz.sig
|
||||
|
||||
If that command fails because you don't have the required public key,
|
||||
then run this command to import it:
|
||||
|
||||
gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
|
||||
|
||||
and rerun the 'gpg --verify' command.
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] from a git checkout by running
|
||||
|
||||
guix package -f .guix.scm
|
||||
|
||||
* Get informed, get involved
|
||||
|
||||
Join #bootstrappable on irc.freenode.net.
|
||||
|
||||
* Changes in 0.17 since 0.16.1
|
||||
** Core
|
||||
*** GNU Mes is now an official GNU package.
|
||||
*** MesCC is now installed as a regular Guile package.
|
||||
*** Support --srcdir build.
|
||||
*** Support all standard GNU make targets.
|
||||
** MesCC
|
||||
*** Mes C Lib now bootstraps glibc-2.2.5, binutils-2.20.1, gcc-4.7.4.
|
||||
* Changes in 0.16.1 since 0.16
|
||||
** Core
|
||||
*** Mes now builds out of the box on Debian buster/testing.
|
||||
*** Mes now comes with a generic build recipe: build-aux/setup-mes.sh.
|
||||
*** Mes now comes with INFO documentation.
|
||||
** MesCC
|
||||
*** MesCC now exits if spawning BLOOD_ELF, M1, or HEX2 fails.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://www.gnu.org/software/mes
|
||||
[1] https://www.gnu.org/software/guix
|
||||
[2] http://bootstrappable.org
|
||||
[3] https://github.com/oriansj/mes-m2
|
||||
[4] https://github.com/oriansj/m2-planet
|
||||
[5] https://github.com/schemeway/lalr-scm
|
||||
[6] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[7] https://www.nongnu.org/nyacc
|
||||
[8] https://gitlab.com/janneke/tinycc
|
||||
[9] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[10] https://github.com/oriansj/stage0
|
||||
133
sysa/mes-0.22/doc/announce/ANNOUNCE-0.18
Normal file
133
sysa/mes-0.22/doc/announce/ANNOUNCE-0.18
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
|
||||
Subject: GNU Mes 0.18 released
|
||||
|
||||
<#secure method=pgpmime mode=sign>
|
||||
We are pleased to announce the release of GNU Mes 0.18, representing
|
||||
83 commits over 8 weeks.
|
||||
|
||||
Mes is now bringing a Reduced Binary Seed bootstrap to GuixSD; the
|
||||
size of bootstrap binaries has been halved and no regular toolchain
|
||||
binaries are used as binary seeds (i686-linux and x86_64-linux only).
|
||||
|
||||
MesCC has been refactored to use an abstracted assembly language and
|
||||
can now (cross-)build x86_64 binaries.
|
||||
|
||||
Next targets:
|
||||
|
||||
- reduce the 1MB ASCII M1 seed to ~5000 LOC/~100KB of M2 source
|
||||
- revive Gash/Geesh and use it to decimate the remaining bootstrap
|
||||
binary seeds
|
||||
- and/or otherwise reduce the bootstrap binaries
|
||||
- ARM, the Hurd?
|
||||
|
||||
Packages are available from Guix's core-updates-next branch.
|
||||
|
||||
* About
|
||||
|
||||
GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to GuixSD[2] and
|
||||
potentially to any other interested GNU/Linux distribution, and aims
|
||||
to help create a full source bootstrap as part of the
|
||||
bootstrappable builds[3] effort.
|
||||
|
||||
It consists of a mutual self-hosting Scheme interpreter written in
|
||||
~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme.
|
||||
This mes.c is being simplified[4] to be transpiled by M2-Planet[5].
|
||||
|
||||
The Scheme interpreter (mes.c) has a Garbage Collector, a library of
|
||||
loadable Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS
|
||||
[portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8] --and test
|
||||
suite just barely enough to support a simple REPL and simple
|
||||
C-compiler: MesCC.
|
||||
|
||||
Mes+MesCC can compile an only lightly patched TinyCC[9] that is
|
||||
self-hosting. Using this tcc and the Mes C library we now have a
|
||||
Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5,
|
||||
binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap GuixSD for
|
||||
i686-linux and x86_64-linux.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John
|
||||
McCarthy page 13, GNU Guix's source/binary packaging transparency and
|
||||
Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone git://git.savannah.gnu.org/mes.git
|
||||
|
||||
Here are the compressed sources and a GPG detached signature[*]:
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.18.tar.gz
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.18.tar.gz.sig
|
||||
|
||||
Use a mirror for higher download bandwidth:
|
||||
https://ftpmirror.gnu.org/mes/mes-0.18.tar.gz
|
||||
https://ftpmirror.gnu.org/mes/mes-0.18.tar.gz.sig
|
||||
|
||||
Here are the MD5 and SHA1 checksums:
|
||||
|
||||
f9f901f175fbc8a5a3d90c9c551ccc8c mes-0.18.tar.gz
|
||||
4f7612731a745ebb806548186453d55e0d0bf217 mes-0.18.tar.gz
|
||||
|
||||
[*] 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.18.tar.gz.sig
|
||||
|
||||
If that command fails because you don't have the required public key,
|
||||
then run this command to import it:
|
||||
|
||||
gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
|
||||
|
||||
and rerun the 'gpg --verify' command.
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] from a git checkout by running
|
||||
|
||||
guix package -f .guix.scm
|
||||
|
||||
* Get informed, get involved
|
||||
|
||||
Join #bootstrappable on irc.freenode.net.
|
||||
|
||||
* Changes in 0.18 since 0.17.1
|
||||
** Core
|
||||
*** Mes/MesCC now supports x86_64.
|
||||
*** Mes/MesCC now brings a Reduced Binary Seed bootstrap to GuixSD.
|
||||
** Language
|
||||
*** fold-right now supports 3 lists.
|
||||
** MesCC
|
||||
*** MesCC now supports x86_64 (also as cross build), using -m 64.
|
||||
*** Mes C Library now has better support for bootstrapping gcc-3.0.
|
||||
*** Mes C test suite now has 178 tests; 74 tests were added.
|
||||
*** MesCC has been refactored to support use an abstracted assembly language.
|
||||
*** MesCC now uses Nyacc 0.86.0.
|
||||
** Noteworthy bug fixes
|
||||
*** scaffold/tests/7s-struct-short.c has been fixed.
|
||||
* Changes in 0.17.1 since 0.17
|
||||
** MesCC
|
||||
*** Mes C Library has now been exploded into a separate C file per function.
|
||||
*** Mes C Library now bootstraps glibc-2.16.0, binutils-2.20.1, gcc-4.7.4.
|
||||
*** Mes C Library now supports compiling make-3.82.
|
||||
*** Mes C Library now supports compiling diffutils-2.7.
|
||||
*** Mes C Library now supports x86_64.
|
||||
**** 7 new functions
|
||||
chdir, clock_gettime, closedir, execl, opendir, readdir, time.
|
||||
**** 5 new stubs
|
||||
getlogin, setlocale, setvbuf, sigaddset, sigblock.
|
||||
** Noteworthy bug fixes
|
||||
*** qsort can now handle lists with duplicate entries.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://www.gnu.org/software/mes
|
||||
[1] http://joyofsource.com/reduced-binary-seed-bootstrap.html
|
||||
[2] https://www.gnu.org/software/guix
|
||||
[3] https://bootstrappable.org
|
||||
[4] https://github.com/oriansj/mes-m2
|
||||
[5] https://github.com/oriansj/m2-planet
|
||||
[6] https://github.com/schemeway/lalr-scm
|
||||
[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[8] https://www.nongnu.org/nyacc
|
||||
[9] https://gitlab.com/janneke/tinycc
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[11] https://github.com/oriansj/stage0
|
||||
155
sysa/mes-0.22/doc/announce/ANNOUNCE-0.19
Normal file
155
sysa/mes-0.22/doc/announce/ANNOUNCE-0.19
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
|
||||
Subject: GNU Mes 0.19 released
|
||||
|
||||
<#secure method=pgpmime mode=sign>
|
||||
We are pleased to announce the release of GNU Mes 0.19, representing
|
||||
100 commits over 10 weeks.
|
||||
|
||||
Mes has now brought the Reduced Binary Seed bootstrap to Guix (bootstrap
|
||||
a GNU/Linux system without binary GNU toolchain or equivalent) and work
|
||||
is ongoing to audit and verify this bootstrap path in NixOS.
|
||||
|
||||
This release introduces strings as byte-array, hash-tables and native
|
||||
structs. While that does increase the footprint somewhat, it fixes
|
||||
our performance issue; tinycc is now compiled in ~8min (WAS: ~1h30).
|
||||
|
||||
Next targets:
|
||||
|
||||
- translate mes.c into unsnarfed mes.M2
|
||||
- use Gash to remove bash, coreutils&co, grep, sed, tar from the Guix
|
||||
bootstrap binaries
|
||||
- replace the NixOS bootstrap
|
||||
- use dietlibc, uClibc, ... for bootstrapping GNU (bash, binutils,
|
||||
gcc, tar) and remove Mes C lib+gnu?
|
||||
- bootstrap gcc-3.x or 4.x directly, drop initial gcc-2.95.3 target?
|
||||
- have M1+hex2 create gcc/tcc-usable object files? archives?
|
||||
- Debian?
|
||||
- ARM, the Hurd?
|
||||
|
||||
Packages are available from Guix's core-updates branch.
|
||||
|
||||
* About
|
||||
|
||||
GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to Guix[2] and
|
||||
potentially to any other interested GNU/Linux distribution, and aims
|
||||
to help create a full source bootstrap as part of the
|
||||
bootstrappable builds[3] effort.
|
||||
|
||||
It consists of a mutual self-hosting Scheme interpreter written in
|
||||
~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme.
|
||||
This mes.c is being simplified[4] to be transpiled by M2-Planet[5].
|
||||
|
||||
The Scheme interpreter (mes.c) has a Garbage Collector, a library of
|
||||
loadable Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS
|
||||
[portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8] --and test
|
||||
suite just barely enough to support a simple REPL and simple
|
||||
C-compiler: MesCC.
|
||||
|
||||
Mes+MesCC can compile an only lightly patched TinyCC[9] that is
|
||||
self-hosting. Using this tcc and the Mes C library we now have a
|
||||
Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5,
|
||||
binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for
|
||||
i686-linux and x86_64-linux.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John
|
||||
McCarthy page 13, GNU Guix's source/binary packaging transparency and
|
||||
Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone git://git.savannah.gnu.org/mes.git
|
||||
|
||||
Here are the compressed sources and a GPG detached signature[*]:
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.19.tar.gz
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.19.tar.gz.sig
|
||||
|
||||
Use a mirror for higher download bandwidth:
|
||||
https://ftpmirror.gnu.org/mes/mes-0.19.tar.gz
|
||||
https://ftpmirror.gnu.org/mes/mes-0.19.tar.gz.sig
|
||||
|
||||
Here are the MD5 and SHA1 checksums:
|
||||
|
||||
99e134df87adc5fc5fd2c04941929c23 mes-0.19.tar.gz
|
||||
c9781b3b6a814acc985c2ac68caa111a56583bca mes-0.19.tar.gz
|
||||
|
||||
[*] 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.19.tar.gz.sig
|
||||
|
||||
If that command fails because you don't have the required public key,
|
||||
then run this command to import it:
|
||||
|
||||
gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
|
||||
|
||||
and rerun the 'gpg --verify' command.
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix from a git checkout by running
|
||||
|
||||
guix package -f .guix.scm
|
||||
|
||||
* Get informed, get involved
|
||||
|
||||
See https://bootstrappable.org
|
||||
Join #bootstrappable on irc.freenode.net.
|
||||
|
||||
* Changes in 0.19 since 0.18
|
||||
** Core
|
||||
*** The build system has been simplified.
|
||||
*** Mes now prints a backtrace upon error.
|
||||
*** Performance has been improved 2-8 times, making Mes 2-10 times slower than Guile.
|
||||
*** Mes now supports a module type and uses a `boot-module'.
|
||||
*** Mes now supports a hash_table type.
|
||||
*** Mes now supports a struct type.
|
||||
*** Mes now supports building a %bootstrap-mes seed from Guix.
|
||||
** Language
|
||||
*** Records are now implemented using struct (WAS: vector).
|
||||
*** 44 new functions
|
||||
ceil, char-downcase, char-set-adjoin, char-set-complement,
|
||||
char-upcase, current-time, delete-file, dup, dup2, file-exists?,
|
||||
floor, frame-printer, get-internal-run-time, getcwd, gettimeofday,
|
||||
hash, hash-ref, hash-set!, hash-table-printer, hashq,
|
||||
hashq-get-handle, hashq-ref, hashq-set, inexact->exact,
|
||||
make-hash-table, make-stack, make-struct, module-define!,
|
||||
module-printer, module-ref, module-variable, read-line, round,
|
||||
stack-length, stack-ref, string-downcase, string-tokenize,
|
||||
string-upcase, struct-length, struct-ref, struct-set! struct-vtable,
|
||||
struct-vtable, with-error-to-file.
|
||||
** MesCC
|
||||
*** Assembly defines have been cleaned-up: duplicates deleted, missing added, wrong fixed.
|
||||
*** MesCC now supports compiling GNU Bash and GNU Tar.
|
||||
**** 6 New functions
|
||||
getegid, geteuid, getppid, setgid, setuid, sigdelset, sigprocmask.
|
||||
**** 22 New macros
|
||||
EACCES, ENOSPC, ESPIPE, INT16_MAX, INT16_MIN, INT32_MAX, INT32_MIN,
|
||||
INT64_MAX, INT64_MIN, INT8_MAX, INT8_MIN, LLONG_MAX, LLONG_MIN,
|
||||
SIZE_MAX SYS_getegid, SYS_geteuid, SYS_setgid SYS_setuid, S_IRGRP,
|
||||
S_IROTH, S_IRWXG, S_IRWXO S_ISGID, S_ISUID, S_IWGRP, S_IWOTH, S_IXGRP,
|
||||
S_IXOTH, UINT16_MAX, UINT32_MAX, UINT64_MAX, UINT8_MAX,
|
||||
_POSIX_VERSION.
|
||||
** Noteworthy bug fixes
|
||||
*** Mes now supports characters #\xNN.
|
||||
*** Mes now supports assq-ref and assoc-ref with alist == #f.
|
||||
*** Mes now supports \xNN in strings. This allows using Nyacc-0.86.0.
|
||||
*** MesCC now supports the unary plus operator.
|
||||
*** MesCC now supports the `U' integer suffix.
|
||||
*** MesCC now comes with INTnn_MIN/MAX, UINTnn defines in stdint.h.
|
||||
*** MesCC now always exits non-zero when assembler or linker fail.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://www.gnu.org/software/mes
|
||||
[1] http://joyofsource.com/reduced-binary-seed-bootstrap.html
|
||||
[2] https://www.gnu.org/software/guix
|
||||
[3] https://bootstrappable.org
|
||||
[4] https://github.com/oriansj/mes-m2
|
||||
[5] https://github.com/oriansj/m2-planet
|
||||
[6] https://github.com/schemeway/lalr-scm
|
||||
[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[8] https://www.nongnu.org/nyacc
|
||||
[9] https://gitlab.com/janneke/tinycc
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[11] https://github.com/oriansj/stage0
|
||||
133
sysa/mes-0.22/doc/announce/ANNOUNCE-0.20
Normal file
133
sysa/mes-0.22/doc/announce/ANNOUNCE-0.20
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
|
||||
Subject: GNU Mes 0.20 released
|
||||
|
||||
<#secure method=pgpmime mode=sign>
|
||||
|
||||
We are pleased to announce the release of GNU Mes 0.20, representing
|
||||
147 commits over 38 weeks.
|
||||
|
||||
Mes has now brought the Reduced Binary Seed bootstrap to Guix (bootstrap
|
||||
a GNU/Linux system without binary GNU toolchain or equivalent). It
|
||||
should land in Guix master any day now: a big thank you to everyone who
|
||||
helped, notably Ludovic and Mark.
|
||||
|
||||
This release is a step towards the upcoming Scheme-only bootstrap and
|
||||
bringing Mes into NixOS and Debian. This effort is now sponsored by
|
||||
NLnet[12].
|
||||
|
||||
Next targets:
|
||||
|
||||
- ARM support
|
||||
- Reduced Binary Seed bootstrap for ARM
|
||||
- Scheme-only bootstrap: use Guile and Gash to remove bash,
|
||||
coreutils&co, grep, sed, etc. from the Guix bootstrap binaries
|
||||
- mes-m2: port Mes.c to M2-Planet
|
||||
- Introduce Reduced Binaries Seed bootstrap to NixOS
|
||||
- Debian?
|
||||
- Hurd
|
||||
|
||||
Packages are available in Guix master.
|
||||
|
||||
* About
|
||||
|
||||
GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to GNU Guix[2]
|
||||
and potentially to any other interested GNU/Linux distribution, and
|
||||
aims to help create a full source bootstrap as part of the
|
||||
bootstrappable builds[3] effort.
|
||||
|
||||
It consists of a mutual self-hosting Scheme interpreter written in
|
||||
~5,000 LOC of simple C and a Nyacc-based C compiler written in Scheme.
|
||||
This mes.c is being simplified[4] to be transpiled by M2-Planet[5].
|
||||
|
||||
The Scheme interpreter (mes.c) has a Garbage Collector, a library of
|
||||
loadable Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS
|
||||
[portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8] --and test
|
||||
suite just barely enough to support a simple REPL and simple
|
||||
C-compiler: MesCC.
|
||||
|
||||
Mes+MesCC can compile an only lightly patched TinyCC[9] that is
|
||||
self-hosting. Using this tcc and the Mes C library we now have a
|
||||
Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5,
|
||||
binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for
|
||||
i686-linux and x86_64-linux.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John
|
||||
McCarthy page 13, GNU Guix's source/binary packaging transparency and
|
||||
Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone git://git.savannah.gnu.org/mes.git
|
||||
|
||||
Here are the compressed sources and a GPG detached signature[*]:
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.20.tar.gz
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.20.tar.gz.sig
|
||||
|
||||
Use a mirror for higher download bandwidth:
|
||||
https://ftpmirror.gnu.org/mes/mes-0.20.tar.gz
|
||||
https://ftpmirror.gnu.org/mes/mes-0.20.tar.gz.sig
|
||||
|
||||
Here are the MD5 and SHA1 checksums:
|
||||
|
||||
df839a83e4a2ad6c2a4accc5bf17b1a7 mes-0.20.tar.gz
|
||||
38d4cb3fa28fa1f5fc57fea9e046d4d8052bbb8c mes-0.20.tar.gz
|
||||
|
||||
[*] 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.20.tar.gz.sig
|
||||
|
||||
If that command fails because you don't have the required public key,
|
||||
then run this command to import it:
|
||||
|
||||
gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
|
||||
|
||||
and rerun the 'gpg --verify' command.
|
||||
|
||||
* Get informed, get involved
|
||||
|
||||
See https://bootstrappable.org
|
||||
Join #bootstrappable on irc.freenode.net.
|
||||
|
||||
* Changes in 0.20 since 0.19
|
||||
** Core
|
||||
*** The build system has been simplified, again.
|
||||
Mes now builds ootb on Debian.
|
||||
*** Mes now supports -c EXPR.
|
||||
** Divide by zero is now flagged.
|
||||
** Language
|
||||
*** 1 new function:
|
||||
take-while.
|
||||
** MesCC
|
||||
*** The C libraries have been exploded into one function per file.
|
||||
*** MesCC now has enhanced POSIX/gcc comand line support, e.g. -DFOO=1,
|
||||
-nodefaultlibs, -nostartfiles, -nostdlib.
|
||||
*** The archiver is now called `mesar'.
|
||||
*** MesCC now supports Nyacc-0.99.
|
||||
*** MesCC now depends on MesCC-Tools 0.6.0.
|
||||
*** 1 new function
|
||||
__mesabi_uldiv.
|
||||
** Noteworthy bug fixes
|
||||
*** interger division has been fixed.
|
||||
*** isatty now looks at terminfo.
|
||||
*** signal now uses sigaction correctly for non-x86.
|
||||
*** string->number now support #x hex-prefix.
|
||||
*** ungetc now has a buffer per file handle.
|
||||
|
||||
Greetings,
|
||||
janneke and Danny.
|
||||
|
||||
[0] https://www.gnu.org/software/mes
|
||||
[1] http://joyofsource.com/reduced-binary-seed-bootstrap.html
|
||||
[2] https://www.gnu.org/software/guix
|
||||
[3] https://bootstrappable.org
|
||||
[4] https://github.com/oriansj/mes-m2
|
||||
[5] https://github.com/oriansj/m2-planet
|
||||
[6] https://github.com/schemeway/lalr-scm
|
||||
[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[8] https://www.nongnu.org/nyacc
|
||||
[9] https://gitlab.com/janneke/tinycc
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[11] https://savannah.nongnu.org/projects/stage0
|
||||
[12] https://nlnet.nl/project/GNUMes
|
||||
132
sysa/mes-0.22/doc/announce/ANNOUNCE-0.21
Normal file
132
sysa/mes-0.22/doc/announce/ANNOUNCE-0.21
Normal file
|
|
@ -0,0 +1,132 @@
|
|||
|
||||
Subject: GNU Mes 0.21 released
|
||||
|
||||
<#secure method=pgpmime mode=sign>
|
||||
|
||||
We are pleased to announce the release of GNU Mes 0.21, representing
|
||||
54 commits over 10 weeks.
|
||||
|
||||
Mes has now brought the Reduced Binary Seed bootstrap to Guix (bootstrap
|
||||
a GNU/Linux system without binary GNU toolchain or equivalent). See
|
||||
https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/
|
||||
|
||||
This release supports a Scheme-only bootstrap: Mes can now be built with
|
||||
Gash and the experimental Gash Core Utils instead of using GNU Awk, GNU
|
||||
Bash, the GNU Core Utilities, GNU Grep, GNU Gzip, GNU Make, GNU SED, and
|
||||
GNU Tar. Also, the Mes C Library now supports bootstrapping those.
|
||||
Finally, this release brings Mes as a package to Debian GNU/Linux.
|
||||
|
||||
We are excited that the Nlnet Foundation[12] is now sponsoring this
|
||||
work!
|
||||
|
||||
Next targets:
|
||||
|
||||
- Introduce the Reduced Binaries Seed bootstrap to NixOS (Debian,
|
||||
Gentoo, ...?)
|
||||
- Scheme-only bootstrap: use Guile, Gash and Gash Core Utils to remove
|
||||
awk, bash, core utilities, grep, gzip, make, sed, tar, etc. from the
|
||||
Guix bootstrap binaries
|
||||
- ARM support
|
||||
- Full Source Bootstrap: compile Mes.c using M2-Planet
|
||||
- Reduced Binary Seed bootstrap for ARM
|
||||
- the Hurd
|
||||
|
||||
Packages are available in Guix master.
|
||||
|
||||
* About
|
||||
|
||||
GNU Mes[0] brings a Reduced Binary Seed bootstrap[1] to GNU Guix[2].
|
||||
This bootstrap has halved the size of opaque, uninspectable binaries
|
||||
that were needed to bootstrap Guix 1.0. The final goal is to help
|
||||
create a full source bootstrap as part of the bootstrappable builds[3]
|
||||
effort for any interested UNIX-like operating system.
|
||||
|
||||
Mes consists of a mutual self-hosting Scheme interpreter written in
|
||||
~5,000 LOC of simple C, and a C compiler written in Scheme. This
|
||||
mes.c is being simplified[4] to be transpiled by M2-Planet[5].
|
||||
|
||||
The Scheme interpreter has a Garbage Collector, a library of loadable
|
||||
Scheme modules-- notably Dominique Boucher's LALR[6], Pre-R6RS
|
||||
[portable syntax-case[7] with R7RS ellipsis, Matt Wette's Nyacc[8]
|
||||
--and test suite, just enough to support a REPL and a C99 compiler:
|
||||
MesCC.
|
||||
|
||||
Mes+MesCC can compile an only lightly patched TinyCC[9] that is
|
||||
self-hosting. Using this tcc and the Mes C library we now have a
|
||||
Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5,
|
||||
binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for
|
||||
i686-linux and x86_64-linux.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John
|
||||
McCarthy page 13, GNU Guix's source/binary packaging transparency and
|
||||
Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone git://git.savannah.gnu.org/mes.git
|
||||
|
||||
Here are the compressed sources and a GPG detached signature[*]:
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.21.tar.gz
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.21.tar.gz.sig
|
||||
|
||||
Use a mirror for higher download bandwidth:
|
||||
https://ftpmirror.gnu.org/mes/mes-0.21.tar.gz
|
||||
https://ftpmirror.gnu.org/mes/mes-0.21.tar.gz.sig
|
||||
|
||||
Here are the MD5 and SHA1 checksums:
|
||||
|
||||
dea43529d2d84fb4b9d81bdd9efcc715 mes-0.21.tar.gz
|
||||
35721a81feeab6e0d5913b8bf78f18951edbb964 mes-0.21.tar.gz
|
||||
|
||||
[*] 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.21.tar.gz.sig
|
||||
|
||||
If that command fails because you don't have the required public key,
|
||||
then run this command to import it:
|
||||
|
||||
gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
|
||||
|
||||
and rerun the 'gpg --verify' command.
|
||||
|
||||
* Get informed, get involved
|
||||
|
||||
See https://bootstrappable.org
|
||||
Join #bootstrappable on irc.freenode.net.
|
||||
|
||||
* Changes in 0.21 since 0.20
|
||||
** Core
|
||||
*** Mes can now be bootstrapped with Gash and Gash Core Utils.
|
||||
*** Mes now supports a Scheme-only bootstrap.
|
||||
*** Mes now supports -c EXPR.
|
||||
** MesCC
|
||||
*** Mes C Library now supports bootstrapping GNU Awk, GNU Bash, GNU SED, and GNU Tar.
|
||||
*** Mes C Library now has limited float support in vfprintf, vsnprintf, vsscanf.
|
||||
**** 7 new functions
|
||||
abtod, atof, creat, dtoab, execlp, isgraph, mknod, readlink, strtod,
|
||||
symlink.
|
||||
**** 5 new stubs
|
||||
getgrgid, getgrnam, getpgid, getpgrp, mktime, setgrent.
|
||||
** Noteworthy bug fixes
|
||||
*** A bug with `mes -c EXPR' has been fixed.
|
||||
*** The REPL now works again on x86_64.
|
||||
*** --with-system-libc now works again.
|
||||
|
||||
Greetings,
|
||||
janneke and Danny.
|
||||
|
||||
[0] https://www.gnu.org/software/mes
|
||||
[1] https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/
|
||||
[2] https://www.gnu.org/software/guix
|
||||
[3] https://bootstrappable.org
|
||||
[4] https://github.com/oriansj/mes-m2
|
||||
[5] https://github.com/oriansj/m2-planet
|
||||
[6] https://github.com/schemeway/lalr-scm
|
||||
[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[8] https://www.nongnu.org/nyacc
|
||||
[9] https://gitlab.com/janneke/tinycc
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[11] https://savannah.nongnu.org/projects/stage0
|
||||
[12] https://nlnet.nl/project/GNUMes
|
||||
162
sysa/mes-0.22/doc/announce/ANNOUNCE-0.22
Normal file
162
sysa/mes-0.22/doc/announce/ANNOUNCE-0.22
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
|
||||
Subject: GNU Mes 0.22 released
|
||||
|
||||
<#secure method=pgpmime mode=sign>
|
||||
|
||||
We are pleased to announce the release of GNU Mes 0.22, representing
|
||||
57 commits over 8 weeks.
|
||||
|
||||
Mes can now be built reproducibly by mes+mescc or guile+mescc accross
|
||||
distributions such as GNU Guix, Debian GNU/Linux and NixOS. Also, many
|
||||
build issues were fixed. A big thank you to reproducible-builds.org,
|
||||
Vagrant Cascadian, Jelle van der Waa, Hannes Mehnert and David Terry!
|
||||
|
||||
Mes now runs on the Hurd--mescc does not run yet, many system calls are
|
||||
missing, especially fork/exec--and initial scaffolding support for
|
||||
creating FreeBSD binaries was added.
|
||||
|
||||
This release better supports bringing the Scheme-only bootstrap to Guix:
|
||||
it no longer requires an update to the Guix bootstrap seed.
|
||||
|
||||
The Scheme-only bootstrap means that Mes can now be built with Gash and
|
||||
the experimental Gash Core Utils instead of using GNU Awk, GNU Bash, the
|
||||
GNU Core Utilities, GNU Grep, GNU Gzip, GNU Make, GNU Sed, and GNU Tar.
|
||||
Also, the Mes C Library now supports bootstrapping those.
|
||||
|
||||
We are excited that the Nlnet Foundation[12] is now sponsoring this
|
||||
work!
|
||||
|
||||
Next targets:
|
||||
|
||||
- Introduce the Reduced Binaries Seed bootstrap to NixOS (Debian,
|
||||
Arch, Gentoo, ...?)
|
||||
- Merge the Scheme-only bootstrap, the wip-bootstrap branch (using
|
||||
Guile, Gash and Gash Core Utils to remove awk, bash, core utilities,
|
||||
grep, gzip, make, sed, tar, etc. from the Guix bootstrap binaries)
|
||||
into Guix core-updates.
|
||||
- ARM support
|
||||
- Full Source Bootstrap: compile Mes.c using M2-Planet
|
||||
- Add full Guile module support
|
||||
- Reduced Binary Seed bootstrap for ARM
|
||||
- Support mescc on the Hurd (fork/exec, ...)
|
||||
|
||||
Packages are available in Guix master; the cross-distro reproducible
|
||||
is built using
|
||||
|
||||
guix build --system=i686-linux mes-rb5
|
||||
|
||||
* About
|
||||
|
||||
GNU Mes[0] is a Scheme interpreter and C compiler for bootstrapping the GNU
|
||||
System. Since version 0.22 it has again helped to halve the size of
|
||||
opaque, uninspectable binary seeds that are currently being used in the
|
||||
Reduced Binary Seed bootstrap[1] of GNU Guix[2]. The final goal is to help
|
||||
create a full source bootstrap as part of the bootstrappable builds[3]
|
||||
effort for UNIX-like operating systems.
|
||||
|
||||
The Scheme interpreter is written in ~5,000 LOC of simple C, and the C
|
||||
compiler written in Scheme and these are mutual self-hosting. This
|
||||
mes.c is being simplified[4] to be transpiled by M2-Planet[5].
|
||||
|
||||
Mes has a Garbage Collector, a library of loadable Scheme modules--
|
||||
notably Dominique Boucher's LALR[6], Pre-R6RS [portable syntax-case[7]
|
||||
with R7RS ellipsis, Matt Wette's Nyacc[8] --and test suite just enough
|
||||
to support a REPL and a C99 compiler: MesCC.
|
||||
|
||||
Mes+MesCC can compile an only lightly patched TinyCC[9] that is
|
||||
self-hosting. Using this tcc and the Mes C library we now have a
|
||||
Reduced Binary Seed bootstrap for the gnutools triplet: glibc-2.2.5,
|
||||
binutils-2.20.1, gcc-2.95.3. This is enough to bootstrap Guix for
|
||||
i686-linux and x86_64-linux.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10] -- John
|
||||
McCarthy page 13, GNU Guix's source/binary packaging transparency and
|
||||
Jeremiah Orians's stage0[11] ~500 byte self-hosting hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone git://git.savannah.gnu.org/mes.git
|
||||
|
||||
Here are the compressed sources and a GPG detached signature[*]:
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.22.tar.gz
|
||||
https://ftp.gnu.org/gnu/mes/mes-0.22.tar.gz.sig
|
||||
|
||||
Use a mirror for higher download bandwidth:
|
||||
https://ftpmirror.gnu.org/mes/mes-0.22.tar.gz
|
||||
https://ftpmirror.gnu.org/mes/mes-0.22.tar.gz.sig
|
||||
|
||||
Here are the MD5 and SHA1 checksums:
|
||||
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mes-0.22.tar.gz
|
||||
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx mes-0.22.tar.gz
|
||||
|
||||
[*] 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.22.tar.gz.sig
|
||||
|
||||
If that command fails because you don't have the required public key,
|
||||
then run this command to import it:
|
||||
|
||||
gpg --keyserver keys.gnupg.net --recv-keys 1A858392E331EAFDB8C27FFBF3C1A0D9C1D65273
|
||||
|
||||
and rerun the 'gpg --verify' command.
|
||||
|
||||
* Get informed, get involved
|
||||
|
||||
See https://bootstrappable.org
|
||||
Join #bootstrappable on irc.freenode.net.
|
||||
|
||||
* Changes in 0.22 since 0.21
|
||||
** Core
|
||||
*** Mes now builds reproducibly with MesCC, cross distribution
|
||||
Using --with-bootstrap on x86, a bin/mes-mescc is compiled with
|
||||
mes+mescc, that shall have sha256sum
|
||||
|
||||
9e0bcb1633c58e7bc415f6ea27cee7951d6b0658e13cdc147e992b31a14625fb bin/mes-mescc
|
||||
|
||||
This has been verified on GNU Guix, Debian GNU/Linux and NixOS.
|
||||
*** Mes now builds reproducibly with Guile+MesCC vs Mes+MesCC.
|
||||
*** Mes now builds reproducibly with Tiny CC-built MesCC.
|
||||
*** configure now respects the user's CFLAGS, CPPFLAGS and LDFLAGS.
|
||||
*** Mes now supports mescc-tools 0.5.2 next to 0.6.1.
|
||||
This allows introducing the Scheme-only bootstrap without updating or
|
||||
adding new bootstrap binary seeds into GNU Guix.
|
||||
*** Mes now runs when configured --with-courage on the Hurd:
|
||||
GNU debian 0.9 GNU-Mach 1.8+git20170609-486/Hurd-0.9 i686-AT386 GNU
|
||||
Note that mescc does not run; fork and exec are not yet implemented.
|
||||
*** Mes now configures --with-courage on x86-FreeBSD 12.1
|
||||
The initial ELF scaffold tests: exit-42.S, 0exit-42.hex2,
|
||||
body-exit-42.hex2, hello-mes.S, 0hello-mes.hex2, body-hello-mes.hex2
|
||||
pass.
|
||||
*** configure now has a --with-bootstrap option.
|
||||
This adds the reproducible bootstrap build of bin/mes-mescc, using
|
||||
mes+mescc.
|
||||
*** configure prefers $CC over gcc; tcc over gcc, gcc over cc.
|
||||
*** Mes now prints an error when attempting to read a file that does not exist.
|
||||
*** Mes no longer depends on GIT.
|
||||
** Noteworthy bug fixes
|
||||
*** Several annoying build problems were fixed, for non-Guix systems.
|
||||
*** A bug with buffered-read was fixed.
|
||||
This means that bash-2.05 can now build glibc-2.2.5; notably it now
|
||||
successfully executes make-syscall.sh.
|
||||
*** A bug with execlp, execvp for file names containing a slash was fixed.
|
||||
This should allow make-3.80 running scripts that have "#! ./move-if-change".
|
||||
|
||||
Greetings,
|
||||
janneke and Danny.
|
||||
|
||||
[0] https://www.gnu.org/software/mes
|
||||
[1] https://guix.gnu.org/blog/2019/guix-reduces-bootstrap-seed-by-50/
|
||||
[2] https://www.gnu.org/software/guix
|
||||
[3] https://bootstrappable.org
|
||||
[4] https://github.com/oriansj/mes-m2
|
||||
[5] https://github.com/oriansj/m2-planet
|
||||
[6] https://github.com/schemeway/lalr-scm
|
||||
[7] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[8] https://www.nongnu.org/nyacc
|
||||
[9] https://gitlab.com/janneke/tinycc
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[11] https://savannah.nongnu.org/projects/stage0
|
||||
[12] https://nlnet.nl/project/GNUMes
|
||||
99
sysa/mes-0.22/doc/announce/ANNOUNCE-0.3
Normal file
99
sysa/mes-0.22/doc/announce/ANNOUNCE-0.3
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
Subject: on bootstrapping: first Mes 0.3 released
|
||||
|
||||
I am pleased to announce the first release of Mes: 0.3, representing
|
||||
152 commits over 3 months since the second status report[1].
|
||||
|
||||
* About
|
||||
|
||||
Mes aims to create an entirely source-based bootstrapping path. The
|
||||
target is to [have GuixSD] boostrap from a minimal, easily inspectable
|
||||
binary --that should be readable as source-- into something close to
|
||||
R6RS Scheme.
|
||||
|
||||
As bootstrapping is presumably easiest and probably most fun with
|
||||
Scheme, the next step for Mes is mescc: a C compiler/linker to
|
||||
boostrap into GNU Gcc and GNU Guile, possibly via Tiny-CC.
|
||||
|
||||
It currently has an interpreter written in C (mes) with Garbage
|
||||
Collector (Jam Scraper), a library of loadable Scheme modules with
|
||||
test suite just barely enough to support a simple REPL (repl.mes)
|
||||
and a proof-of-concept c-compiler (mescc.mes) that produces an elf
|
||||
from the simplest of C files.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[2]
|
||||
-- John McCarthy page 13
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.3 -O mes-0.3.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
|
||||
* Changes in 0.3 since 0.2
|
||||
** Core
|
||||
*** Number-based rather than pointer-based cells.
|
||||
*** Garbage collector aka Jam scraper.
|
||||
A variant on SICP's stop and copy Garbage Collector (Jam Scraper?)
|
||||
algorithm has been implemented.
|
||||
*** The reader has been moved to Scheme.
|
||||
** Language
|
||||
*** Simple loadable modules.
|
||||
*** Srfi-9 and match use handwritten syntax-rules (mes-use-module (mes syntax)).
|
||||
*** Optional syntax-case using psyntax (mes-use-module (mes psyntax)).
|
||||
** Noteworthy bug fixes
|
||||
*** Srfi-0 has been fixed.
|
||||
|
||||
* Changes in 0.2 since 0.1
|
||||
** Core
|
||||
*** Names of symbols and strings are list of characters [WAS: c-string].
|
||||
*** Sc-expand from pre-R6RS's psyntax has been integrated.
|
||||
*** Undefined variable error now shows the name of the undefined variable.
|
||||
*** There is now only one SCM type for builtin functions.
|
||||
*** Macro expansion has been cleaned-up.
|
||||
** Language
|
||||
*** Mes now provides a subset of R6RS.
|
||||
*** Mes now provides syntax-case.
|
||||
*** Mes now provides `load'.
|
||||
** Noteworthy bug fixes
|
||||
*** Using values as second parameter of builtin function yields first value.
|
||||
*** Quoted internals (e.g. 'if 'lambda) are now symbols.
|
||||
*** Syntax error now exits.
|
||||
*** Make+Bash voodoo has been replaced by build-aux/mes-snarf.scm.
|
||||
*** Apply now accepts multiple list arguments.
|
||||
*** Apply of character, inernal, number, string is an error.
|
||||
*** Quasisyntax reading
|
||||
|
||||
* Changes in 0.1 (since progress report #2)
|
||||
** Core
|
||||
*** expand_macro is now a separate function.
|
||||
*** A smaller core can now compiled using BOOT=1.
|
||||
The smaller core does not provide define, define-macro, or quasiquote;
|
||||
these are provided from a Scheme version of implemented eval/apply.
|
||||
** Language
|
||||
*** Mes now provides a subset of R5RS.
|
||||
*** Mes now provides let-syntax.
|
||||
*** Mes now provides match.
|
||||
*** Mes now provides quasisyntax, unsyntax and unsyntax-splicing.
|
||||
** User interface
|
||||
*** Mes now provides a REPL, run:
|
||||
scripts/repl.mes
|
||||
*** Mes compiler can be run as a script:
|
||||
scripts/mescc.mes doc/examples/main.c
|
||||
*** Macro expansion can be inspected in the REPL, e.g.:
|
||||
,expand (and 0 1)
|
||||
** Noteworthy bug fixes
|
||||
*** Performance: scripts/mescc.mes now takes 2s to compile main.c (was 1'20").
|
||||
*** Symbols are now truly unique.
|
||||
* '(), #t, #f are no longer symbols.
|
||||
|
||||
Greetings,
|
||||
Jan
|
||||
|
||||
[1] https://lists.nongnu.org/archive/html/guile-user/2016-09/msg00061.html
|
||||
[2] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
103
sysa/mes-0.22/doc/announce/ANNOUNCE-0.4
Normal file
103
sysa/mes-0.22/doc/announce/ANNOUNCE-0.4
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
Subject: Mes 0.4 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.4, representing 115
|
||||
commits over barely two weeks. It now runs Nyacc and PEG and has much
|
||||
reduced core.
|
||||
|
||||
* About
|
||||
|
||||
Mes aims to create an entirely source-based bootstrapping path. The
|
||||
target is to [have GuixSD] boostrap from a minimal, easily inspectable
|
||||
binary --that should be readable as source-- into something close to
|
||||
R6RS Scheme.
|
||||
|
||||
As bootstrapping is presumably easiest and probably most fun with
|
||||
Scheme, the next step for Mes is mescc: a C compiler/linker to
|
||||
boostrap into GNU Gcc and GNU Guile, possibly via Tiny-CC.
|
||||
|
||||
It currently has an interpreter written in C (mes) with Garbage
|
||||
Collector (Jam Scraper), a library of loadable Scheme modules--
|
||||
notably Dominique Boucher's LALR[1], Pre-R6RS portable
|
||||
syntax-case[2] with R7RS ellipsis, Nyacc[3] and Guile's PEG[4]
|
||||
--and test suite just barely enough to support a simple REPL
|
||||
(repl.mes) and a proof-of-concept C-compiler (mescc.mes) that
|
||||
produces an elf from the simplest of C files.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[5]
|
||||
-- John McCarthy page 13
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.4 -O mes-0.4.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.4 since 0.3
|
||||
** Core
|
||||
*** Improved performance.
|
||||
Macros are now memoized; after expansion and before eval'ing the
|
||||
expanded form, their input s-expression is replaced by the expansion.
|
||||
This yields a nice performance improvement which finally allowed
|
||||
moving all non-essential bits from the C-core into Scheme...including
|
||||
the reader. The Scheme reader is much, much slower than the previous
|
||||
C version, making Mes--again-- feel slow. Think of that as a feature.
|
||||
*** Bootstrap with minimal reader in C.
|
||||
The C-reader needs only support reading of words and lists
|
||||
(s-expressions), line-comments to read the initial Scheme reader which
|
||||
then takes over and handles reading of quoting, characters, strings,
|
||||
block-comments.
|
||||
*** Reduced size.
|
||||
Total C size: ~1500LOC. The main Mes evaluator is now ~1000LOC
|
||||
including cell creation and garbage collector. This code is able to
|
||||
execute a Scheme program that has been loaded into memory. Another
|
||||
~500LOC is spent to load a minimal Scheme program and to dump it, to
|
||||
provide a small posix interface, math functions and do some error
|
||||
reporting.
|
||||
*** Programs can be dumped and loaded using --dump and --load.
|
||||
** Language
|
||||
*** Minimal syntactic exception support for Nyacc.
|
||||
*** Minimal syntactic fluids support for Nyacc.
|
||||
*** Keywords are now supported.
|
||||
*** Cond now supports =>.
|
||||
*** Guile's optargs: lambda* and define* are now supported.
|
||||
*** #;-comments are now supported.
|
||||
*** Non-nested #| |#-comments are now supported.
|
||||
*** Quasisyntax is now supported.
|
||||
*** R7RS syntax-rules with custom ellipsis, with-ellipsis are now supported.
|
||||
*** 9 new [partial] modules
|
||||
(mes fluids), (mes nyacc), (mes optargs), (mes pmatch), (mes peg),
|
||||
(srfi srfi-13), (srfi srfi-9-psyntax), (srfi srfi-26), (srfi srfi-43),
|
||||
(rnrs arithmetic bitwise), (sxml xpath)
|
||||
*** 36 new functions
|
||||
1+, 1-, abs, and=>, append-reverse, ash, char<=?, char<?, char>=?,
|
||||
char>?, even?, filter, delete, delq, vector-copy, fold, fold-right,
|
||||
getenv, iota, keyword->symbol list-head, list-tail, negative?, odd?,
|
||||
positive?, remove!, remove, string->number, string-copy,
|
||||
string-prefix?, string=, string=?, symbol->keyword symbol-append,
|
||||
symbol-prefix?, unless, write, zero?.
|
||||
** Noteworthy bug fixes
|
||||
*** Macros are now memoized.
|
||||
*** An error is reported when using a wrong number of arguments with a call.
|
||||
*** Cond now evaluates its test clauses only once.
|
||||
*** Append can also handle one argument.
|
||||
*** For-each now supports 2 list arguments.
|
||||
*** Map now supports 3 list arguments.
|
||||
*** Backslash in string is supported.
|
||||
*** Closure is not a pair.
|
||||
*** All standard characters are supported.
|
||||
*** Mescc now also runs in Guile.
|
||||
|
||||
|
||||
Greetings,
|
||||
Jan
|
||||
|
||||
[1] https://github.com/schemeway/lalr-scm
|
||||
[2] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[3] https://www.nongnu.org/nyacc/
|
||||
[4] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[5] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
79
sysa/mes-0.22/doc/announce/ANNOUNCE-0.5
Normal file
79
sysa/mes-0.22/doc/announce/ANNOUNCE-0.5
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
Subject: Mes 0.5 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.5, representing 250
|
||||
commits over 4 months. Mes is now self-hosting, or rather it features
|
||||
a mutual self-hosting Scheme interpreter and C compiler: mes.c and
|
||||
mescc; a Nyacc-based C compiler backend that also works separately
|
||||
with Guile.
|
||||
|
||||
* About
|
||||
|
||||
Mes aims to create full source bootstrapping for GuixSD: an
|
||||
entirely source-based bootstrap path. The target is to [have
|
||||
GuixSD] boostrap from a minimal, easily inspectable binary --that
|
||||
should be readable as source-- into something close to R6RS
|
||||
Scheme.
|
||||
|
||||
It currently consists of a mutual self-hosting [close to Guile-]
|
||||
Scheme interpreter prototype in C and a Nyacc-based C compiler in
|
||||
[Guile] Scheme.
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[1], Pre-R6RS portable syntax-case[2] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[3] Guile's PEG[4] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
(mescc.mes) that can produce the second initial ELF binary from
|
||||
binary from mes.c, in only about 2h30'.
|
||||
|
||||
Mes was inspired by The Maxwell Equations of Software: LISP-1.5[5]
|
||||
-- John McCarthy page 13, GNU Guix's[6] source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0[7] bootstrap project.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.5 -O mes-0.5.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.5 since 0.4
|
||||
** Core
|
||||
*** Support compilation with Mescc.
|
||||
*** Support compilation with -nostdinc, -nostdlib using mlibc.
|
||||
*** Support call-with-current-continuation.
|
||||
*** Support exception handling, catch/throw.
|
||||
*** Give sensible error message when a macro is missing.
|
||||
** Language
|
||||
*** Map now supports 4 lists.
|
||||
*** The reader supports negative hex numbers.
|
||||
*** 24 new functions
|
||||
access?, assoc-set! c????r, compose, list->char-set,
|
||||
open-input-string, read-string, string-delete, with-throw-handler.
|
||||
** Mescc
|
||||
*** Mescc can be used separately as a Nyacc-based C compiler backend for Guile.
|
||||
*** Switch to Nyacc frontend, update Nyacc to 0.76.5.
|
||||
*** Mescc now has a test suite, scaffold/t.c.
|
||||
*** Mescc now includes a minimal C library: libc/mlib.c libc/mstart.c.
|
||||
*** Mescc can now compile mes.c.
|
||||
** Noteworthy bug fixes
|
||||
*** The build system (configure, make) has been refactored.
|
||||
*** Support map-4.
|
||||
*** Evaluate arguments of OR only once.
|
||||
*** Fix assq-set!
|
||||
*** Fix ,expand in the REPL.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[1] https://github.com/schemeway/lalr-scm
|
||||
[2] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[3] https://www.nongnu.org/nyacc/
|
||||
[4] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[5] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[6] https://www.gnu.org/software/guix/
|
||||
[7] https://github.com/oriansj/stage0
|
||||
82
sysa/mes-0.22/doc/announce/ANNOUNCE-0.6
Normal file
82
sysa/mes-0.22/doc/announce/ANNOUNCE-0.6
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
Subject: Mes 0.6 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.6, representing 32
|
||||
commits over 24 days. Mescc now works with vanilla Nyacc 0.78.3
|
||||
(thanks Matt!), Nyacc has been unbundled and Mescc compiles 33/55
|
||||
of tinycc test2 tests.
|
||||
|
||||
* About
|
||||
|
||||
Mes aims to create full source bootstrapping for GuixSD: an
|
||||
entirely source-based bootstrap path. The target is to [have
|
||||
GuixSD] boostrap from a minimal, easily inspectable binary --that
|
||||
should be readable as source-- into something close to R6RS
|
||||
Scheme.
|
||||
|
||||
It currently consists of a mutual self-hosting [close to Guile-]
|
||||
Scheme interpreter prototype in C and a Nyacc-based C compiler in
|
||||
[Guile] Scheme.
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[1], Pre-R6RS portable syntax-case[2] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[3] Guile's PEG[4] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
(mescc.mes) that can produce the second initial ELF binary from
|
||||
binary from mes.c, in only about 2h30'.
|
||||
|
||||
Mes was inspired by The Maxwell Equations of Software: LISP-1.5[5]
|
||||
-- John McCarthy page 13, GNU Guix's[6] source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0[7] bootstrap project.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.6 -O mes-0.6.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.6 since 0.5
|
||||
** Core
|
||||
*** configure, build now supports x86 and development for arm with-courage.
|
||||
** Language
|
||||
*** Nyacc has been unbundled and is now a dependency.
|
||||
*** Mes now supports case-lambda.
|
||||
*** Mes reader now supports abbreviated form for return character #\cr.
|
||||
*** 1 new function
|
||||
string-index.
|
||||
** Mescc
|
||||
*** Mescc can be used on regular C sources, like tinycc's tests/test2 suite.
|
||||
*** make check passes 33/55 of tinycc's test suite etest/test2 tests.
|
||||
*** Mescc now recognizes `short' as a type.
|
||||
*** Mescc now supports sizeof (<identifier>), sizeof(<expression>).
|
||||
*** Mescc now respects enum field initializers and supports enum variables.
|
||||
*** Mescc now supports binary constants .
|
||||
*** Mescc now supports assignments from ==, != boolean expressions .
|
||||
*** Mescc now supports &, ^.
|
||||
*** Mescc now supports struct pointers.
|
||||
*** Mescc now supports struct definition with immediatete variable declaration.
|
||||
*** Mescc now supports calling (returning correctly from) void functions.
|
||||
*** Mescc now handles case statements breaks without compound correctly.
|
||||
*** Mescc now has better [int/pointer] array support.
|
||||
*** Mescc now has better support for simple (non-array-)structs.
|
||||
*** Mescc now supports multiple declarations in one statement like: int a,b;
|
||||
**** 2 new mlibc functions
|
||||
printf, strcpy.
|
||||
** Noteworthy bug fixes
|
||||
*** Installed mes and mes.repl now also run outside of source tree again.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[1] https://github.com/schemeway/lalr-scm
|
||||
[2] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[3] https://www.nongnu.org/nyacc/
|
||||
[4] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[5] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[6] https://www.gnu.org/software/guix/
|
||||
[7] https://github.com/oriansj/stage0
|
||||
83
sysa/mes-0.22/doc/announce/ANNOUNCE-0.7
Normal file
83
sysa/mes-0.22/doc/announce/ANNOUNCE-0.7
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
Subject: Mes 0.7 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.7, representing 32
|
||||
commits over 4 weeks. Mescc now behaves more like a regular C
|
||||
compiler: supporting -E, -c, -o options and with a more complete set
|
||||
of header files [stubs]; enough to work on compiling tinycc's tcc.c
|
||||
albeit a somewhat modified version[8].
|
||||
|
||||
* About
|
||||
|
||||
Mes aims to create full source bootstrapping for GuixSD: an
|
||||
entirely source-based bootstrap path. The target is to [have
|
||||
GuixSD] boostrap from a minimal, easily inspectable binary --that
|
||||
should be readable as source-- into something close to R6RS
|
||||
Scheme.
|
||||
|
||||
It currently consists of a mutual self-hosting [close to Guile-]
|
||||
Scheme interpreter prototype in C and a Nyacc-based C compiler in
|
||||
[Guile] Scheme.
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[1], Pre-R6RS portable syntax-case[2] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[3] Guile's PEG[4] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
(mescc.mes) that can produce the second initial ELF binary from
|
||||
binary from mes.c, in only about 2h30'.
|
||||
|
||||
Mes was inspired by The Maxwell Equations of Software: LISP-1.5[5]
|
||||
-- John McCarthy page 13, GNU Guix's[6] source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0[7] bootstrap project.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.7 -O mes-0.7.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.7 since 0.6
|
||||
** Core
|
||||
*** The minimal C reader is now always included; dependencies
|
||||
on i686-unknown-linux-gnu-gcc and binary read-0-32.mo have been
|
||||
dropped, these are now optional.
|
||||
** Language
|
||||
*** Mes reader now supports octal numbers #oXXX.
|
||||
*** 10 new functions
|
||||
current-output-port, getopt-long, negate, open-output-file,
|
||||
option-ref, set-current-output-port, string-rindex, string-suffix?,
|
||||
with-ouwith-output-to-file, with-output-to-port.
|
||||
** Mescc
|
||||
*** Mescc can now be installed and used alongside a gcc installation.
|
||||
*** Mescc can now handle const anywhere.
|
||||
*** Mescc now supports array fields in structs.
|
||||
*** Mescc now supports forward declarations and typedef.
|
||||
*** Mescc can now handle comments anywhere.
|
||||
*** Mescc now supports addition and substraction for enum field values.
|
||||
*** Mescc now supports anonymous enums.
|
||||
*** Mescc now supports all C99 header files needed to compile tcc.c.
|
||||
*** build: C sources are now preprocessed separately, then compiled and linked.
|
||||
*** build: mlibc and C sources are now compiled separately and then linked.
|
||||
*** mlibc has been moved from Scheme snippets into C.
|
||||
*** Mescc now supports -c, -D, -E, -I and -o options.
|
||||
**** open now supports optional third mode parameter.
|
||||
** Noteworthy bug fixes
|
||||
*** string-index now supports function predicate.
|
||||
*** number->string for radix > 10 now produces `a' instead of `:'.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[1] https://github.com/schemeway/lalr-scm
|
||||
[2] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[3] https://www.nongnu.org/nyacc/
|
||||
[4] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[5] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[6] https://www.gnu.org/software/guix/
|
||||
[7] https://github.com/oriansj/stage0
|
||||
[8] https://gitlab.com/janneke/tinycc
|
||||
70
sysa/mes-0.22/doc/announce/ANNOUNCE-0.8
Normal file
70
sysa/mes-0.22/doc/announce/ANNOUNCE-0.8
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
Subject: Mes 0.8 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.8, representing 34
|
||||
commits over 3 weeks. Mescc now produces object files in the hex2
|
||||
ascii output format compatible with the stage0 linker.
|
||||
|
||||
Special thanks to Jeremiah Orians for support with MESCC_Tools and
|
||||
hex2, more goodness to follow soon!
|
||||
|
||||
* About
|
||||
|
||||
Mes aims to create full source bootstrapping for GuixSD: an
|
||||
entirely source-based bootstrap path. The target is to [have
|
||||
GuixSD] boostrap from a minimal, easily inspectable binary --that
|
||||
should be readable as source-- into something close to R6RS
|
||||
Scheme.
|
||||
|
||||
It currently consists of a mutual self-hosting [close to Guile-]
|
||||
Scheme interpreter prototype in C and a Nyacc-based C compiler in
|
||||
[Guile] Scheme.
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[1], Pre-R6RS portable syntax-case[2] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[3] Guile's PEG[4] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
(mescc.mes) that can produce the second initial ELF binary from
|
||||
binary from mes.c, in only about 2h30'.
|
||||
|
||||
Mes was inspired by The Maxwell Equations of Software: LISP-1.5[5]
|
||||
-- John McCarthy page 13, GNU Guix's[6] source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0[7] bootstrap project.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.8 -O mes-0.8.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.8 since 0.7
|
||||
** Mescc
|
||||
*** Mescc now depends on the hex2 linker from MESCC_Tools[9].
|
||||
Direct ELF output support has been removed.
|
||||
ELF symbol and string table creation has been removed.
|
||||
*** Mescc now has experimental annotation support for hex2.
|
||||
*** Mescc has experimental annotation support for hex2.
|
||||
*** Mescc has been simplified by leveraging use labels in hex2 output.
|
||||
*** Mescc now supports continue in loops.
|
||||
*** Mescc now compiles to hex2 object files.
|
||||
** Language
|
||||
*** 1 new function
|
||||
list-index.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[1] https://github.com/schemeway/lalr-scm
|
||||
[2] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[3] https://www.nongnu.org/nyacc/
|
||||
[4] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[5] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
[6] https://www.gnu.org/software/guix/
|
||||
[7] https://github.com/oriansj/stage0
|
||||
[8] https://gitlab.com/janneke/tinycc
|
||||
[9] https://github.com/oriansj/MESCC_Tools
|
||||
93
sysa/mes-0.22/doc/announce/ANNOUNCE-0.9
Normal file
93
sysa/mes-0.22/doc/announce/ANNOUNCE-0.9
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
Subject: Mes 0.9 released
|
||||
|
||||
I am pleased to announce the release of Mes 0.9, representing 107
|
||||
commits over 5 weeks. Mescc now compiles to a surprisingly readable
|
||||
stage0 M1 macro assembler output format. Mescc now compiles a
|
||||
modified TinyCC into a running [mostly segfaulting] executable. This
|
||||
is a major milestone as tcc can compile GCC.
|
||||
|
||||
|
||||
* About
|
||||
|
||||
Mes[0] aims to create full source bootstrapping for GuixSD[1] as
|
||||
part of the bootstrappable builds[2] project.
|
||||
|
||||
It currently consists of a mutual self-hosting [close to Guile-]
|
||||
Scheme interpreter prototype in C and a Nyacc-based C compiler in
|
||||
[Guile] Scheme. This C prototype will be rewritten in stage0[3]
|
||||
M1 assembly (or possibly stage2 slow-LISP, or ...).
|
||||
|
||||
The Scheme interpreter prototype (mes.c) has a Garbage Collector,
|
||||
a library of loadable Scheme modules-- notably Dominique Boucher's
|
||||
LALR[4], Pre-R6RS portable syntax-case[5] with R7RS ellipsis, Matt
|
||||
Wette's Nyacc[6], Guile's PEG[7] --and test suite just barely
|
||||
enough to support a simple REPL (repl.mes) and simple C-compiler
|
||||
(mescc.mes).
|
||||
|
||||
The simple C compiler can compile a modified TinyCC[8]. This
|
||||
needs more work. A gcc-compiled tcc is known[9] to compile GCC.
|
||||
|
||||
Mes is inspired by The Maxwell Equations of Software: LISP-1.5[10]
|
||||
-- John McCarthy page 13, GNU Guix's source/binary packaging
|
||||
transparency and Jeremiah Orians's stage0 ~300 byte self-hosting
|
||||
hex assembler.
|
||||
|
||||
* Download
|
||||
|
||||
git clone https://gitlab.com/janneke/mes
|
||||
|
||||
wget https://gitlab.com/janneke/mes/repository/archive.tar.gz?ref=v0.9 -O mes-0.9.tar.gz
|
||||
|
||||
Mes runs from the source tree and can also be built, packaged and
|
||||
installed in Guix[SD] by the usual
|
||||
|
||||
guix package -f guix.scm
|
||||
|
||||
* Changes in 0.9 since 0.8
|
||||
** Core
|
||||
*** Mes now builds better in non-Guix[SD] legacy distros/environments. Thanks, rain1!
|
||||
** Mescc
|
||||
*** Mescc now compiles a modified tinycc into a running [mostly segfaulting] tcc.mes.
|
||||
https://gitlab.com/janneke/tinycc branch wip-mescc.
|
||||
*** Mescc now supports locals stack frame larger than 1 byte offset.
|
||||
*** Mescc now supports incomplete struct initializers {0}.
|
||||
*** Mescc now supports >>=, <<=, ^=, ~.
|
||||
*** Mescc now supports the comma operator.
|
||||
*** Mescc now supports mullti-line string initializers.
|
||||
*** Mescc now supports unions.
|
||||
*** Mescc now supports arrays in structs.
|
||||
*** Mescc now supports structs in structs.
|
||||
*** Mescc has been refactored to use records.
|
||||
*** Mescc now builds and runs with Guile-2.0 (legacy distro support, not recommended).
|
||||
*** Mescc now bundles tinycc's test2 test suite, passes one more test [34/55 pass].
|
||||
*** Mescc now has an incremental test suite consisting of 56 tests.
|
||||
*** Mescc now supports stdarg variable argument lists.
|
||||
*** Mescc now has __GNUC__ unset, #f (WAS: 0).
|
||||
*** Mescc now depends on Nyacc 0.80.3.
|
||||
*** Mescc now depends on M1 from MESCC_Tools v0.2.
|
||||
*** Mescc now compiles to M1 object files.
|
||||
**** 7 new mlibc functions
|
||||
calloc, close, getcwd, lseek, sprintf, unlink, vprintf.
|
||||
**** 31 new mlibc stubs
|
||||
execvp, fclose, fdopen, fflush, fopen, fprintf, fread, free, fseek,
|
||||
ftell, fwrite, localtime, longjmp, memcpy, memmove, memmove, memset,
|
||||
qsort, remove, setjump, snprintf, sscanf, strchr, strrchr, strstr,
|
||||
strtol, strtoll, strtoul, strtoull, time, vnsprintf.
|
||||
**** 10 new header files
|
||||
alloca.h, float.h, libgen.h, locale.h, stdbool.h, stddef.h, stdint.h,
|
||||
stdnoreturn.h, sys/select.h, sys/wait.h.
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] https://gitlab.com/janneke/mes
|
||||
[1] https://www.gnu.org/software/guix
|
||||
[2] http://bootstrappable.org
|
||||
[3] https://github.com/oriansj/stage0
|
||||
[4] https://github.com/schemeway/lalr-scm
|
||||
[5] https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
|
||||
[6] https://www.nongnu.org/nyacc/
|
||||
[7] https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html
|
||||
[8] https://gitlab.com/janneke/tinycc
|
||||
[9] https://lists.gnu.org/archive/html/tinycc-devel/2017-05/msg00103.html
|
||||
[10] http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
|
||||
87
sysa/mes-0.22/doc/announce/ANNOUNCE-2
Normal file
87
sysa/mes-0.22/doc/announce/ANNOUNCE-2
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
Subject: on bootstrapping: 2nd status report on Mes
|
||||
Date: Sun, 25 Sep 2016 13:52:11 +0200
|
||||
|
||||
Hi!
|
||||
|
||||
In June I announced[0] Mes as a project that seeks to reduce the size of/
|
||||
dependency on bootstrap binaries, esp. for a system like GuixSD
|
||||
|
||||
The strategy was to create a minimal trusted binary (prototyped in C but
|
||||
eventually to be hand-crafted in assembly/hex) that interpets a minimal
|
||||
LISP. Then using this minimal but already convenient LISP, extend it
|
||||
into Scheme and write a tiny C compiler/linker.
|
||||
|
||||
Last time I had a minimal LISP-1.5-resembling interpreter in 900 lines
|
||||
of C that could interpret itself and an extension layer written in LISP
|
||||
providing a minimal Scheme environment. I was stuck on adding macros in
|
||||
LISP and had a broken macro implentation in C that I wanted to remove.
|
||||
Also I hoped to greatly reduce the size of the C part.
|
||||
|
||||
New status[1]
|
||||
|
||||
* Provide Scheme primitives directly in 1400 lines of C
|
||||
* Remove LISP-1.5 staging
|
||||
* closures clue-bat, fixing bugs in begin, lambda, lexical
|
||||
scoping etc. ... learned a lot!
|
||||
* quasiquote, unquote, unquote-splicing (in C, too slow in Scheme)
|
||||
* define-macro (in C)
|
||||
* define-syntax, syntax-rules (in Scheme, using define-macro)
|
||||
* all primitives needed to run LALR (strings, vectors, records,
|
||||
some srfi bits; mostly in Scheme)
|
||||
* test suite with 97 tests that run with Mes and also with Guile
|
||||
* minimal and partial ANSI C parser for hello world
|
||||
* minimal and simplistic 32 bit elf c-ast->elf generator
|
||||
|
||||
Mes can now create a running 32-bit elf binary from this hello
|
||||
world C source with a simplistic for loop
|
||||
|
||||
int main ()
|
||||
{
|
||||
int i;
|
||||
puts ("Hi Mes!\n");
|
||||
for (i = 0; i < 4; ++i)
|
||||
puts (" Hello, world!\n");
|
||||
return 1;
|
||||
}
|
||||
|
||||
It takes Mes 1'20" to compile this program, Guile takes 0.5 seconds.
|
||||
|
||||
* cannot get psyntax.pp hooked-up or running
|
||||
* do not understand syntax stuff [well enough] to implement in C
|
||||
-> no let-syntax, no MATCH
|
||||
-> no syntax-case, no PEG parser
|
||||
|
||||
In theory the bootstrapping problem I set out to solve seems to be
|
||||
cracked. The remaining problem is reduced to `just work':
|
||||
implementing a minimal C compiler in Scheme. Questions here: I'm not
|
||||
convinced yet that this is a meaningful project...aaand I really not
|
||||
want to tackle this without having MATCH, which Mes does not have yet.
|
||||
|
||||
Of the possible directions that I see
|
||||
|
||||
0 write the C compiler in Scheme without match
|
||||
1 rewrite match without let-syntax
|
||||
2 grok+write let-syntax/syntax-case using define-macro, some bits in C
|
||||
3 run and hook-up psyntax.pp...BUT that would probably require:
|
||||
4 address performance problem, possibly by
|
||||
5 rewrite Mes into a VM-based solution
|
||||
|
||||
none I find really attractive. Option 5, a VM is proven to work but
|
||||
that's quite a change of direction. Looking at other VM-based projects
|
||||
(e.g. GNU Epsilon[2]) I fear that this must result in a much larger code
|
||||
base in C, throwing out the minimal trusted binary idea. The other
|
||||
puzzles and work 0, 2 or 3 still need to be done.
|
||||
|
||||
However, diving into syntax-macro or eval work (2 or 3) most probably
|
||||
needs the performance issue addressed. And if it turns out that a big
|
||||
VM solution is needed, that may still invalidate this project after
|
||||
having done even more work.
|
||||
|
||||
Help! :-) Ideas?
|
||||
|
||||
Greetings,
|
||||
Jan
|
||||
|
||||
[0] https://lists.gnu.org/archive/html/guile-user/2016-06/msg00061.html
|
||||
[1] https://gitlab.com/janneke/mes
|
||||
[2] http://git.savannah.gnu.org/cgit/epsilon.git
|
||||
11
sysa/mes-0.22/doc/announce/README
Normal file
11
sysa/mes-0.22/doc/announce/README
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
-*- org -*-
|
||||
#+TITLE: GNU Mes Announcements
|
||||
|
||||
Copyright © 2016, 2017, 2018 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
||||
|
||||
Files are emails sent to public mailing lists. The notice above
|
||||
applies to these files too.
|
||||
87
sysa/mes-0.22/doc/announce/UPDATE-0.13
Normal file
87
sysa/mes-0.22/doc/announce/UPDATE-0.13
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
Subject: wip-bootstrap updated
|
||||
|
||||
I've updated the wip-bootstrap branch[0] for Mes[1] 0.13. It has new
|
||||
mes-boot and tcc-boot packages. mes-boot is a bootstrap version of
|
||||
Mes; it only depends on mescc-tools and a previously compiled mes.M1
|
||||
seed. Likewise, tcc-boot depends on a precompiled tcc-seed. Also,
|
||||
tcc-boot uses a heavily patched version of the tcc sources.
|
||||
|
||||
Mes 0.13 is the first release that can bootstrap a fairly functional
|
||||
tcc-boot. This bootstrapped tcc passes 67/68 C tests that were created
|
||||
for MesCC. It can compile a version if itself where float, long long
|
||||
and bitfield are patched out...but linking fails. This amazing
|
||||
compiler can now be played with by doing something like
|
||||
|
||||
--8<---------------cut here---------------start------------->8---
|
||||
git checkout wip-bootstrap
|
||||
make
|
||||
./pre-inst-env guix build tcc-boot # may take ~2h
|
||||
./pre-inst-env guix environment --ad-hoc tcc-boot
|
||||
mes-tcc --help #duck and run
|
||||
--8<---------------cut here---------------end--------------->8---
|
||||
|
||||
The next big effort will be to make this mes-tcc fully functional and
|
||||
integrate this with GuixSD. To give you a taste of that,
|
||||
here's latest bug I'm currently looking at (pretty printed comments
|
||||
are only added when Guile runs MesCC, the problem is in LEA)
|
||||
|
||||
--8<---------------cut here---------------start------------->8---
|
||||
$ diff -u ../mes-seed/mes.M1 src/mes.M1
|
||||
--- ../mes-seed/mes.M1 2018-05-01 18:49:37.312162270 +0200
|
||||
+++ src/mes.M1 2018-05-01 19:49:40.774770406 +0200
|
||||
@@ -35805,12 +33091,11 @@
|
||||
call32 %strcpy
|
||||
add____$i8,%esp !0x8
|
||||
test___%eax,%eax
|
||||
- # strcpy(buf + strlen(buf), "/mes/");
|
||||
- push___$i32 &_string_reader_read_list_266
|
||||
+ push___$i32 &_string_reader_read_list_265
|
||||
mov____%ebp,%eax
|
||||
- add____$i32,%eax %0x-200
|
||||
+ add____$i32,%eax %0x-800
|
||||
push___%eax
|
||||
- lea____0x32(%ebp),%eax %0x-200
|
||||
+ lea____0x32(%ebp),%eax %0x-800
|
||||
push___%eax
|
||||
call32 %strlen
|
||||
add____$i8,%esp !0x4
|
||||
--8<---------------cut here---------------end--------------->8---
|
||||
|
||||
We also need to remove some shortcuts that we took, most notably:
|
||||
mes-seed[3]. This seed consists of 1MB of M1 code. mes.M1 is
|
||||
produced by compiling mes.c using MesCC, the C compiler written in
|
||||
(Guile) Scheme that comes with Mes. Although that's really terrible,
|
||||
it's probably a big step forward: currently GuixSD uses ~250MB of
|
||||
binary seed: the bootstrap binaries.
|
||||
|
||||
The plan is to replace the mes.M1 seed with mes.M2 and compile this
|
||||
new mes.M2 seed using the brand new M2-Planet[2]. M2 is basically
|
||||
simple C with structs, without preprocessor. This will reduce the
|
||||
seed size by a factor of 10 while making it much more readable.
|
||||
|
||||
An excerpt of the TODO I keep in Mes' BOOTSTRAP document
|
||||
|
||||
--8<---------------cut here---------------start------------->8---
|
||||
* TODO
|
||||
** have tcc-boot's mes-tcc compile a fully functional tcc
|
||||
*** mescc: fix unknown bug.
|
||||
*** mescc: support function-static.
|
||||
*** mescc: support/grok global static.
|
||||
*** mescc: support unsigned comparison, arithmetic.
|
||||
*** mescc: support long long (do we need long long to get long long in tcc)?
|
||||
*** mescc: support bitfield (do we need bitfield to get bitfield in tcc)?
|
||||
*** mescc: support float (do we need float to get float in tcc)?
|
||||
** have bootstrapped tcc compile gcc-4.7
|
||||
** remove or upstream patches from tcc-boot
|
||||
** prepare src/mes.c for M2-Planet[2] transpiler
|
||||
** integrate with GuixSD
|
||||
** x86_64, arm, the Hurd
|
||||
--8<---------------cut here---------------end--------------->8---
|
||||
|
||||
Greetings,
|
||||
janneke
|
||||
|
||||
[0] http://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-bootstrap
|
||||
[1] https://gitlab.com/janneke/mes
|
||||
[2] https://github.com/oriansj/m2-planet
|
||||
[3] https://gitlab.com/janneke/mes-seed
|
||||
Loading…
Add table
Add a link
Reference in a new issue