[Larceny-users] Generating interoperable closures
will at ccs.neu.edu
will at ccs.neu.edu
Fri Jun 4 17:18:10 EDT 2010
David Rush wrote:
> I'm looking at doing quite a bit of language protoyping with what are
> basically Schemely semantics, and I was wondering just how difficult it is
> to generate my own closures that will play correctly with the rest of the
> Larceny run-time.
The easiest way to do that, by far, is to translate the relevant
parts of your prototype language into Scheme and run that through
Larceny's standard compiler or interpreter(s).
The second easiest way is to translate into Larceny's so-called
"MacScheme machine language" and run that through Larceny's standard
assembler(s). The hooks are exposed only in twobit.heap, which is
no longer being shipped with binary distributions so you'll have to
build it yourself.
The hardest way, by far, is to generate the machine code and data
structures yourself without using any of Larceny's infrastructure.
> Actually, I'm wondering even more if there is a secret
> documentation cache somewhere with hints on the interactions between the
> compiler and the run-time, because i don't really recall seeing much on that
> beyond what is in the ABI/FFI documents.
The representations are different in the four different varieties
of Larceny (Larceny/IA32, Larceny/Sparc, Petit Larceny, and Common
Larceny). The representations for the first three varieties are
similar, but not identical because of byte ordering and similar
details.
> Basically I'd like to be able to take advantage of the Larceny back-end
> optimizations and run-time while putting up a new surface language. Does
> anyone have any suggestions on where to start looking, even?
Where you'd start looking depends on the approach you choose. Here
are some random pointers, in no particular order:
Larceny User Manual, section 10.4 (documents make-procedure etc).
Larceny Note #2: Data Representations (slightly obsolete)
http://larceny.ccs.neu.edu/doc/LarcenyNotes/note2-repr.html
Larceny Note #6: Larceny on the SPARC
http://larceny.ccs.neu.edu/doc/LarcenyNotes/note6-sparc.html
Larceny Note #13: MacScheme Machine Instruction Set
http://larceny.ccs.neu.edu/doc/LarcenyNotes/note13-malcode.html
Examples of handed-coded MacScheme machine code
https://trac.ccs.neu.edu/trac/larceny/browser/trunk/larceny_src/src/Lib/Common/malcode.mal
https://trac.ccs.neu.edu/trac/larceny/browser/trunk/larceny_src/src/Lib/Common/arith.mal
Assemblers:
https://trac.ccs.neu.edu/trac/larceny/browser/trunk/larceny_src/src/Asm
IA32 assembly code and conventions:
https://trac.ccs.neu.edu/trac/larceny/browser/trunk/larceny_src/src/Rts/globals-nasm.cfg
https://trac.ccs.neu.edu/trac/larceny/browser/trunk/larceny_src/include/Shared/i386-machine.ah
https://trac.ccs.neu.edu/trac/larceny/browser/trunk/larceny_src/src/Rts/Shared/i386-millicode.asm
Will
More information about the Larceny-users
mailing list