mescc: Refactor type system: struct/enum fields: (name . <type>).
[mes.git] / doc / UPDATE-0.13
1 Subject: wip-bootstrap updated
2
3 I've updated the wip-bootstrap branch[0] for Mes[1] 0.13.  It has new
4 mes-boot and tcc-boot packages.  mes-boot is a bootstrap version of
5 Mes; it only depends on mescc-tools and a previously compiled mes.M1
6 seed.  Likewise, tcc-boot depends on a precompiled tcc-seed.  Also,
7 tcc-boot uses a heavily patched version of the tcc sources.
8
9 Mes 0.13 is the first release that can bootstrap a fairly functional
10 tcc-boot.  This bootstrapped tcc passes 67/68 C tests that were created
11 for MesCC.  It can compile a version if itself where float, long long
12 and bitfield are patched out...but linking fails.  This amazing
13 compiler can now be played with by doing something like
14
15 --8<---------------cut here---------------start------------->8---
16 git checkout wip-bootstrap
17 make
18 ./pre-inst-env guix build tcc-boot # may take ~2h
19 ./pre-inst-env guix environment --ad-hoc tcc-boot
20 mes-tcc --help  #duck and run
21 --8<---------------cut here---------------end--------------->8---
22
23 The next big effort will be to make this mes-tcc fully functional and
24 integrate this with GuixSD.  To give you a taste of that,
25 here's latest bug I'm currently looking at (pretty printed comments
26 are only added when Guile runs MesCC, the problem is in LEA)
27
28 --8<---------------cut here---------------start------------->8---
29 $ diff -u ../mes-seed/mes.M1 src/mes.M1
30 --- ../mes-seed/mes.M1  2018-05-01 18:49:37.312162270 +0200
31 +++ src/mes.M1  2018-05-01 19:49:40.774770406 +0200
32 @@ -35805,12 +33091,11 @@
33         call32 %strcpy
34         add____$i8,%esp !0x8
35         test___%eax,%eax
36 -                                       # strcpy(buf + strlen(buf), "/mes/"); 
37 -       push___$i32 &_string_reader_read_list_266
38 +       push___$i32 &_string_reader_read_list_265
39         mov____%ebp,%eax
40 -       add____$i32,%eax %0x-200
41 +       add____$i32,%eax %0x-800
42         push___%eax
43 -       lea____0x32(%ebp),%eax %0x-200
44 +       lea____0x32(%ebp),%eax %0x-800
45         push___%eax
46         call32 %strlen
47         add____$i8,%esp !0x4
48 --8<---------------cut here---------------end--------------->8---
49
50 We also need to remove some shortcuts that we took, most notably:
51 mes-seed[3].  This seed consists of 1MB of M1 code.  mes.M1 is
52 produced by compiling mes.c using MesCC, the C compiler written in
53 (Guile) Scheme that comes with Mes.  Although that's really terrible,
54 it's probably a big step forward: currently GuixSD uses ~250MB of
55 binary seed: the bootstrap binaries.
56
57 The plan is to replace the mes.M1 seed with mes.M2 and compile this
58 new mes.M2 seed using the brand new M2-Planet[2].  M2 is basically
59 simple C with structs, without preprocessor.  This will reduce the
60 seed size by a factor of 10 while making it much more readable.
61
62 An excerpt of the TODO I keep in Mes' BOOTSTRAP document
63
64 --8<---------------cut here---------------start------------->8---
65 * TODO
66 ** have tcc-boot's mes-tcc compile a fully functional tcc
67 *** mescc: fix unknown bug.
68 *** mescc: support function-static.
69 *** mescc: support/grok global static.
70 *** mescc: support unsigned comparison, arithmetic.
71 *** mescc: support long long (do we need long long to get long long in tcc)?
72 *** mescc: support bitfield (do we need bitfield to get bitfield in tcc)?
73 *** mescc: support float (do we need float to get float in tcc)?
74 ** have bootstrapped tcc compile gcc-4.7
75 ** remove or upstream patches from tcc-boot
76 ** prepare src/mes.c for M2-Planet[2] transpiler
77 ** integrate with GuixSD
78 ** x86_64, arm, the Hurd
79 --8<---------------cut here---------------end--------------->8---
80
81 Greetings,
82 janneke
83
84 [0] http://git.savannah.gnu.org/cgit/guix.git/log/?h=wip-bootstrap
85 [1] https://gitlab.com/janneke/mes
86 [2] https://github.com/oriansj/m2-planet
87 [3] https://gitlab.com/janneke/mes-seed