[Grace-core] Cool paper from Racket team...

James Noble kjx at ecs.vuw.ac.nz
Sun Mar 20 00:12:29 PDT 2011


http://blog.racket-lang.org/2011/03/languages-as-libraries-pldi-2011.html

We've just finished up the final version of our PLDI 2011 paper on  
language extension in Racket. The paper describes how the module  
system and the syntax system work together to support new languages  
with new static semantics, such as Typed Racket. Here's the abstract:

Programming language design benefits from constructs for extending the  
syntax and semantics of a host language. While C's string-based macros  
empower programmers to introduce notational shorthands, the parser- 
level macros of Lisp encourage experimentation with domain-specific  
languages. The Scheme programming language improves on Lisp with  
macros that respect lexical scope.The design of Racket---a descendant  
of Scheme---goes even further with the introduction of a full-fledged  
interface to the static semantics of the language. A Racket extension  
programmer can thus add constructs that are indistinguishable from  
``native'' notation, large and complex embedded domain-specific  
languages, and even optimizing transformations for the compiler  
backend. This power to experiment with language design has been used  
to create a series of sub-languages for programming with first-class  
classes and modules, numerous languages for implementing the Racket  
system, and the creation of a complete and fully integrated typed  
sister language to Racket's untyped base language.This paper explains  
Racket's language extension API via an implementation of a small typed  
sister language. The new language provides a rich type system that  
accommodates the idioms of untyped Racket. Furthermore, modules in  
this typed language can safely exchange values with untyped modules.  
Last but not least, the implementation includes a type-based optimizer  
that achieves promising speedups. Although these extensions are  
complex, their Racket implementation is just a library, like any other  
library, requiring no changes to the Racket implementation.


More information about the Grace-core mailing list