doc: Release udpate.
[mes.git] / HACKING
diff --git a/HACKING b/HACKING
index 9708f3fa1dd9c4d2b79a300de99076a8e5437171..1c432e18bce632e31b4b860d285f37fd3053e7e4 100644 (file)
--- a/HACKING
+++ b/HACKING
@@ -10,12 +10,15 @@ development.
 ** DEVELOPMENT BUILD
 To help development we assume ./configure sets these variables for make
 
 ** DEVELOPMENT BUILD
 To help development we assume ./configure sets these variables for make
 
-   CC    -- gcc
-   CC32  -- i686-unknown-linux-gnu-gcc (or on x86, also gcc)
-   GUILE -- guile
-   MES   -- unset
-
-Mes is supposed to serve as a full equivalent for GUILE, however mes is much, much
+   CC     -- gcc
+   CC32   -- i686-unknown-linux-gnu-gcc (or on x86, also gcc)
+   GUILE  -- guile
+   HEX2   -- hex2
+   MES    -- unset
+   M1     -- M1
+   PREFIX -- ""
+
+Mes is supposed to serve as a full equivalent for Guile, however mes is much, much
 slower than guile.  That's why we usually don't use mes during development.
 
 gcc is used to verify the sanity of our C sources.
 slower than guile.  That's why we usually don't use mes during development.
 
 gcc is used to verify the sanity of our C sources.
@@ -23,59 +26,71 @@ gcc is used to verify the sanity of our C sources.
 i686-unknown-linux-gnu-gcc is used to compare hex/assembly, to test
 the gcc variant of mlbic: mlibc/libc-gcc.c and steal ideas.
 
 i686-unknown-linux-gnu-gcc is used to compare hex/assembly, to test
 the gcc variant of mlbic: mlibc/libc-gcc.c and steal ideas.
 
-guile is used to develop mescc, the C compiler in Scheme that during
+Guile is used to develop mescc, the C compiler in Scheme that during
 bootstrapping will be executed by mes.
 
 ** BOOTSTRAP BUILD
 In bootstrap mode, we don't have gcc (CC), we don't have pa 32 bit gcc
 bootstrapping will be executed by mes.
 
 ** BOOTSTRAP BUILD
 In bootstrap mode, we don't have gcc (CC), we don't have pa 32 bit gcc
-(CC32), we have no guile (GUILE)...but we should have a bootstrap mes
-(MES).  FIXME.
+(CC32), we have no guile (GUILE)...but we should have hex2, M1, and
+FIXME: mes.M1.
 
 mes is built from src/*.c and some out/src/*.h files that are snarfed from
 src/*.c by build-aux/mes-snarf.scm.
 
 
 mes is built from src/*.c and some out/src/*.h files that are snarfed from
 src/*.c by build-aux/mes-snarf.scm.
 
-Also, during bootstrap we don't have make.  Running `make build-scripts'
-generates several recipies of sh build scripts in out/.
+Running ./make.scm produces a `script' file.
 
 * ROADMAP
 ** TODO 
 
 * ROADMAP
 ** TODO 
-*** release 0.8
-  - produce ELF_sym and ELF_str tables from hex2; nicer for objdump -d, gdb
+*** release 0.12
+  - mescc: compile a mes-tcc that can compile gcc-4.7.
 *** release 0.x, unsorted
 *** release 0.x, unsorted
-  - simplify [at least the bootstrap] build process.
-  - seamless connection to stage0.
-  - mescc: compile tcc.c.
+  - mescc: refactor type(/ptr?) system; expr->type and ast-type->type.
+  - mescc: refactor initializers.
+  - mescc: record and support function types, and thus foo ()->bar.
+  - mescc: refactor switch statement to support unpatched tinycc.
+  - mes/mescc: bootstrap a minimal-Guile (libguile/eval.c,ice-9/eval.scm).
+  - mescc: have mes-tcc pass all scaffold/tests, scaffold/tinycc tests.
+  - mescc: compile a mes-tcc that can compile gcc-4.7.
+  - mescc: refactor switch; support heterogeneous switch case.
+  - mescc: support sizeof any expr.
+  - mescc: support function-static.
+  - mescc: support/grok global static.
   - mescc: support unsigned comparison, arithmetic.
   - mescc: support unsigned comparison, arithmetic.
+  - mescc: support long long.
   - mescc: support bitfields.
   - mescc: support bitfields.
-  - mescc: support unions.
-  - mescc: support anonymous unions.
-  - mescc: refactor compiler.mes, esp. (decl ..) bits.
+  - mescc: support floats.
+  - mescc: some success with 8cc,pcc,guile/libguile/eval.c.
+  - build: guile/guix/make.scm: add file-types, intermediate, hash all dependencies
+  - build: make.scm: imperative->declaritive
+  - hex2: produce ELF_sym and ELF_str tables from hex2; nicer for objdump -d, gdb (in mescc-tools?)
+  - compile src/mes.c with M2-Planet.
   - rewrite src/mes.c in stage0's stage2 LISP.
   - rewrite src/mes.c in stage0's stage2 LISP.
-  - and/or: rewrite src/mes.c in [annotated] assembly.
-  - and/or: rewrite src/mes.c in annotated hex2.
+  - and/or: rewrite src/mes.c M1
   - and/or: connect to GNU Epsilon's VM
   - and/or: compile Scheme to C, rewrite Mes.c into Mes.scm.
   - and/or: connect to GNU Epsilon's VM
   - and/or: compile Scheme to C, rewrite Mes.c into Mes.scm.
-  - real module support, bonus for supporting Guile's define-module/define-public syntax
-  - get full source syntax-case up (Andre van Tonder?) OR drop
-    psyntax/syntax-case and rewrite Nyacc without syntax-case+R7RS Ellipsis
-  - support regexp OR rewrite Nyacc without regexps
-  - split-off Guile C compiler as standalone Guile project, still
-    respecting no-syntax-case bootstrap requirement
-*** Compile the [[https://en.wikipedia.org/wiki/Tiny_C_Compiler][Tiny C Compiler]]
-  - build tcc (tinycc)
+  - real module support, bonus for supporting Guile's define-module/define-public syntax.
+  - get full source syntax-case up (Andre van Tonder?) OR drop it.
+    psyntax/syntax-case and rewrite Nyacc without syntax-case+R7RS Ellipsis.
+  - support regexp OR rewrite Nyacc without regexps.
+  - split-off MesCC as as standalone Guile C compiler project.
 *** release 1.0
 *** release 1.0
-  - work to replace GuixSD's bootstrap binaries for x86
+  - replace GuixSD's bootstrap binaries for x86.
+  - add x86_64, replace GuixSD's bootstrap binaries for x86_64.
   - more architectures?
 ** DONE
   - more architectures?
 ** DONE
-** 0.7: Mescc supports -E, -c, -o options, include more complete set of header files,
-enough to work on compiling tinycc's tcc.c albeit a somewhat modified version.
-** 0.6: Work with unmodified, unbundled Nyacc; compile 33/55 tinycc's tests/test2 suite.
-** 0.5: Mutual self-hosting Scheme interpreter and C compiler: mes.c and mescc,
-        Support call-with-current-continuation, refactor catch/throw
-** 0.4: Support Nyacc, Gcc-compiled Mes compiles minimal main.c using nyacc
-** 0.3: Garbage collector
-** 0.2: Support psyntax
-** 0.1: Mes eval/apply feature complete; support syntax-rules, compile main.c using LALR, dump ELF
+*** 0.11: MesCC now compiles a mes-tcc that passes 41/69 of mescc's C tests.
+*** 0.10: Mescc now compiles a mes-tcc that compiles a trivial C to a running a.out.
+*** 0.9: Mescc now writes M1 macro assembly files and compiles tcc.
+*** 0.8: Mescc now writes object files in stage0's labeled hex2 format.
+*** 0.7: Mescc supports -E, -c, -o options, include more complete set of header files,
+eenough to work on compiling tinycc's tcc.c albeit a somewhat modified version.
+*** 0.6: Work with unmodified, unbundled Nyacc; compile 33/55 tinycc's tests/test2 suite.
+*** 0.5: Mutual self-hosting Scheme interpreter and C compiler: mes.c and mescc,
+         Support call-with-current-continuation, refactor catch/throw
+*** 0.4: Support Nyacc, Gcc-compiled Mes compiles minimal main.c using nyacc
+*** 0.3: Garbage collector
+*** 0.2: Support psyntax
+*** 0.1: Mes eval/apply feature complete; support syntax-rules, compile main.c using LALR, dump ELF
 
 * Bugs
 ** eval_apply/gc + Nyacc bug
 
 * Bugs
 ** eval_apply/gc + Nyacc bug
@@ -88,7 +103,8 @@ may [un]cover the bug.  So there is probably some eval_apply-construct
 that Nyacc uses, possiblby indirectly via with-fluid, like (call/cc,
 call-with-current-continuation), that breaks when GC triggers at the
 wrong time.
 that Nyacc uses, possiblby indirectly via with-fluid, like (call/cc,
 call-with-current-continuation), that breaks when GC triggers at the
 wrong time.
-** mescc can only compile itself, it cannot compile tcc, gcc or guile
+** mescc can only compile itself, it cannot full-functionally compile tcc, gcc or guile
+** mescc: 7n-struct-struct-array.c:  struct file f = {"first.h"};
 ** mes.mes cannot read sexps, only --dump's, mes.mes cannot --dump
 ** Bootstrap binary mes is too big and opaque to be considered source
 68kB ELF binary which can be disassembled (objdump -d mes.mes).
 ** mes.mes cannot read sexps, only --dump's, mes.mes cannot --dump
 ** Bootstrap binary mes is too big and opaque to be considered source
 68kB ELF binary which can be disassembled (objdump -d mes.mes).
@@ -213,6 +229,7 @@ support all C11 language features while keeping the code as small and
 simple as possible.
 *** pcc
 *** early GCC?
 simple as possible.
 *** pcc
 *** early GCC?
+https://miyuki.github.io/2017/10/04/gcc-archaeology-1.html
 *** [[http://tack.sourceforge.net/][ack]]
 <rain1> it may be possible to compile like this:  mes |> ack |> pcc |> tcc |>
         gcc 4.7.4 |> gcc later version... up to modern
 *** [[http://tack.sourceforge.net/][ack]]
 <rain1> it may be possible to compile like this:  mes |> ack |> pcc |> tcc |>
         gcc 4.7.4 |> gcc later version... up to modern