Julia: A Fast Dynamic Language for Technical Computing

Dynamic languages have become popular for scientic computing. They are generally considered highly productive, but lacking in performance. This paper presents Julia, a new dynamic language for technical computing, designed for performance from the beginning by adapting and extending modern programming language techniques. A design based on generic functions and a rich type system simultaneously enables an expressive programming model and successful type inference, leading to good performance for a wide range of programs. This makes it possible for much of Julia’s library to be written in Julia itself, while also incorporating best-of-breed C and Fortran libraries.

[1]  Jan Vitek,et al.  Evaluating the Design of the R Language - Objects and Functions for Data Analysis , 2012, ECOOP.

[2]  Robin Milner,et al.  A Theory of Type Polymorphism in Programming , 1978, J. Comput. Syst. Sci..

[3]  Claude Gomez,et al.  Engineering and Scientific Computing with Scilab , 1998 .

[4]  Charles L. Lawson,et al.  Basic Linear Algebra Subprograms for Fortran Usage , 1979, TOMS.

[5]  Craig Chambers,et al.  Object-Oriented Multi-Methods in Cecil , 1992, ECOOP.

[6]  Rodney A. Brooks,et al.  A critique of common LISP , 1984, LFP '84.

[7]  H. Baker The Nimble Type Inferencer for Common Lisp-84 , 1990 .

[8]  Jeffrey D. Ullman,et al.  A Scheme for the Automatic Inference of Variable Types , 1980, JACM.

[9]  James D. Herbsleb,et al.  Social coding in GitHub: transparency and collaboration in an open software repository , 2012, CSCW.

[10]  Vikram S. Adve,et al.  LLVM: a compilation framework for lifelong program analysis & transformation , 2004, International Symposium on Code Generation and Optimization, 2004. CGO 2004..

[11]  Gaël Varoquaux,et al.  The NumPy Array: A Structure for Efficient Numerical Computation , 2011, Computing in Science & Engineering.

[12]  Luca Cardelli,et al.  On understanding types, data abstraction, and polymorphism , 1985, CSUR.

[13]  Victor Luchangco,et al.  Type checking modular multiple dispatch with parametric polymorphism and multiple inheritance , 2011, OOPSLA '11.

[14]  Randall D. Beer Preliminary report on a practical type inference system for common Lisp , 1987, LIPO.

[15]  Craig Chambers,et al.  An efficient implementation of SELF, a dynamically-typed object-oriented language based on prototypes , 1989, OOPSLA '89.

[16]  Sophia Drossopoulou,et al.  Towards Type Inference for JavaScript , 2005, ECOOP.

[17]  Linda G. DeMichiel,et al.  The Common Lisp Object System: An Overview , 1987, ECOOP.

[18]  Carl Friedrich Bolz,et al.  Tracing the meta-level: PyPy's tracing JIT compiler , 2009, ICOOOLPS@ECOOP.

[19]  William L. Scherlis,et al.  Compilers and staging transformations , 1986, POPL '86.

[20]  Henry G. Baker,et al.  CLOStrophobia: its etiology and treatment , 1991, OOPS.

[21]  Jeffrey S. Foster,et al.  Profile-guided static typing for dynamic scripting languages , 2009, OOPSLA.

[22]  Ross Ihaka,et al.  Gentleman R: R: A language for data analysis and graphics , 1996 .

[23]  Malcolm Murphy,et al.  Octave: A Free, High-Level Language for Mathematics , 1997 .

[24]  Patrick Cousot,et al.  Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints , 1977, POPL.

[25]  Patrick Cousot,et al.  Comparing the Galois Connection and Widening/Narrowing Approaches to Abstract Interpretation , 1992, PLILP.

[26]  Andrew Shalit,et al.  The Dylan Reference Manual: The Definitive Guide to the New Object-Oriented Dynamic Language , 1996 .

[27]  Kwan-Liu Ma,et al.  TICL—A type inference system for Common Lisp , 1990, Softw. Pract. Exp..