[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Scheme-reports] General comments on the draft WG1 R7 report.

On Sat, 28 May 2011 02:41:00 -0400, Jay Reynolds Freeman  
<jay_reynolds_freeman@x> 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  

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  

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  

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