|
ABSTRACT
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.
REFERENCES
Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.
| |
1
|
Erlang Reference Manual. http://erlang.org/doc/, 2008. Version 5.6.5.
|
| |
2
|
The Python Tutorial - Modules. http://docs.python.org/3.0/tutorial/modules.html, 2009. Version 3.0.1.
|
| |
3
|
Eric Allen, David Chase, Joe Hallett, Victor Luchangco, Jan-Willem Maessen, Sukyoung Ryu, Guy L. Steele, Jr., and Sam Tobin-Hochstadt. The Fortress language specification, version 1.0, March 2008.
|
| |
4
|
Christopher Anderson and Sophia Drossopoulou. Babyj: from object based to class based programming via types. Electr. Notes Theor. Comput. Sci., 82(7), 2003.
|
| |
5
|
Chris Andreae, James Noble, Shane Markstrum, and Todd Millstein. A framework for implementing pluggable type systems. In OOPSLA '06: Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications, October 2006.
|
| |
6
|
Timothy Andrews and Craig Harris. Combining language and database advances in an object-oriented development environment. In Proceedings of the ACM Conference on Object-Oriented Programming Systems, Languages, and Applications, volume 22, pages 430--440, December 1987.
|
| |
7
|
David F. Bacon. Kava: a Java dialect with a uniform object model for lightweight classes. In JGI '01: Proceedings of the 2001 joint ACM-ISCOPE conference on Java Grande, pages 68--77, 2001.
|
| |
8
|
Kenneth Barclay and John Savage, editors. Groovy Programming. Morgan Kaufmann, December 2006.
|
| |
9
|
Kent Beck and et al. Principles behind the agile manifesto, 2007. http://agilemanifesto.org/principles.html.
|
| |
10
|
Gilad Bracha. Pluggable type systems. In OOPSLA'04 Workshop on Revival of Dynamic Languages, October 2004.
|
| |
11
|
Gilad Bracha and William R. Cook. Mixin-based Inheritance. In Proceedings of OOPSLA, volume 25(10) of ACM SIGPLAN Notices, pages 303--311. ACM Press, October 1990.
|
| |
12
|
Bradford L. Chamberlain, David Callahan, and Hans P. Zima. Parallel programmability and the Chapel language. International Journal of High Performance Computing Applications, 21(3):291--312, August 2007.
|
| |
13
|
Donald D. Chamberlin and Raymond F. Boyce. Sequel: A structured english query language. In FIDET '74: Proceedings of the 1974 ACM SIGFIDET (now SIGMOD) workshop on Data description, access and control, pages 249--264, New York, NY, USA, 1974. ACM.
|
| |
14
|
Philippe Charles, Christian Grothoff, Vijay Saraswat, Christopher Donawa, Allan Kielstra, Kemal Ebcioglu, Christoph von Praun, and Vivek Sarkar. X10: an object-oriented approach to non-uniform cluster computing. In OOPSLA '05: Proceedings of the 20th Annual ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications, pages 519--538, 2005.
|
| |
15
|
Clojure. http://clojure.org/.
|
| |
16
|
The Computer Language Benchmarks Game. http://shootout.alioth.debian.org/.
|
| |
17
|
Burak Emir, Martin Odersky, and John Williams. Matching objects with patterns. In Proceedings of the European Conference on Object-Oriented Programming (ECOOP), volume 4609 of LNCS, pages 273--298. Springer Verlag, 2007.
|
| |
18
|
Matthew Flatt and Robert Bruce Findler. PLT Scheme Guide - Modules. http://docs.plt-scheme.org/guide/modules.html, 2009. Version 4.1.5.1.
|
| |
19
|
Bryan Ford. Parsing expression grammars: a recognition-based syntactic foundation. In Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages (POPL '04), January 2004.
|
| |
20
|
Jesse James Garrett. Ajax: A new approach to web applications, February 2005. http://www.adaptivepath.com/ideas/essays/archives/000385.php.
|
| |
21
|
Niklaus Haldiman, Marcus Denker, and Oscar Nierstrasz. Practical, pluggable types for a dynamic language. Computer Languages, Systems & Structures, ESUG 2007 International Conference on Dynamic Languages (ESUG/ICDL 2007), 35(1):48--62, April 2009.
|
| |
22
|
A. Hejlsberg, S. Wiltamuth, and P. Golde. C# language specification. 2003.
|
| |
23
|
Martin Hirzel, Nathaniel Nystrom, Bard Bloom, and Jan Vitek. Matchete: Paths through the pattern matching jungle. In Practical Aspects of Declarative Languages (PADL 2008), pages 150--166, January 2008.
|
| |
24
|
Simon P. Jones. Haskell 98 Language and Libraries: The Revised Report. Cambridge University Press, May 2003.
|
| |
25
|
Java powered Ruby implementation. http://jruby.codehaus.org/.
|
| |
26
|
Introducing JSON. http://www.json.org/.
|
| |
27
|
The Jython Project. http://www.jython.org/.
|
| |
28
|
The Kawa language framework. http://www.gnu.org/software/kawa.
|
| |
29
|
Xavier Leroy, Damien Doligez, Jacques Garrigue, Didier Rmy, and Jrme Vouillon. The objective caml system, release 3.11. Documentation and user's manual, 2004. http://caml.inria.fr/pub/docs/manual-ocaml/.
|
| |
30
|
Barbara Liskov and John V. Guttag. Abstraction and Specification in Program Development. MIT Press/McGraw-Hill, 1986.
|
| |
31
|
Donna Malayeri and Jonathan Aldrich. CZ: Multiple inheritance without diamonds. In OOPSLA '09: Proceedings of the 24th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, October 2009.
|
| |
32
|
Erik Meijer, Brian Beckman, and Gavin Bierman. LINQ: reconciling object, relations and XML in the .NET framework. In SIGMOD '06: Proceedings of the 2006 ACM SIGMOD international conference on Management of data, pages 706--706, 2006.
|
| |
33
|
Robin Milner, Mads Tofte, and Robert Harper. The Definition of Standard ML. MIT Press, Cambridge, MA, 1990.
|
| |
34
|
Nathaniel Nystrom, Michael Clarkson, and Andrew C. Myers. Polyglot: An extensible compiler framework for Java. In Görel Hedin, editor, 12th International Conference on Compiler Construction (CC 2003), number 2622 in Lecture Notes in Computer Science, pages 128--152, Warsaw, Poland, April 2003. Springer-Verlag.
|
| |
35
|
Nathaniel Nystrom and Vijay Saraswat. An annotation and compiler plugin system for X10. Technical Report RC24198, IBM T.J. Watson Research Center, 2007.
|
| |
36
|
Nathaniel Nystrom, Vijay Saraswat, Jens Palsberg, and Christian Grothoff. Constrained types for object-oriented languages. In Proceedings of the 2008 ACM Conference on Object-Oriented Programming Systems, Languages, and Applications (OOPSLA), October 2008.
|
| |
37
|
Martin Odersky, Philippe Altherr, Vincent Cremet, Iulian Dragos Gilles Dubochet, Burak Emir, Sean McDirmid, Stéphane Micheloud, Nikolay Mihaylov, Michel Schinz, Erik Stenman, Lex Spoon, and Matthias Zenger. An overview of the Scala programming language, second edition. Technical report, École Polytechnique Fédérale de Lausanne (EPFL), 2006.
|
| |
38
|
J. K. Ousterhout. Scripting: Higher-level programming for the 21st century. Computer, 31(3):23--30, 1998.
|
| |
39
|
Lutz Prechelt. An empirical comparison of seven programming languages. IEEE Computer, 33(10):23--29, 2000.
|
| |
40
|
J. H. Reppy and Y. Xiao. Specialization of CML Message-passing Primitives. In Proceedings of the 35th ACM SIGPLAN--SIGACT Symposium on Principles of Programming Languages (POPL '07), pages 315--326, 2007.
|
| |
41
|
Vijay Saraswat et al. The X10 language specification. Technical report, IBM T.J. Watson Research Center, 2008.
|
| |
42
|
N. Scharli, S. Ducasse, O. Nierstrasz, and A. Black. Traits: Composable units of behaviour. In Proceedings of the 17th European Conference on Object-Oriented Programming (ECOOP 2003), volume 2743 of Lecture Notes in Computer Science, pages 248--274, 2003.
|
| |
43
|
J. T. Schwartz, R. B. Dewar, E. Schonberg, and E. Dubinsky. Programming with sets; an introduction to SETL. Springer-Verlag, New York, 1986.
|
| |
44
|
Jeremy Siek and Walid Taha. Gradual typing for objects. In ECOOP 2007-Object-Oriented Programming, volume 4609 of Lecture Notes in Computer Science, pages 2--27. Springer Berlin / Heidelberg, 2007.
|
| |
45
|
Jeremy G. Siek. Gradual typing for functional languages. In In Scheme and Functional Programming Workshop, pages 81--92, 2006.
|
| |
46
|
M. Sperber, R.K. Dybvig, M. Flatt, A. Van Straaten, R. Kelsey, W. Clinger, and J. Rees. Revised 6 report on the algorithmic language Scheme, 2007.
|
| |
47
|
Sriram Srinivasan and Alan Mycroft. Kilim: Isolation-typed actors for java. In ECOOP 2008-Object-Oriented Programming, volume 5142/2008 of LNCS, pages 104--128. Springer Berlin / Heidelberg, 2008.
|
| |
48
|
Guy L. Steele and Richard P. Gabriel. The evolution of Lisp. In HOPL-II: The second ACM SIGPLAN conference on History of programming languages, pages 231--270, New York, NY, USA, 1993. ACM.
|
| |
49
|
Rok Strnisa. Fixing the Java Module System, in Theory and in Practice. In Proceedings of FTfJP, pages 88--99. Radboud University, July 2008.
|
| |
50
|
Sun. Core Java J2SE 5.0. Sun Microsystems Inc., http://java.sun.com/j2se/1.5.0/, 2005.
|
| |
51
|
Sun Microsystems, Inc. JSR-277: Java#8482; Module System. http://jcp.org/en/jsr/detail?id=277, October 2006. Early Draft.
|
| |
52
|
Sun Microsystems, Inc. JSR-294: Improved Modularity Support in the Java#8482; Programming Language. http://jcp.org/en/jsr/detail?id=294, 2007.
|
| |
53
|
Don Syme. An upcoming experimental feature: Active patterns in F#, August 2006. http://blogs.msdn.com/dsyme/archive/2006/08/16/activepatterns.aspx.
|
| |
54
|
David Thomas and Andrew Hunt. Programming Ruby: the pragmatic programmer's guide. The Pragmatic Programmers, LLC., Raleigh, NC, USA, 2 edition, August 2005.
|
| |
55
|
Sam Tobin-Hochstadt and Matthias Felleisen. Interlanguage migration: from scripts to programs. In OOPSLA '06: Companion to the 21st ACM SIGPLAN symposium on Object-oriented programming systems, languages, and applications, pages 964--974, 2006.
|
| |
56
|
Sam Tobin--Hochstadt and Matthias Felleisen. The design and implementation of typed scheme. In POPL '08: Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages, pages 395--406, 2008.
|
| |
57
|
Guido van Rossum and Fred L. Drake Jr., editors. The Python Language Reference Manual (version 2.5). Network Theory Ltd, 2006.
|
| |
58
|
Philip Wadler. Views: a way for pattern matching to cohabit with data abstraction. In Proceedings of the 14th ACM Symposium on Principles of Programming Languages, January 1987.
|
| |
59
|
Alessandro Warth, James R. Douglass, and Todd Millstein. Packrat parsers can support left recursion. In Workshop on Partial Evaluation and Program Manipulation (PEPM '08), January 2008.
|
|