[gambit-list] What papers and strategies underly Gambit's design, in particular the compiler & VM?
mikael.rcv at gmail.com
Sun May 27 10:13:19 EDT 2012
In the purpose of making it clear and easy-enough for the unintroduced to
understand the inner workings of Gambit in its current version, it'd be
great to know what strategies/philosophies, papers and other reference
documents underly Gambit - its compiler, environment and so on, beyond the
Scheme (R5RS etc.) and SRFI specs.
I'd be happy to make a Wiki page, Theory and papers, or alike, of this.
My best understanding is that compilation to C/asm of Scheme with callcc
support generally is perceived as a process that's intricate and of an
abstract nature, asking this quite a lot therefore. :-)
The papers I'm aware of are basically those on Marc's homepage and those
listed by Alex below. And, beyond knowing which they are, it'd be great to
have a clue of how central the respective paper is in Gambit's particular
design / how strictly it was adhered to, on the scale from directly/being
implemented as it is to indirectly/used rather for inspiration.
Things whose answers can be found in the papers would include:
* How the internal value, object, procedure and closure representations
look and fit together
Closures effectively special-purpose vectors of boxes?
All values and object references are internally native-size integers
with a number of reserved bytes describing the value type, what about them?
* Value and object allocations, made how and what optimizations for fast
dead object detection and subsequent reclaim are there
* The layout of the asm/C-level stack and trampolines and how the GC
resolves the locations of all object reference, anatomy of a procedure call
* How the CPS transformation works
* What optimizations are made, in terms of register use optimizations,
compile-time pre-evaluation or deductions of datatype
At some point I got that generally |cdr| is translated to +1 in asm/c,
* What does the internal form of interpreted code actually look/work like
* Interrupt checks, made provenly at what granularity
* Code debuggability, made in compiled code on what basis
* Motivations for the GVM code's design
* Hashtable algorithm
* Number handling
I suppose there's key areas beyond these also. And, I suppose quite
possibly, some key things are not described in any paper.
Find below an attempt to figure out which of Marc's papers are in use for
these respects of Gambit today.
If you know such papers/docs or you see areas beyond those listed above
that ought to be considered as in the scope too, please tell.
* Marc Feeley. *Speculative inlining of predefined procedures in an R5RS
Scheme to C compiler. *In Olaf Chitil, Zoltán Horváth, and Viktória Zsók,
editors, *Implementation and Application of Functional Languages (IFL'07)*,
volume 5083 of *Lecture Notes in Computer Science*, pages 237-253, 2008.
* Fernanda Kri and Marc Feeley. *Genetic instruction scheduling and
register allocation. *In *International Conference on the Quantitative
Evaluation of Systems (QEST'04)*, pages 76-83, 2004.
* Marc Feeley. *A better API for first-class continuations. *In *Scheme
and Functional Programming Workshop (SFPW'01)*, pages 1-3, September 2001.
* Danny Dubé and Marc Feeley. *Demand-driven type analysis: an
introduction. *In *Scheme and Functional Programming Workshop (SFPW'01)*,
pages 21-32, September 2001.
* Marc Feeley. *A portable implementation of first-class continuations for
unrestricted interoperability with C in a multithreaded Scheme. *In *Scheme
and Functional Programming Workshop (SFPW'00)*, pages 65-66, September
2000. [PDF] <http://www.iro.umontreal.ca/~feeley/papers/FeeleySW00.pdf>
* Mauricio Solar and Marc Feeley. *Scheduling algorithm considering
latency time on a shared-memory machine. *In *XVI World Computer Congress,
International Conference on Software: Theory and Practice*, August 2000.
* Marc Feeley, James S. Miller, Guillermo J. Rozas, and Jason A.
higher-order languages into fully tail-recursive portable C. *Technical
Report 1078, département d'informatique et r.o., Université de Montréal,
August 1997. [PDF]<http://www.iro.umontreal.ca/~feeley/papers/FeeleyMillerRozasWilsonDIRO1078.pdf>
* Dominique Boucher and Marc Feeley. *Abstract compilation: a new
implementation paradigm for static analysis. *In *International Conference
on Compiler Construction (CC'96)*, pages 192-207, April
* Manuel Serrano and Marc Feeley. *Storage use analysis and its
applications. *In *ACM SIGPLAN International Conference on Functional
Programming (ICFP'96)*, pages 50-61, May 1996.
* Marc Feeley. *Polling efficiently on stock hardware. *In *ACM Conference
on Functional Programming Languages and Computer Architecture (FPCA'93)*,
pages 179-187, 1993.
* Marc Feeley and Guy Lapalme. *Closure generation based on viewing LAMBDA
as EPSILON plus COMPILE. **Computer Languages*, 17(4):251-267, 1992.
Marc Feeley and Guy Lapalme. *Using closures for code generation. **Computer
Languages*, 12(1):47-66, 1987.
* Marc Feeley. *Deux approches à l'implantation du language Scheme. *Master's
thesis, Université de Montréal, May 1986.
2011/6/9 Alex Queiroz
> On Wed, Jun 8, 2011 at 11:14 PM, Jason E. Aten <j.e.aten at gmail.com> wrote:
> > If others on the list have pointers to papers as well, I'd enjoy reading
> > about the best thoughts on how to implement continuations.
> "Representing Control in the Presence of First-Class Continuations"
> "A portable implementation of first-class continuations for
> unrestricted interoperability with C in a multithreaded Scheme"
> "Implementation strategies for first-class continuations"
> More in:
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Gambit-list