[Larceny-users] Larceny basics

Felix felixluser at pnkfx.org
Fri Aug 31 17:56:29 EDT 2007


Dan-

On Aug 31, 2007, at 5:30 PM, Dan Muresan wrote:

> Thanks for all the details!
>
>> p.s. (Only if you're interested) there is one feature missing from
>> the above SRFI-55 implementation that I, as a user, would desire:
>> expansion of a require-extension form should extend the compile-time
>> syntactic environment with any syntax that is provided by the SRFI's
>> that the form is requiring.
>
> You mean for SRFIs that export macros, like SRFI-42?
>
> Are you making a distinction between interpreted and compile-time?

Almost.

I am making a distinction between compiling code and running the  
compiled code.  (Note that there's no interpreter usage here.)

Native variants of Larceny will compile every expression that you  
load (or type at the REPL).  But in such situations, the compile-time  
syntactic environment and run-time syntactic environment are the  
same, and the issues I was hinting at above do not arise.

I do not have time to get into the details of this, so I'll just  
provide a quick rule of thumb: if you don't use the compile-file  
procedure, then you don't need to worry about this issue.  That is,  
if you are just using Larceny to load up Scheme source code, then  
everything should work as you expect.

If you *do* use the compile-file procedure, then you need to ensure  
that any special forms in the file you are compiling are either  
defined in that file you are compiling, or known to the compiler.   
Otherwise, the compiler will consider them to just be procedure  
invocations rather than special forms to be expanded.

(The potentially tricky part of the above paragraph is that phrase  
"known to the compiler"; how does one tell Larceny's compiler about  
the special forms one wants the compiler to use?  There are different  
methods, but the easiest one for you to adopt is to make sure that  
any such macro definitions are first loaded or defined before you  
compile the file at all.)

I repeat again, if you do not use compile-file (or similar tools  
provided by Larceny), then I am pretty that this problem will not  
arise for you.  (I am not saying that one shouldn't use compile-file;  
I am only saying that if one does, then one should be aware of the  
caveats.)

-Felix

p.s. Here's an example of where not having the appropriate syntactic  
environment when using compile-file can bite you.

% cat testreqext.sch
(require-extension (srfi 2))
% larceny
Larceny v0.94 "Doomsday Device" (Aug 14 2007 10:56:17,  
precise:Linux:unified)
larceny.heap, built on Wed Aug  1 12:53:28 EDT 2007

 > (compile-file "testreqext.sch" "testreqext-firsttry.fasl") ;; (OOPS!)

 > (load "testreqext-firsttry.fasl")


Error: Undefined global variable "srfi".
Entering debugger; type "?" for help.
debug> q

 > (load "defreqext.sch") ; this file has the define-syntax given  
earlier

 > (compile-file "testreqext.sch" "testreqext-secondtry.fasl")

 > (load "testreqext-secondtry.fasl") ;; this one succeeds!

 >




More information about the Larceny-users mailing list