On Sat, 28 May 2011 02:41:00 -0400, Jay Reynolds Freeman <jay_reynolds_freeman@mac.com> wrote: > In the latter kind of implementation, many of the compile-time/ > run-time distinctions that John mentions do not exist, in the sense > that *everything* happens within a run-time environment. I'm just going to jump in here really quickly and respond to one issue. One of the rather "lazy" terminologies used by many Schemers, including myself, is the term, "compile-time." Actually, there are two core concepts that apply to both pure interpreters and to compilers, run-time and expand-time. A proper Scheme interpreter should have a distinction of the two, even if it the actual process of expansion is welded into the run-time. In full procedural macro systems, there are infinitely many "phases" that exist, the two most common being the run and expand time. However, during expansion (expand-time), an implementation with procedural macros may evaluate arbitrary code, making it a sort of run-time as well, and there may be a level of expansion within the expand-time. This creates a tower of expansion phases. There are a number of writings on this, including Aziz's dissertation and ICFP paper [1], which has some important relevant sections. Many Schemes, such as Chez Scheme, do in fact implement modules and libraries as syntax. This has a number of advantages. Doing so means that these forms "disappear" after expansion, which simplifies the core interpreter, and before the code is run. See Chez Scheme's module form [2] for an interesting discussion of this. See ChezWEB as a non-trivial application which makes heavy reliance on syntactic modules and libraries [4]. There is a portable syntax expander called psyntax [5] that a number of implementations use, and there are also a few other expanders that are considered easier to grok, but usually do not have the same level of "industrial" testing. R5RS is, with some justification, somewhat quiet on the actual process of expansion, because there are many ways to do it. It is possible to interleave expansion and execution to some extent, but you should be careful in doing so. R6RS has a number of sections [3] that describe a more precise expansion process, and I recommend reading it to get a getter idea of these two distinct phases of evaluation. Aaron W. Hsu [1] http://www.cs.indiana.edu/~dyb/pubs/implicit-phasing.pdf [2] http://www.cs.indiana.edu/~dyb/pubs/popl99.pdf [3] http://www.r6rs.org/final/html/r6rs/r6rs-Z-H-13.html#node_chap_10 [4] http://www.sacrideo.us/v5/chezweb/index.xhtml [5] https://www.cs.indiana.edu/chezscheme/syntax-case/ -- Programming is just another word for the lost art of thinking. _______________________________________________ Scheme-reports mailing list Scheme-reports@scheme-reports.org http://lists.scheme-reports.org/cgi-bin/mailman/listinfo/scheme-reports