[bootstrappable] Re: Can Guile be bootstrapped from source without psyntax-pp.scm?

  • From: Alex Vong <alexvong1995@xxxxxxxxx>
  • To: Mark H Weaver <mhw@xxxxxxxxxx>
  • Date: Fri, 07 Jul 2017 22:00:24 +0800

Hi Mark,

Mark H Weaver <mhw@xxxxxxxxxx> writes:

Hi Alex,

Alex Vong <alexvong1995@xxxxxxxxx> writes:

Recently, I've read the chapter on Macros in Guile's manual. The manual
says that Guile's expander originated from that of Chez Scheme's and
that version was portable to other schemes as well. So I search the
Internet and find it[0]. The website states that the expander needs an
expanded version of itself for bootstrapping, i.e. psyntax.ss needs
psyntax.pp for bootstrapping.

After playing for awhile, I realize the relationship of Guile's
psyntax.scm and psyntax-pp.scm is exactly analogus. One needs an
expanded version of psyntax.scm, i.e. psyntax-pp.scm for bootstrapping.

Does this mean Guile is not bootstrappable from source only?

That's correct.  psyntax-pp.scm is not source code, and it is needed to
bootstrap Guile.  However, I made an effort some years ago to make
psyntax-pp.scm far smaller and more readable than the corresponding file
from upstream psyntax.  See:

  
https://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=72ee0ef71b9a0514874976cdcf3ea9d5333db4b1
  
https://git.savannah.gnu.org/cgit/guile.git/commit/?h=stable-2.0&id=1af6d2a717f499564fbbc297c79e00ac14b0dcf9

I see. So it used to be worse --- several millions LOC. Now it is only
~3000, which is shorter than Emacs's bytecomp.el

At this point, I believe it would be quite feasible for a single hacker
to audit our psyntax-pp.scm and compare it to psyntax.scm within a
reasonable time frame.  Furthermore, when we make local changes to
psyntax.scm, the corresponding changes to psyntax-pp.scm are localized
and quite easy to audit as well, so the full audit need not be repeated.

It is really good that small change in source --> small change in
binary. A fancy way of saying it: the map between source and binary is
in some sense "continuious".

Having said this, I agree that it would be better if psyntax.scm were
written in such a way that it could be bootstrapped without the use of
itself.  Maybe some day we'll rewrite it to make it so.

Agree.

For future interested readers:

I can imagine one way of doing it: First implement a low-level hygienic
macro expander without using macros and then write the syntax-case
expander using low-level macros.

To get started, you can watch the "Let's Build a Hygienic Macro Expander
— Strange Loop 2016, Matthew Flatt" video.

      Mark

Cheers,
Alex

Attachment: signature.asc
Description: PGP signature

Other related posts: