Hi all, This guile-vm update pretty much lets guile-vm compile itself. There are a couple of caveats: namely macros that unquote in scheme values don't work, and compiling modules that depend on compiled modules that export syncase macros won't work.
The first is a common idiom for avoiding hygiene problems in Guile, but is uncompilable. The second is a byproduct of how psyntax.ss chooses to expand macros: $ guile guile> (use-modules (ice-9 syncase)) guile> (syncase '(define-syntax ppat ... (syntax-rules (_ quote unquote) ... ((_ v _ kt kf) kt) ... ((_ v () kt kf) (if (null? v) kt kf)) ... ((_ v (quote lit) kt kf) ... (if (equal? v (quote lit)) kt kf)) ... ((_ v (unquote var) kt kf) (let ((var v)) kt)) ... ((_ v (x . y) kt kf) ... (if (pair? v) ... (let ((vx (car v)) (vy (cdr v))) ... (ppat vx x (ppat vy y kt kf) kf)) ... kf)) ... ((_ v lit kt kf) (if (equal? v (quote lit)) kt kf)))) ... ) $1 = (void) So really, we are left with no information to write into the file, although the side effects do persist during compilation. Perhaps there is a better way to do this, but I suspect it involves compilation phases, which would have to be linked to whole-module compiles, I think. In the meantime, modules which export syncase macros probably shouldn't be compiled. Defmacros do not have this problem. Ludovic commented recently (can't reply, because my mail setup is a bit borked atm, moving servers) about macro expansion. My perspective is this: existing Guile code is much like Common Lisp in its compilation model. We should support compilation of existing code using this model: eval-when and such things. Phased compilation a la r6rs is also interesting, but should be implemented once phase 1 works. Use-syntax is not well-suited to repurposing, as it already has a meaning, although its semantics are not very good. We would do better to implement r6 library syntax, which has much better defined semantics than anything we could do. It also allows us to keep our existing dynamic repl semantics. Ludovic also mentioned the unusability of glil-pprint or whatever that was. I normally just use the guile-vm repl's compile and disassemble meta-commands, which is why I haven't seen it. I haven't fixed that pprint yet. Comments appreciated, regarding macro expansion, or the changes to the semantics of `link', or whatever! More than anything, check it out and give it a try: $ ./env guile guile> (use-modules (system repl repl)) (start-repl 'scheme) ... do your reply thing Andy The following changes since commit 0a5db6e11d0bc8b5f7f822d8b45015b9ac0fc367: Andy Wingo (1): add env script are available in the git repository at: http://wingolog.org/git/guile-vm.git master Andy Wingo (15): Update Makefile.am's; remove slib import fix env script remove x.foo.bar -> (slot x 'foo 'bar) compile-time translation (void) -> (begin) fix macro compilation via hooking into eval-case fix use-syntax / use-modules confusion -- fixes testsuites rework eval-case handling to be like cl's eval-when allow interpretation of load-toplevel as compile-toplevel fix dumping of #:keywords push the module resolution info for variables down into glil remove some debugging info `link' instruction links to symbols by module fix else in cond, letrec env corruption, syntax.scm compile, define-module side effects avoid zealous unquotation rudimentary syncase support; some dash symbol syncase removal Makefile.am | 1 + env | 5 +- module/Makefile.am | 16 +- module/guile/slib.scm | 40 - module/language/scheme/Makefile.am | 7 +- module/language/scheme/translate.scm | 501 +- module/slib/.cvsignore | 1 - module/slib/ANNOUNCE | 171 - module/slib/Bev2slib.scm | 94 - module/slib/ChangeLog | 2604 -------- module/slib/DrScheme.init | 6 - module/slib/FAQ | 217 - module/slib/Makefile | 333 - module/slib/README | 297 - module/slib/RScheme.init | 290 - module/slib/STk.init | 256 - module/slib/Template.scm | 282 - module/slib/alist.scm | 66 - module/slib/alistab.scm | 352 - module/slib/array.scm | 279 - module/slib/arraymap.scm | 78 - module/slib/batch.scm | 454 -- module/slib/bigloo.init | 263 - module/slib/break.scm | 149 - module/slib/byte.scm | 15 - module/slib/chap.scm | 150 - module/slib/charplot.scm | 171 - module/slib/chez.init | 396 -- module/slib/cltime.scm | 67 - module/slib/coerce.scm | 107 - module/slib/coerce.txi | 12 - module/slib/collect.scm | 236 - module/slib/comlist.scm | 328 - module/slib/comparse.scm | 99 - module/slib/cring.scm | 470 -- module/slib/db2html.scm | 463 -- module/slib/db2html.txi | 185 - module/slib/dbrowse.scm | 92 - module/slib/dbutil.scm | 313 - module/slib/debug.scm | 98 - module/slib/defmacex.scm | 100 - module/slib/determ.scm | 14 - module/slib/dwindtst.scm | 80 - module/slib/dynamic.scm | 75 - module/slib/dynwind.scm | 74 - module/slib/elk.init | 303 - module/slib/eval.scm | 146 - module/slib/factor.scm | 245 - module/slib/factor.txi | 56 - module/slib/fft.scm | 70 - module/slib/fluidlet.scm | 40 - module/slib/fmtdoc.txi | 434 -- module/slib/format.scm | 1675 ----- module/slib/formatst.scm | 647 -- module/slib/gambit.init | 301 - module/slib/genwrite.scm | 266 - module/slib/getopt.scm | 80 - module/slib/getparam.scm | 213 - module/slib/glob.scm | 227 - module/slib/guile.init | 232 - module/slib/hash.scm | 153 - module/slib/hashtab.scm | 79 - module/slib/htmlform.scm | 448 -- module/slib/htmlform.txi | 204 - module/slib/http-cgi.scm | 438 -- module/slib/http-cgi.txi | 110 - module/slib/lineio.scm | 82 - module/slib/lineio.txi | 45 - module/slib/logical.scm | 168 - module/slib/macrotst.scm | 54 - module/slib/macscheme.init | 276 - module/slib/macwork.scm | 126 - module/slib/makcrc.scm | 96 - module/slib/mbe.scm | 443 -- module/slib/minimize.scm | 114 - module/slib/minimize.txi | 48 - module/slib/mitcomp.pat | 1466 ---- module/slib/mitscheme.init | 283 - module/slib/mklibcat.scm | 198 - module/slib/modular.scm | 158 - module/slib/mulapply.scm | 28 - module/slib/mularg.scm | 12 - module/slib/mwdenote.scm | 289 - module/slib/mwexpand.scm | 565 -- module/slib/mwsynrul.scm | 343 - module/slib/nclients.scm | 385 -- module/slib/nclients.txi | 103 - module/slib/obj2str.scm | 63 - module/slib/obj2str.txi | 9 - module/slib/objdoc.txi | 238 - module/slib/object.scm | 97 - module/slib/paramlst.scm | 141 - module/slib/plottest.scm | 47 - module/slib/pnm.scm | 213 - module/slib/pp.scm | 15 - module/slib/ppfile.scm | 70 - module/slib/prec.scm | 448 -- module/slib/printf.scm | 584 -- module/slib/priorque.scm | 136 - module/slib/process.scm | 68 - module/slib/promise.scm | 29 - module/slib/pscheme.init | 206 - module/slib/psxtime.scm | 155 - module/slib/qp.scm | 149 - module/slib/queue.scm | 72 - module/slib/r4rsyn.scm | 542 -- module/slib/randinex.scm | 127 - module/slib/randinex.txi | 56 - module/slib/random.scm | 139 - module/slib/random.txi | 55 - module/slib/ratize.scm | 17 - module/slib/rdms.scm | 629 -- module/slib/recobj.scm | 55 - module/slib/record.scm | 228 - module/slib/repl.scm | 92 - module/slib/report.scm | 116 - module/slib/require.scm | 274 - module/slib/root.scm | 217 - module/slib/sc2.scm | 66 - module/slib/sc4opt.scm | 53 - module/slib/sc4sc3.scm | 35 - module/slib/scaexpp.scm | 2956 --------- module/slib/scaglob.scm | 32 - module/slib/scainit.scm | 104 - module/slib/scamacr.scm | 181 - module/slib/scanf.scm | 350 - module/slib/scaoutp.scm | 93 - module/slib/scheme2c.init | 304 - module/slib/scheme48.init | 282 - module/slib/schmooz.scm | 628 -- module/slib/schmooz.texi | 104 - module/slib/scm.init | 6 - module/slib/scmacro.scm | 119 - module/slib/scmactst.scm | 160 - module/slib/scsh.init | 284 - module/slib/selfset.scm | 28 - module/slib/sierpinski.scm | 71 - module/slib/simetrix.scm | 246 - module/slib/slib.info |12187 ---------------------------------- module/slib/slib.spec | 85 - module/slib/slib.texi |11142 ------------------------------- module/slib/sort.scm | 154 - module/slib/soundex.scm | 82 - module/slib/stdio.scm | 8 - module/slib/strcase.scm | 66 - module/slib/strport.scm | 51 - module/slib/strsrch.scm | 146 - module/slib/struct.scm | 165 - module/slib/structst.scm | 37 - module/slib/structure.scm | 80 - module/slib/syncase.sh | 146 - module/slib/synchk.scm | 104 - module/slib/synclo.scm | 748 --- module/slib/synrul.scm | 327 - module/slib/t3.init | 437 -- module/slib/tek40.scm | 92 - module/slib/tek41.scm | 147 - module/slib/timezone.scm | 264 - module/slib/trace.scm | 254 - module/slib/tree.scm | 62 - module/slib/trnscrpt.scm | 76 - module/slib/tsort.scm | 46 - module/slib/tzfile.scm | 138 - module/slib/umbscheme.init | 273 - module/slib/uri.scm | 318 - module/slib/uri.txi | 94 - module/slib/values.scm | 27 - module/slib/version.txi | 2 - module/slib/vscm.init | 389 -- module/slib/withfile.scm | 82 - module/slib/wttest.scm | 134 - module/slib/wttree.scm | 790 --- module/slib/yasyn.scm | 201 - module/system/Makefile.am | 2 +- module/system/base/Makefile.am | 8 +- module/system/base/compile.scm | 12 +- module/system/base/syntax.scm | 20 +- module/system/il/Makefile.am | 3 +- module/system/il/compile.scm | 8 +- module/system/il/ghil.scm | 42 +- module/system/repl/Makefile.am | 4 +- module/system/vm/Makefile.am | 1 - module/system/vm/assemble.scm | 10 +- src/vm_loader.c | 29 +- testsuite/t-match.scm | 5 +- testsuite/t-records.scm | 12 +- 186 files changed, 308 insertions(+), 62547 deletions(-) delete mode 100644 module/guile/slib.scm delete mode 100644 module/slib/.cvsignore delete mode 100644 module/slib/ANNOUNCE delete mode 100644 module/slib/Bev2slib.scm delete mode 100644 module/slib/ChangeLog delete mode 100644 module/slib/DrScheme.init delete mode 100644 module/slib/FAQ delete mode 100644 module/slib/Makefile delete mode 100644 module/slib/README delete mode 100644 module/slib/RScheme.init delete mode 100644 module/slib/STk.init delete mode 100644 module/slib/Template.scm delete mode 100644 module/slib/alist.scm delete mode 100644 module/slib/alistab.scm delete mode 100644 module/slib/array.scm delete mode 100644 module/slib/arraymap.scm delete mode 100644 module/slib/batch.scm delete mode 100644 module/slib/bigloo.init delete mode 100644 module/slib/break.scm delete mode 100644 module/slib/byte.scm delete mode 100644 module/slib/chap.scm delete mode 100644 module/slib/charplot.scm delete mode 100644 module/slib/chez.init delete mode 100644 module/slib/cltime.scm delete mode 100644 module/slib/coerce.scm delete mode 100644 module/slib/coerce.txi delete mode 100644 module/slib/collect.scm delete mode 100644 module/slib/comlist.scm delete mode 100644 module/slib/comparse.scm delete mode 100644 module/slib/cring.scm delete mode 100644 module/slib/db2html.scm delete mode 100644 module/slib/db2html.txi delete mode 100644 module/slib/dbrowse.scm delete mode 100644 module/slib/dbutil.scm delete mode 100644 module/slib/debug.scm delete mode 100644 module/slib/defmacex.scm delete mode 100644 module/slib/determ.scm delete mode 100644 module/slib/dwindtst.scm delete mode 100644 module/slib/dynamic.scm delete mode 100644 module/slib/dynwind.scm delete mode 100644 module/slib/elk.init delete mode 100644 module/slib/eval.scm delete mode 100644 module/slib/factor.scm delete mode 100644 module/slib/factor.txi delete mode 100644 module/slib/fft.scm delete mode 100644 module/slib/fluidlet.scm delete mode 100644 module/slib/fmtdoc.txi delete mode 100644 module/slib/format.scm delete mode 100644 module/slib/formatst.scm delete mode 100644 module/slib/gambit.init delete mode 100644 module/slib/genwrite.scm delete mode 100644 module/slib/getopt.scm delete mode 100644 module/slib/getparam.scm delete mode 100644 module/slib/glob.scm delete mode 100644 module/slib/guile.init delete mode 100644 module/slib/hash.scm delete mode 100644 module/slib/hashtab.scm delete mode 100644 module/slib/htmlform.scm delete mode 100644 module/slib/htmlform.txi delete mode 100644 module/slib/http-cgi.scm delete mode 100644 module/slib/http-cgi.txi delete mode 100644 module/slib/lineio.scm delete mode 100644 module/slib/lineio.txi delete mode 100644 module/slib/logical.scm delete mode 100644 module/slib/macrotst.scm delete mode 100644 module/slib/macscheme.init delete mode 100644 module/slib/macwork.scm delete mode 100644 module/slib/makcrc.scm delete mode 100644 module/slib/mbe.scm delete mode 100644 module/slib/minimize.scm delete mode 100644 module/slib/minimize.txi delete mode 100644 module/slib/mitcomp.pat delete mode 100644 module/slib/mitscheme.init delete mode 100644 module/slib/mklibcat.scm delete mode 100644 module/slib/modular.scm delete mode 100644 module/slib/mulapply.scm delete mode 100644 module/slib/mularg.scm delete mode 100644 module/slib/mwdenote.scm delete mode 100644 module/slib/mwexpand.scm delete mode 100644 module/slib/mwsynrul.scm delete mode 100644 module/slib/nclients.scm delete mode 100644 module/slib/nclients.txi delete mode 100644 module/slib/obj2str.scm delete mode 100644 module/slib/obj2str.txi delete mode 100644 module/slib/objdoc.txi delete mode 100644 module/slib/object.scm delete mode 100644 module/slib/paramlst.scm delete mode 100644 module/slib/plottest.scm delete mode 100644 module/slib/pnm.scm delete mode 100644 module/slib/pp.scm delete mode 100644 module/slib/ppfile.scm delete mode 100644 module/slib/prec.scm delete mode 100644 module/slib/printf.scm delete mode 100644 module/slib/priorque.scm delete mode 100644 module/slib/process.scm delete mode 100644 module/slib/promise.scm delete mode 100644 module/slib/pscheme.init delete mode 100644 module/slib/psxtime.scm delete mode 100644 module/slib/qp.scm delete mode 100644 module/slib/queue.scm delete mode 100644 module/slib/r4rsyn.scm delete mode 100644 module/slib/randinex.scm delete mode 100644 module/slib/randinex.txi delete mode 100644 module/slib/random.scm delete mode 100644 module/slib/random.txi delete mode 100644 module/slib/ratize.scm delete mode 100644 module/slib/rdms.scm delete mode 100644 module/slib/recobj.scm delete mode 100644 module/slib/record.scm delete mode 100644 module/slib/repl.scm delete mode 100644 module/slib/report.scm delete mode 100644 module/slib/require.scm delete mode 100644 module/slib/root.scm delete mode 100644 module/slib/sc2.scm delete mode 100644 module/slib/sc4opt.scm delete mode 100644 module/slib/sc4sc3.scm delete mode 100644 module/slib/scaexpp.scm delete mode 100644 module/slib/scaglob.scm delete mode 100644 module/slib/scainit.scm delete mode 100644 module/slib/scamacr.scm delete mode 100644 module/slib/scanf.scm delete mode 100644 module/slib/scaoutp.scm delete mode 100644 module/slib/scheme2c.init delete mode 100644 module/slib/scheme48.init delete mode 100644 module/slib/schmooz.scm delete mode 100644 module/slib/schmooz.texi delete mode 100644 module/slib/scm.init delete mode 100644 module/slib/scmacro.scm delete mode 100644 module/slib/scmactst.scm delete mode 100644 module/slib/scsh.init delete mode 100644 module/slib/selfset.scm delete mode 100644 module/slib/sierpinski.scm delete mode 100644 module/slib/simetrix.scm delete mode 100644 module/slib/slib.info delete mode 100644 module/slib/slib.spec delete mode 100644 module/slib/slib.texi delete mode 100644 module/slib/sort.scm delete mode 100644 module/slib/soundex.scm delete mode 100644 module/slib/stdio.scm delete mode 100644 module/slib/strcase.scm delete mode 100644 module/slib/strport.scm delete mode 100644 module/slib/strsrch.scm delete mode 100644 module/slib/struct.scm delete mode 100644 module/slib/structst.scm delete mode 100644 module/slib/structure.scm delete mode 100644 module/slib/syncase.sh delete mode 100644 module/slib/synchk.scm delete mode 100644 module/slib/synclo.scm delete mode 100644 module/slib/synrul.scm delete mode 100644 module/slib/t3.init delete mode 100644 module/slib/tek40.scm delete mode 100644 module/slib/tek41.scm delete mode 100644 module/slib/timezone.scm delete mode 100644 module/slib/trace.scm delete mode 100644 module/slib/tree.scm delete mode 100644 module/slib/trnscrpt.scm delete mode 100644 module/slib/tsort.scm delete mode 100644 module/slib/tzfile.scm delete mode 100644 module/slib/umbscheme.init delete mode 100644 module/slib/uri.scm delete mode 100644 module/slib/uri.txi delete mode 100644 module/slib/values.scm delete mode 100644 module/slib/version.txi delete mode 100644 module/slib/vscm.init delete mode 100644 module/slib/withfile.scm delete mode 100644 module/slib/wttest.scm delete mode 100644 module/slib/wttree.scm delete mode 100644 module/slib/yasyn.scm -- http://wingolog.org/