Julia: A Fresh Approach to Numerical Computing

Bridging cultures that have often been distant, Julia combines expertise from the diverse fields of computer science and computational science to create a new approach to numerical computing. Julia is designed to be easy and fast and questions notions generally held to be “laws of nature" by practitioners of numerical computing: \beginlist \item High-level dynamic programs have to be slow. \item One must prototype in one language and then rewrite in another language for speed or deployment. \item There are parts of a system appropriate for the programmer, and other parts that are best left untouched as they have been built by the experts. \endlist We introduce the Julia programming language and its design---a dance between specialization and abstraction. Specialization allows for custom treatment. Multiple dispatch, a technique from computer science, picks the right algorithm for the right circumstance. Abstraction, which is what good computation is really about, recognizes what remains the same after dif...

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

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

[3]  Ed Anderson,et al.  LAPACK Users' Guide , 1995 .

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

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

[6]  Interactive Supercomputing with MITMatlab , 1998 .

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

[8]  Alan Edelman,et al.  Interactive Supercomputing with PPMatlab , 1998 .

[9]  Markus Mohnen,et al.  A Graph-Free Approach to Data-Flow Analysis , 2002, CC.

[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]  John R. Gilbert,et al.  Star-P: High Productivity Parallel Computing , 2004 .

[12]  Vivek Sarkar,et al.  X10: an object-oriented approach to non-uniform cluster computing , 2005, OOPSLA '05.

[13]  Alan Edelman,et al.  Parallel MATLAB: Doing it Right , 2005, Proceedings of the IEEE.

[14]  Leland Wilkinson,et al.  The Grammar of Graphics (Statistics and Computing) , 2005 .

[15]  James Demmel,et al.  Prospectus for the Next LAPACK and ScaLAPACK Libraries , 2006, PARA.

[16]  Alan Edelman,et al.  Interactive Supercomputing’s Star-P Platform , 2006 .

[17]  Guy L. Steele Parallel programming and code selection in fortress , 2006, PPoPP '06.

[18]  Nathaniel E. Helwig,et al.  An Introduction to Linear Algebra , 2006 .

[19]  Bradford L. Chamberlain,et al.  Parallel Programmability and the Chapel Language , 2007, Int. J. High Perform. Comput. Appl..

[20]  A. Edelman,et al.  From Random Matrices to Stochastic Operators , 2006, math-ph/0607038.

[21]  Victor Luchangco,et al.  The Fortress Language Specification Version 1.0 , 2007 .

[22]  Ewan D. Tempero,et al.  Multiple dispatch in practice , 2008, OOPSLA.

[23]  Matemática,et al.  Society for Industrial and Applied Mathematics , 2010 .

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

[25]  Alan Edelman,et al.  Julia: A Fast Dynamic Language for Technical Computing , 2012, ArXiv.

[26]  Helen Shen,et al.  Interactive notebooks: Sharing the code , 2014, Nature.

[27]  Stephen P. Boyd,et al.  Convex Optimization in Julia , 2014, 2014 First Workshop for High Performance Technical Computing in Dynamic Languages.

[28]  Alan Edelman,et al.  Array Operators Using Multiple Dispatch: A design methodology for array implementations in dynamic languages , 2014, ARRAY@PLDI.

[29]  Jeff Bezanson,et al.  Abstraction in technical computing , 2015 .

[30]  Iain Dunning,et al.  Computing in Operations Research Using Julia , 2013, INFORMS J. Comput..