[r6rs-discuss] Re: r6rs-discuss Digest, Vol 6, Issue 39

From: Abdulaziz Ghuloum <aghuloum>
Date: Sun Feb 25 14:52:40 2007

On Feb 25, 2007, at 2:32 PM, Matthias Felleisen wrote:

>
> On Feb 25, 2007, at 12:00 PM, Will Clinger wrote:
>
>> Requiring compiler writers to write
>> this extra code, instead of allowing them to reject
>> programs that violate the basic requirements of the
>> language, is a silly waste of implementors' time.
>
> I consider it a silly waste of time for (hopefully) many more
> Scheme programmers than compiler writers to having to guess why a
> program was rejected by a compiler that is supposedly R6RS
> conforming. If the rules are spelled out in one place and in an
> explicit manner, a compiler (writer) can refer programmers there
> and the programmer can work around the restrictions.

I agree. What I would hate is to leave it up to the implementors to
decide what to reject and what to accept and thus forcing the
programmer to obstruct the code in ways to inhibit the compiler's
optimizations that caused a program to be rejected.

Working from the previous example:

In one implementation, we found that:

> (call-with-current-continuation
      (lambda (k) ((lambda () 12) (k 17))))
17


In another, we found that:

> (call-with-current-continuation
      (lambda (k) ((lambda () 12) (k 17))))
Error: Wrong number of arguments to known procedure (let () 12)
Entering debugger; type "?" for help.
debug>

But we can fool the implementation into compiling the same expression
by inserting a dummy "let" around (lambda () 12):

> (call-with-current-continuation
      (lambda (k) ((let () (lambda () 12)) (k 17))))
12
>

Oh wait!

Aziz,,,

PS. I apologize for my usenet-like responses.
Received on Sun Feb 25 2007 - 14:52:24 UTC

This archive was generated by hypermail 2.3.0 : Wed Oct 23 2024 - 09:15:01 UTC