unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Jan Nieuwenhuizen <janneke@gnu.org>
To: guile-user@gnu.org
Cc: guix-devel@gnu.org, rb-general@lists.reproducible-builds.org,
	epsilon-devel@gnu.org, bootstrappable@freelists.org
Subject: Mes 0.12 released
Date: Sun, 08 Apr 2018 14:48:23 +0200	[thread overview]
Message-ID: <87y3hxyico.fsf@gnu.org> (raw)

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 Ccc-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%25201.5%2520Programmers%2520Manual.pdf
[11] https://github.com/oriansj/stage0

-- 
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.com

             reply	other threads:[~2018-04-08 12:48 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-08 12:48 Jan Nieuwenhuizen [this message]
2018-04-08 15:25 ` Mes 0.12 released Mike Gran

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87y3hxyico.fsf@gnu.org \
    --to=janneke@gnu.org \
    --cc=bootstrappable@freelists.org \
    --cc=epsilon-devel@gnu.org \
    --cc=guile-user@gnu.org \
    --cc=guix-devel@gnu.org \
    --cc=rb-general@lists.reproducible-builds.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).