Compiling Dynamic Languages (2013) [pdf]
&gt; Classically, dynamic languages have been interpreted, that is, evaluated at run- time by an interpreter program. In recent years, dynamic languages have also been complied, that is, translated to another language such as native code before being executed.<p>Strange, I thought I have seen compilers for languages like BASIC for a long time. The first LISP compiler is from the early 60s: <a href="http:&#x2F;&#x2F;www.bitsavers.org&#x2F;pdf&#x2F;mit&#x2F;ai&#x2F;aim&#x2F;AIM-039.pdf" rel="nofollow">http:&#x2F;&#x2F;www.bitsavers.org&#x2F;pdf&#x2F;mit&#x2F;ai&#x2F;aim&#x2F;AIM-039.pdf</a><p>Scheme compilers are from the 70s. Rabbit for Scheme: <a href="https:&#x2F;&#x2F;dspace.mit.edu&#x2F;handle&#x2F;1721.1&#x2F;6913" rel="nofollow">https:&#x2F;&#x2F;dspace.mit.edu&#x2F;handle&#x2F;1721.1&#x2F;6913</a><p>&gt; We conclude that ahead-of-time compilation is a viable alternative to interpretation of dynamic languages<p>Especially when the AOT compiler can be used incremental and the program can be extended&#x2F;modified incrementally. See sbcl.<p>&gt; The project then showed that it is possible to compile this dynamic language ahead-of-time to a native binary, using a statically typed language as an inter- mediate step.<p>This has been known for a long time.<p>For example Kyoto Common Lisp from 1985:
<a href="http:&#x2F;&#x2F;www.softwarepreservation.org&#x2F;projects&#x2F;LISP&#x2F;kcl&#x2F;doc&#x2F;kcl-report.pdf" rel="nofollow">http:&#x2F;&#x2F;www.softwarepreservation.org&#x2F;projects&#x2F;LISP&#x2F;kcl&#x2F;doc&#x2F;kc...</a><p>Design and Implementation of KCL:<p><a href="http:&#x2F;&#x2F;www.softwarepreservation.org&#x2F;projects&#x2F;LISP&#x2F;kcl&#x2F;paper&#x2F;kcl-paper.pdf" rel="nofollow">http:&#x2F;&#x2F;www.softwarepreservation.org&#x2F;projects&#x2F;LISP&#x2F;kcl&#x2F;paper&#x2F;...</a><p>KCL has been morphed into newer implementations like ECL and CLASP (addresses LLVM) over the years.<p>Or CLICC:<p><a href="http:&#x2F;&#x2F;citeseerx.ist.psu.edu&#x2F;viewdoc&#x2F;download;jsessionid=522E39082F536812D84D2879C35004B8?doi=10.1.1.38.1282&amp;rep=rep1&amp;type=pdf" rel="nofollow">http:&#x2F;&#x2F;citeseerx.ist.psu.edu&#x2F;viewdoc&#x2F;download;jsessionid=522...</a><p>Or Stalin for an attempt on a highly optimizing whole-program compiler for Scheme: <a href="https:&#x2F;&#x2F;github.com&#x2F;barak&#x2F;stalin" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;barak&#x2F;stalin</a><p>&gt; Overall the project found that compiling a dynamic language ahead-of-time is a viable alternative to interpreting the language<p>See SBCL: <a href="http:&#x2F;&#x2F;www.sbcl.org" rel="nofollow">http:&#x2F;&#x2F;www.sbcl.org</a>