Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
ORBIT: an optimizing compiler for scheme
SIGPLAN '86 Proceedings of the 1986 SIGPLAN symposium on Compiler construction
Revised report on the algorithmic language scheme
ACM SIGPLAN Notices
Proc. of a conference on Functional programming languages and computer architecture
Experiences creating a portable cedar
PLDI '89 Proceedings of the ACM SIGPLAN 1989 Conference on Programming language design and implementation
Continuation-passing, closure-passing style
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The definition of Standard ML
Register allocation across procedure and module boundaries
PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
Representing control in the presence of first-class continuations
PLDI '90 Proceedings of the ACM SIGPLAN 1990 conference on Programming language design and implementation
Lisp and Symbolic Computation
Typing first-class continuations in ML
POPL '91 Proceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The C programming language
Dynamic program parallelization
LFP '92 Proceedings of the 1992 ACM conference on LISP and functional programming
A Portable Multiprocessor Interface for Standard ML of New Jersey
A Portable Multiprocessor Interface for Standard ML of New Jersey
Asynchronous Signals is Standard ML
Asynchronous Signals is Standard ML
Rabbit: A Compiler for Scheme
Orbit: an optimizing compiler for scheme
Orbit: an optimizing compiler for scheme
CONS should not CONS its arguments, part II: Cheney on the M.T.A.
ACM SIGPLAN Notices
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
Higher-order dataflow and its implementation on stock hardware
SAC '94 Proceedings of the 1994 ACM symposium on Applied computing
Compiling scheme to JVM bytecode:: a performance study
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Flow-Directed Closure Conversion for Typed Languages
ESOP '00 Proceedings of the 9th European Symposium on Programming Languages and Systems
Bee: an integrated development environment for the Scheme programming language
Journal of Functional Programming
From ML to Ada: Strongly-typed language interoperability via source translation
Journal of Functional Programming
Kawa: compiling dynamic languages to the Java VM
ATEC '98 Proceedings of the annual conference on USENIX Annual Technical Conference
A network programming language based on concurrent processes and regular expressions
SE'07 Proceedings of the 25th conference on IASTED International Multi-Conference: Software Engineering
Implicitly heterogeneous multi-stage programming
New Generation Computing
Pillar: A Parallel Implementation Language
Languages and Compilers for Parallel Computing
CEAL: a C-based language for self-adjusting computation
Proceedings of the 2009 ACM SIGPLAN conference on Programming language design and implementation
DSL '09 Proceedings of the IFIP TC 2 Working Conference on Domain-Specific Languages
Flapjax: a programming language for Ajax applications
Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications
Selective tail call elimination
SAS'03 Proceedings of the 10th international conference on Static analysis
Certified development tools implementation in objective Caml
PADL'08 Proceedings of the 10th international conference on Practical aspects of declarative languages
Proceedings of the third ACM Haskell symposium on Haskell
Managing continuations for proper tail recursion
Proceedings of the 2010 international conference on Lisp
An interpreter for server-side hop
Proceedings of the 7th symposium on Dynamic languages
Implicitly heterogeneous multi-stage programming
GPCE'05 Proceedings of the 4th international conference on Generative Programming and Component Engineering
Hi-index | 0.00 |
C has been used as a portable target language for implementing languages like Standard ML and Scheme. Previous efforts at compiling these languages to C have produced efficient code, but have compromised on portability and proper tail recursion. We show how to compile Standard ML to C wihout making such compromises. The compilation technique is based on converting Standard ML to a continuation-passing style &lgr;-calculus intermediate language and then compiling this language to C. The code generated by this compiler achieves an execution speed that is about a factor of two slower than that generated by a native code compiler. The compiler generates highly portable code, yet still supports advanced features like garbage collection and first-class continuations. We analyze the performance and determine the aspects of the compilation method that lead to the observed slowdown. We also suggest changes to C compilers that would better support such compilation methods.