On 7 Mar 2007, at 15:51, AndrevanTonder wrote:

On Wed, 7 Mar 2007, Pascal Costanza wrote:

The terms "compiler" and "interpreter" are not well-defined. But AFAICT, a compiler typically works in two phases: A translation from one representation to another one, where the latter is typically a representation that can be executed by some interpreter (for example, a CPU).

No r5rs-conformant Scheme interpreter will start evaluating a form without macro-expanding it first. R6RS requires nothing more than this.

Here is an example:

(if expression form1 form2)

Assume that both form1 and form2 are macro invocations. Will form1 and form2 both be macroexpanded before the if statement is evaluated, or will first the expression be evaluated and depending on its outcome only either form1 or form2 be expanded and then evaluated? Is the latter evaluation approach possible or forbidden in the current version of R6RS?

This can be interesting, as I tried to explain, because in the first evaluation approach, you expand one form that you strictly don't need to expand, and it can be beneficial to avoid this.

Interpreters are interesting because they sometimes have better performance characteristics than compilers. Especially when code is loaded or generated on demand at runtime, a compilation step may incur a much larger overhead than "pure" interpretation. For example, this is the case when the loaded or generated code is only executed once or just a few times.

This is, BTW, one of the reasons why "modern" virtual machines, like those for Java, Smalltalk or Self, are so efficient: They simply defer compilation until there is enough evidence that certain hotspots actually benefit from an extra compilation step.

Do you consider these language specifications more interpreter- friendly than r6rs? If I remember correctly, all Java code has to be encapsulated in classes. These have to be assembled into a well- formed program, which is sytax-checked and typed-checked, before anything will run. Does r6rs mandate, in your view, a heavier burden than this?

What is interesting in this context is the implementation approach of the HotSpot virtual machine for Java, or similar implementation techniques, definitely not the language defined on top of that. Java the language requires compilation into bytecode before execution.

I can't judge whether the burden in R6RS is heavier or not, because I don't know the details of R6RS that well. I have just tried to give some meaning to what "pure interpretation" could possibly mean.


Pascal

--
Pascal Costanza, mailto:[EMAIL PROTECTED], http://p-cos.net
Vrije Universiteit Brussel, Programming Technology Lab
Pleinlaan 2, B-1050 Brussel, Belgium





_______________________________________________
r6rs-discuss mailing list
[email protected]
http://lists.r6rs.org/cgi-bin/mailman/listinfo/r6rs-discuss

Reply via email to