Prepare for 0.1 release: update READMEs.
authorJan Nieuwenhuizen <janneke@gnu.org>
Sat, 15 Oct 2016 09:54:24 +0000 (11:54 +0200)
committerJan Nieuwenhuizen <janneke@gnu.org>
Sat, 15 Oct 2016 09:54:24 +0000 (11:54 +0200)
* NEWS: New file.
* AUTHORS: Add info about files taken from Scheme48.
* HACKING: Update with info from TODO.
* TODO: Remove.

AUTHORS
HACKING
NEWS [new file with mode: 0644]
README
TODO [deleted file]

diff --git a/AUTHORS b/AUTHORS
index 6789ebccf2ca225003c22935f97277d3d66fdcb8..674b00431c9ae14e5d4a76e7774a9403d36c561f 100644 (file)
--- a/AUTHORS
+++ b/AUTHORS
@@ -1 +1,14 @@
 Jan Nieuwenhuizen <janneke@gnu.org>
+Main author
+All files except the files listed below
+
+Based on Scheme48's scheme/alt
+module/mes/record.mes
+module/mes/syntax.mes
+module/srfi/srfi-9.mes
+
+Based on Guile ECMAScript
+module/language/c/lexer.mes
+
+Included verbatim from gnulib
+build-aux/gitlog-to-changelog
diff --git a/HACKING b/HACKING
index a3cb933c9b09347abd0c4ab6dfa7ba54328e8bc3..7aba3451a3caecefd49d6a1b6b88ec36aecba3a1 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -1,9 +1,65 @@
 -*-mode:org-*-
 
-* Booting from LISP-1.5 into Mes
+* Fully source-based bootstrapping
+
+** R5RS-like scheme interpreter
+This first part is prototyped in C by the mes.c core and Scheme
+bootstrap code in module/.  Of course, while mes.c is pretty small it
+cannot serve as a fully source-based solution.
+
+The initial idea was to have the minimal core support LISP-1.5 (or
+something very close to that as a tribute to John McCarthy) and extend
+eval/apply from LISP-1.5 source with define, define-macro etc. and
+metamorphose into R6RS.  It seemed to work but performance of the
+LISP-intepreted RRS was so bad (~1000x slower than initial LISP-1.5)
+that this track was abandoned after the initial ANNOUNCE.
+
+The route changed trying strike a balance between core size and
+performance: still writing as much as possible in Scheme, but having a
+mescc compiler that takes not more than some seconds to run.
+
+Now that the important bits of R5RS are done and R6RS's syntax-case
+comes in scope, mes.c has grown into ~1500LOC, some effort must
+probably be directed into making that smaller.
+
+** Move mes.c into hex?
+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
+bootstrap into Scheme.
+
+** Rewrite mes.c and generate hex?
+Another idea (thanks Rutger!) is to rewrite the mes.c core in a
+C/Assembly variant and have mescc produce the simple, annotated
+bootstrap binary.
+
+** R6RS's syntax-case
+
+Having syntax-case should enable Mes to run [[https://savannah.gnu.org/projects/nyacc][nyacc]], which comes with a
+full C parser.
+
+*** Get Andre van Tonder's portable syntax-case up.
+    + This would avoid the psyntax.ss -> psyntax.pp -> psyntax.ss
+      bootstrap problem with an elegantly small implementation.
+
+    - Does this support the idea of a minimal mes.c core, or is too
+      much Scheme support required in the core?
+*** Get a version of portable psyntax.pp up.
+    + Fully standard complient R6RS macros.
+    + Minimal mes.c core required (not even quasiquote?).
+    - Sloooowwwww with intepreter?
+
+* Bugs
+** Garbage collection?
+Mes is using malloc without freeing anything, memory is patient these
+days :-)
+** find/fix hygiene problem: see module/mes/match.scm ;; X vs x
+**
+** Actually do something useful, build: [[https://en.wikipedia.org/wiki/Tiny_C_Compiler][Tiny C Compiler]]
+
+* OLD: Booting from LISP-1.5 into Mes
 
 Mes started out experimenting with booting from a hex-coded minimal
-LISP-1.5 (prototype in mes.c), into an intepreted full-flegded Scheme.
+LISP-1.5 (prototype in mes.c), into an almost-RRS Scheme.
 
 When EOF is read, the LISP-1.5 machine calls loop2 from loop2.mes,
 which reads the rest of stdin and takes over control.  The functions
@@ -14,30 +70,40 @@ While this works, it's amazingly slow.  We implemented a full reader
 in mes.c, which makes running mes:apply-env mes:eval somewhat
 bearable, still over 1000x slower than running mes.c.
 
-Bootstrapping has been removed and mes.c implements enough of R3RS to
+Bootstrapping has been removed and mes.c implements enough of RRS to
 run a macro-based define-syntax and syntax-rules.
 
 loop.mes and mes.mes are unused and lagging behind.  Probably it's not
 worth considering this route without a VM.  GNU Epsilon is taking the
 more usual VM-route to provide multiple personas.  While that sounds
-very cool, Lisp/Scheme, bootstrapping and trusted binaries are
-probably not in scope as there is no mention of such things; only ML
-is mentioned while Guile is used for bootstrapping.
+neat, Lisp/Scheme, bootstrapping and trusted binaries are probably not
+in scope as there is no mention of such things; only ML is mentioned
+while Guile is used for bootstrapping.
 
-mes.c is ~1200 lines which seems much too big to start translating it
-to assembly/hex.
+mes.c is ~1500 lines (~10,000LOC Assembly) which seems much too big to
+start translating it to assembly/hex.
 
-* Garbage collection
-Mes is using malloc without freeing anything, memory is patient these
-days :-)
+* Assorted ideas and info 
+** C parser/compiler
+*** [[https://savannah.gnu.org/projects/nyacc][nyacc]]
+*** PEG: [[http://piumarta.com/software/peg/][parse C using PEG]]
+*** [[https://en.wikipedia.org/wiki/Tiny_C_Compiler][Tiny C Compiler]]
+*** [[http://www.t3x.org/subc/index.html][Sub C]]
+*** [[https://groups.google.com/forum/#!topic/comp.lang.lisp/VPuX0VsjTTE][C intepreter in LISP/Scheme/Python]]
+
+** C assembler/linker
+*** [[http://www.tldp.org/HOWTO/Assembly-HOWTO/linux.html][Assembly HOWTO]]
+*** System call clue bat
+Basically, you issue an int 0x80, with the __NR_syscallname number
+(from asm/unistd.h) in eax, and parameters (up to six) in ebx, ecx,
+edx, esi, edi, ebp respectively.
+*** ELF
+7f 45 4c 46
+*** [[http://www.muppetlabs.com/~breadbox/software/tiny/][Small ELF programs]]
+*** [[http://www.cirosantilli.com/elf-hello-world/][Elf hello world]]
+
+** RNRS
+*** [[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-452.pdf][RRS - Revised Report on Scheme]]
 
-* The [GuixSD] boostrap binaries
-** Run a C parser on Mes
-*** Run simple PEG on Guile
-*** Run simple PEG on Mes
-*** Find/port a PEG C and parse minimal C program
-*** Generate an executable from this C-AST
-*** Find a tiny C compiler that can compile gcc
-** Run lalr on Mes
-*** Get paren.scm test running
-*** Translate cgram.y into lalr, generate AST
diff --git a/NEWS b/NEWS
new file mode 100644 (file)
index 0000000..95cfcd4
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,30 @@
+                                                              -*- org -*-
+#+TITLE: Mes NEWS – history of user-visible changes
+#+STARTUP: content hidestars
+
+Copyright © 2016 Jan 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.
+
+Please send Mes bug reports to janneke@gnu.org.
+
+* Changes in 0.1 (since progress report #2)
+
+** Core
+*** expand_macro is now a separate function.
+** Language
+*** Mes now provides a subset of R5RS.
+*** Mes now provides let-syntax.
+*** Mes now provides match.
+** 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 of (e.g. scripts/mescc.mes) has been improved by a factor of 40.
+*** Symbols are now truly unique.
diff --git a/README b/README
index 2d776db4ca4a5836b6891b8f14212d8601872a4a..dd8b1f8b7d178e0c3d0e76b1b3f199b10d3c6664 100644 (file)
--- a/README
+++ b/README
@@ -1,41 +1,35 @@
+                                                              -*- org -*-
 Mes -- Maxwell Equations of Software
 
-Mes is inspired by The Maxwell Equations of Software -- John McCarthy page 13
-http://www.softwarepreservation.org/projects/LISP/book/LISP%201.5%20Programmers%20Manual.pdf
+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
+R5RS Scheme.
 
-Its aim is to have GuixSD boostrap from a minimal trusted binary into
-Scheme.  The strategy is to use OrianJs self-hosting hex assembler to
-write a minimal LISP called MES to bootstrap a full fledged Scheme,
-written in MES.
+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.
+
+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.
 
 Mes is free software, it is distributed unde the terms of the GNU
 General Public Licence version 3 or later.  See the file COPYING.
 
-Current targets.
-
-* make check
-
-* C compiler
-
-   make mescc
-   make guile-mescc
-
-from there, work on mescc.scm, main.c.
-
-* syntax-case: simple portable version by Andre van Tonder
+* Get it
 
-  TODO
+   git clone https://gitlab.com/janneke/mes
 
-* syntax-case: using portable psyntax.pp
+* Build it (see INSTALL for full instructions)
 
-   make psyntax
+   ./configure
+   make all
+   make check
 
-* syntax-case using define-macro
+* REPL it
 
-   make syntax-case
-   make guile-syntax-case
+   scripts/repl.mes
 
-* PEG
+* Mescc compiler
 
-   make peg
-   make guile-peg
+   scripts/mescc.mes doc/examples/main.c
diff --git a/TODO b/TODO
deleted file mode 100644 (file)
index 76dd3a9..0000000
--- a/TODO
+++ /dev/null
@@ -1,96 +0,0 @@
--*-mode:org-*-
-
-* minimal bootstrap binary, via Scheme, into C compiler/linker
-** core: mes.c
-*** make mes.c smaller
-**** replace mes.c:quasiquote by quasiquote.mes
-***** SPEEDUP
-**** cleanup environment/closures
-*** make mes.c faster
-*** use GC
-*** move from C to hex/assembly
-
-** bugs
-See bugs/
-
-*** find/fix hygiene problem: see lib/match.scm ;; X vs x
-Is it in let, define-syntax, match or intrinsically in define-macro?
-
-** parse C using PEG
-http://piumarta.com/software/peg/
-*** Simple Guile test:
-    make guile-peg
-*** PEG on Mes does not work yet:
-    make peg
-**** syntax-case
-***** portable syntax-case Andre van Tonder
-***** psyntax.pp
-***** hook-up sc-expand, see guile-1.0?: scheme:eval-transformer
-Find out how to hook-up sc-expand in eval/apply.
-
-** parse C using LALR
-*** Translate cgram.y into lalr, generate AST
-*** C grammar in lex/yacc
-https://github.com/rabishah/Mini-C-Compiler-using-Flex-And-Yacc
-https://www.lysator.liu.se/c/ANSI-C-grammar-y.html
-http://www2.cs.uidaho.edu/~jeffery/courses/nmsu/370/cgram.y
-https://github.com/ProgramLeague/C-Compilerp
-*** parsing in scheme
-ftp://ftp.cs.indiana.edu/pub/scheme-repository/code/lang/cgram-ll1
-** Tiny C
-https://en.wikipedia.org/wiki/Tiny_C_Compiler
-** Sub C
-http://www.t3x.org/subc/index.html
-**
-https://groups.google.com/forum/#!topic/comp.lang.lisp/VPuX0VsjTTE
-*** any, each?
-
-
-* assorted info
-**  ASM
-http://www.tldp.org/HOWTO/Assembly-HOWTO/linux.html
-
-Basically, you issue an int 0x80, with the __NR_syscallname number
-(from asm/unistd.h) in eax, and parameters (up to six) in ebx, ecx,
-edx, esi, edi, ebp respectively.
-
-** ELF
-7f 45 4c 46
-
-http://www.muppetlabs.com/~breadbox/software/tiny/
-
-http://www.cirosantilli.com/elf-hello-world/
-
-** SCM
-** RNRS
-   http://www.scheme-reports.org/
-*** Scheme
-ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-349.pdf
-*** RRS
-ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-452.pdf
-
-http://groups.csail.mit.edu/mac/ftpdir/scm/OLD/scm2e.tar.Z
-wget http://groups.csail.mit.edu/mac/ftpdir/scm/OLD/scm3c13.tar.Z
-http://groups.csail.mit.edu/mac/ftpdir/scm/OLD/scm4a5.tar.Z
-
-http://groups.csail.mit.edu/mac/ftpdir/scm/OLD/scm5a1.tar.gz --> syntax-rules
-http://groups.csail.mit.edu/mac/ftpdir/scm/OLD/scm5c0.tar.gz
-
-
-define-
-
-http://www.cs.indiana.edu/chezscheme/syntax-case/old-psyntax.html
-
-http://www.cs.indiana.edu/chezscheme/syntax-case/
-
-1.4..2.9:
-http://groups.csail.mit.edu/mac/ftpdir/siod/
-
-http://groups.csail.mit.edu/mac/ftpdir/s48/archive/scheme48-0-21.tar.gz
-
-Macros:
-   http://www.bcl.hamilton.ie/~barak/teach/F97/CS257/macros.html
-
-
-syntax-case/syntax-rules in clojure
-https://github.com/qbg/syntax-rules/blob/master/src/qbg/syntax_rules.clj