Languages as libraries

Languages as libraries
复制标题

语言作为库

DOI:
10.1145/1993498.1993514
复制
发表时间:
2011
期刊:
Proceedings of the 42nd ACM SIGPLAN International Conference on Programming Language Design and Implementation
影响因子:
--
通讯作者:
M. Felleisen
M. Felleisen
中科院分区:
--
文献类型:
--
作者:
Sam Tobin;Vincent St;Ryan Culpepper;M. Flatt;M. Felleisen

文献摘要

被引文献

相似文献

编程语言设计受益于扩展宿主语言的语法和语义的构造。C的基于字符串的宏允许程序员引入符号简写,而Lisp的解析器级宏鼓励对特定领域的语言进行实验。Scheme编程语言在Lisp的基础上改进了与词法作用域相关的宏。
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.