Update documentation.
* HACKING: Update status, some ideas where to go next. * NEWS: Update status. * README: Update. * doc/ANNOUNCE: Move from top. * doc/ANNOUNCE-2: Likewise. * doc/ANNOUNCE-0.3: New file.
This commit is contained in:
parent
d0f2e1cabf
commit
67c2f1537b
33
HACKING
33
HACKING
|
@ -18,26 +18,36 @@ The route changed, trying to strike a balance between core size and
|
||||||
performance: still writing as much as possible in Scheme but having a
|
performance: still writing as much as possible in Scheme but having a
|
||||||
mescc compiler that takes not more than some seconds to run.
|
mescc compiler that takes not more than some seconds to run.
|
||||||
|
|
||||||
Now that portable R6RS syntax-case runs and mes.c has grown to
|
Now that we have [[https://github.com/schemeway/lalr-scm][Dominique Boucher's LALR]], a [[https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html][Pre-R6RS portable
|
||||||
~1200LOC with another ~300LOC of optional C code, some effort must
|
syntax-case]] with R7RS ellipsis, [[http://www.nongnu.org/nyacc/][Nyacc]] and [[https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html][Guile's PEG]] parsers, it's
|
||||||
probably be directed into making that smaller.
|
time to start doing something useful.
|
||||||
|
|
||||||
** Move mes.c into hex?
|
* Bugs
|
||||||
|
** The Scheme reader is very slow.
|
||||||
|
** Catch/throw are a syntax only hack for Nyacc.
|
||||||
|
** Fluids are a hack for Nyacc.
|
||||||
|
** Prototype mes.c depends on a C compiler.
|
||||||
|
*** Translate C-prototype mes.c into annotated hex?
|
||||||
One idea is to use OrianJ's amazing self-hosting [[https://github.com/oriansj/stage0][stage0]] hex assembler
|
One idea is to use OrianJ's amazing self-hosting [[https://github.com/oriansj/stage0][stage0]] hex assembler
|
||||||
and minimal bootstrap binaries and rewrite the mes.c core to directly
|
and minimal bootstrap binaries and rewrite the mes.c core to directly
|
||||||
bootstrap into Scheme.
|
bootstrap into Scheme.
|
||||||
|
|
||||||
** Rewrite mes.c and generate hex?
|
*** Rewrite mes.c in Schemy/Sexp-C and generate annotated hex?
|
||||||
Another idea (thanks Rutger!) is to rewrite the mes.c core in a
|
Another idea (thanks Rutger!) is to rewrite the mes.c core in a s-exp
|
||||||
C/Assembly variant and thave mescc produce the simple, annotated
|
C/Assembly variant and thave mescc produce the simple, annotated
|
||||||
bootstrap binary.
|
bootstrap binary.
|
||||||
|
|
||||||
* Bugs
|
** Actually do something useful
|
||||||
** Core is too fat
|
*** Rewrite the mescc compiler to work on the Nyacc AST.
|
||||||
mes.c is ~1500 lines (~10,000LOC Assembly) which seems much too big to
|
The proof-of-concept mescc compiler uses a simple, whoefully
|
||||||
start translating it to assembly/hex.
|
incomplete AST produced by a simplistic LALR-based C-parser.
|
||||||
|
*** Implement more bits of the compiler.
|
||||||
|
As Mes now runs Nyacc, and Guile runs the mescc compiler, this
|
||||||
|
compiler can be developed using Guile.
|
||||||
|
*** Compile mes.c using mescc.
|
||||||
|
A first milestone, next up is...
|
||||||
|
*** Compile the [[https://en.wikipedia.org/wiki/Tiny_C_Compiler][Tiny C Compiler]]
|
||||||
|
|
||||||
** Actually do something useful, build: [[https://en.wikipedia.org/wiki/Tiny_C_Compiler][Tiny C Compiler]]
|
|
||||||
* OLD: Booting from LISP-1.5 into Mes
|
* OLD: Booting from LISP-1.5 into Mes
|
||||||
|
|
||||||
Mes started out experimenting with booting from a hex-coded minimal
|
Mes started out experimenting with booting from a hex-coded minimal
|
||||||
|
@ -87,4 +97,3 @@ sc: http://sph.mn/content/3d3
|
||||||
*** [[http://www.scheme-reports.org/][Scheme Reports]]
|
*** [[http://www.scheme-reports.org/][Scheme Reports]]
|
||||||
*** [[ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-349.pdf][Scheme - Report on Scheme]]
|
*** [[ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-349.pdf][Scheme - Report on Scheme]]
|
||||||
*** [[ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-452.pdf][RRS - Revised Report on Scheme]]
|
*** [[ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-452.pdf][RRS - Revised Report on Scheme]]
|
||||||
|
|
||||||
|
|
53
NEWS
53
NEWS
|
@ -12,19 +12,58 @@ Please send Mes bug reports to janneke@gnu.org.
|
||||||
|
|
||||||
* Changes in 0.4 since 0.3
|
* Changes in 0.4 since 0.3
|
||||||
** Core
|
** Core
|
||||||
*** Smaller C-reader
|
*** 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
|
The C-reader needs only support reading of words and lists
|
||||||
(s-expressions), line-comments. Quoting, characters, strings,
|
(s-expressions), line-comments to read the initial [[file:module/mes/read-0.mes][Scheme reader]] which
|
||||||
block-comments are all handled by the Scheme reader later.
|
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 progam 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
|
** Language
|
||||||
*** Keywords are supported.
|
*** Minimal syntactic exception support for Nyacc.
|
||||||
|
*** Minimal syntactic fluids support for Nyacc.
|
||||||
|
*** Keywords are now supported.
|
||||||
*** Cond now supports =>.
|
*** Cond now supports =>.
|
||||||
*** Lambda* and define* are now supported.
|
*** Guile's optargs: lambda* and define* are now supported.
|
||||||
*** #;-comment is now supported.
|
*** #;-comments are now supported.
|
||||||
*** Non-nested #| |#-comment is now supported.
|
*** Non-nested #| |#-comments are now supported.
|
||||||
|
*** Quasisyntax is now supported.
|
||||||
*** R7RS syntax-rules with custom ellipsis, with-ellipsis are 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
|
** 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.
|
*** Closure is not a pair.
|
||||||
|
*** All standard characters are supported.
|
||||||
|
*** Mescc now also runs in Guile.
|
||||||
* Changes in 0.3 since 0.2
|
* Changes in 0.3 since 0.2
|
||||||
** Core
|
** Core
|
||||||
*** Number-based rather than pointer-based cells.
|
*** Number-based rather than pointer-based cells.
|
||||||
|
|
18
README
18
README
|
@ -11,10 +11,12 @@ Scheme, the next step for Mes is mescc: a C compiler/linker to
|
||||||
boostrap into GNU Gcc and GNU Guile, possibly via Tiny-CC.
|
boostrap into GNU Gcc and GNU Guile, possibly via Tiny-CC.
|
||||||
|
|
||||||
It currently has an interpreter written in C (mes) with Garbage
|
It currently has an interpreter written in C (mes) with Garbage
|
||||||
Collector (Jam Scraper), a library of loadable Scheme modules with
|
Collector (Jam Scraper), a library of loadable Scheme modules--
|
||||||
test suite just barely enough to support a simple REPL (repl.mes) and
|
notably [[https://github.com/schemeway/lalr-scm][Dominique Boucher's LALR]], [[https://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html][Pre-R6RS portable syntax-case]] with
|
||||||
a proof-of-concept c-compiler (mescc.mes) that produces an elf from
|
R7RS ellipsis, [[http://www.nongnu.org/nyacc/][Nyacc]] and [[https://www.gnu.org/software/guile/docs/master/guile.html/PEG-Parsing.html][Guile's PEG]] --and test suite just barely
|
||||||
the simplest of C files.
|
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: [[http://www.softwarepreservation.org/projects/LISP/book/LISP%25201.5%2520Programmers%2520Manual.pdf][LISP-1.5]] -- John
|
Mes is inspired by The Maxwell Equations of Software: [[http://www.softwarepreservation.org/projects/LISP/book/LISP%25201.5%2520Programmers%2520Manual.pdf][LISP-1.5]] -- John
|
||||||
McCarthy page 13.
|
McCarthy page 13.
|
||||||
|
@ -43,7 +45,13 @@ General Public Licence version 3 or later. See the file COPYING.
|
||||||
* Other
|
* Other
|
||||||
|
|
||||||
make check
|
make check
|
||||||
make guile-check
|
|
||||||
make mes-check
|
make mes-check
|
||||||
make paren
|
make paren
|
||||||
make mescc
|
make mescc
|
||||||
|
scripts/nyacc-calc.mes
|
||||||
|
scripts/nyacc.mes
|
||||||
|
|
||||||
|
make guile-check
|
||||||
|
make guile-mescc
|
||||||
|
guile/nyacc-calc.scm
|
||||||
|
scripts/nyacc.scm
|
||||||
|
|
99
doc/ANNOUNCE-0.3
Normal file
99
doc/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%25201.5%2520Programmers%2520Manual.pdf
|
Loading…
Reference in a new issue