Thorn - Robust, Concurrent, Extensible
Scripting on the JVM
Bard Bloom, John Field, Nate Nystrom, Johan Östlund,
Gregor Richards, Rok Strnisa, Jan Vitek & Tobias Wrigstad
Scripting languages enjoy great popularity due to their
support for rapid and exploratory development. They
typically have lightweight syntax, weak data privacy,
dynamic typing, powerful aggregate data types, and allow
execution of the completed parts of incomplete programs. The
price of these features comes later in the software life
cycle. Scripts are hard to evolve and compose, and often
slow. An additional weakness of most scripting languages is
lack of support for concurrency - though concurrency is
required for scalability and interacting with remote
services.
This paper reports on the design and implementation of
Thorn, a novel programming language targeting the JVM. Our
principal contributions are a careful selection of features
that support the evolution of scripts into industrial grade
programs - e.g., an expressive module system, an optional
type annotation facility for declarations, and support for
concurrency based on message passing between lightweight,
isolated processes. On the implementation side, Thorn has
been designed to accommodate the evolution of the language
itself through a compiler plugin mechanism and target the
Java virtual machine.