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 differences are stripped away. Abstractions in mathematics are captured as code through another technique from computer science, generic programming. Julia shows that one can achieve machine performance without sacrificing human convenience.


  1. Julia
  2. numerical
  3. scientific computing
  4. parallel

MSC codes

  1. 68N15
  2. 65Y05
  3. 97P40

Get full access to this article

View all available purchase options and get full access to this article.


E. Anderson, Z. Bai, C. Bischof, S. Blackford, J. Demmel, J. Dongarra, J. Du Croz, A. Greenbaum, S. Hammarling, A. McKenney, and D. Sorensen, LAPACK Users' Guide, 3rd ed., SIAM, Philadelphia, PA, 1999.
J. Bezanson, Abstraction in Technical Computing, Ph.D. thesis, Massachusetts Institute of Technology, MA, 2015.
J. Bezanson, J. Chen, S. Karpinski, V. B. Shah, and A. Edelman, Array operators using multiple dispatch, in ARRAY'14: Proceedings of ACM SIGPLAN International Workshop on Libraries, Languages, and Compilers for Array Programming, ACM, New York, 2014, pp. 56:56--56:61.
J. Bezanson, S. Karpinski, V. B. Shah, and A. Edelman, Julia: A Fast Dynamic Language for Technical Computing, preprint, arXiv:1209.5145 [cs.PL], 2012.
R. Choy and A. Edelman, Parallel MATLAB: Doing it right, Proc. IEEE, 93 (2005), pp. 331--341.
Clang: A C Language Family Frontend for LLVM, http://clang.llvm.org/.
J. W. Demmel, J. J. Dongarra, B. N. Parlett, W. Kahan, M. Gu, D. S. Bindel, Y. Hida, X. S. Li, O. A. Marques, E. J. Riedy, C. Vomel, J. Langou, P. Luszczek, J. Kurzak, A. Buttari, J. Langou, and S. Tomov, Prospectus for the Next LAPACK and ScaLAPACK Libraries, Tech. report 181, LAPACK Working Note, 2007, http://www.netlib.org/lapack/lawnspdf/lawn181.pdf.
A. Edelman and B. Sutton, From Random Matrices to Stochastic Operators, J. Statist. Phys., 127 (2007), pp. 1121--1165.
The GNU MPFR Library, http://www.mpfr.org/.
C. Gomez, ed., Engineering and Scientific Computing with Scilab, Birkhäuser, Boston, 1999.
G. Hoare, Technicalities: Interactive Scientific Computing \#1 of 2: Pythonic Parts, http://graydon2.dreamwidth.org/3186.html, 2014.
R. Ihaka and R. Gentleman, R: A language for data analysis and graphics, J. Comput. Graph. Statist., 5 (1996), pp. 299--314.
Interactive Supercomputing, Getting Started with Star-P: Taking Your First Test-Drive, http://www-math.mit.edu/~edelman/publications.php, 2006.
The Jupyter Project, http://jupyter.org/.
W. Kahan, How Futile Are Mindless Assessments of Roundoff in Floating-Point Computation?, http://www.cs.berkeley.edu/~wkahan/Mindless.pdf, 2006.
M. A. Kaplan and J. D. Ullman, A scheme for the automatic inference of variable types, J. ACM, 27 (1980), pp. 128--145, https://doi.org/10.1145/322169.322181.
C. Lattner and V. Adve, LLVM: A compilation framework for lifelong program analysis and transformation, in Proceedings of the 2004 International Symposium on Code Generation and Optimization (CGO'04), Palo Alto, CA, 2004, ACM, New York, 2004, pp. 75--86.
C. L. Lawson, R. J. Hanson, D. R. Kincaid, and F. T. Krogh, Basic linear algebra subprograms for Fortran usage, ACM Trans. Math. Softw., 5 (1979), pp. 308--323, https://doi.org/10.1145/355841.355847.
M. Lubin and I. Dunning, Computing in Operations Research using Julia, INFORMS J. Comput., 27 (2015), pp. 238--248, https://doi.org/10.1287/ijoc.2014.0623; arXiv preprint: http://dx.doi.org/10.1287/ijoc.2014.0623.
M. Mohnen, A graph-free approach to data-flow analysis, in Compiler Construction, R. Horspool, ed., Lecture Notes in Comput. Sci. 2304, Springer, Berlin, Heidelberg, 2002, pp. 185--213.
M. Murphy, Octave: A free, high-level language for mathematics, Linux J., 1997 (1997), 326884, http://dl.acm.org/citation.cfm?id=326876.326884.
R. Muschevici, A. Potanin, E. Tempero, and J. Noble, Multiple dispatch in practice, in Proceedings of the 23rd ACM SIGPLAN Conference on Object-Oriented Programming Systems Languages and Applications, OOPSLA '08, ACM, New York, 2008, pp. 563--582, https://doi.org/10.1145/1449764.1449808.
A. Noack, Fast and Generic Linear Algebra in Julia, Tech. report, MIT, Cambridge, MA, 2015.
J. Regier, K. Pamnany, R. Giordano, R. Thomas, D. Schlegel, J. McAuliffe, and Prabhat, Learning an Astronomical Catalog of the Visible Universe through Scalable Bayesian Inference, preprint, arXiv:1611.03404 [cs.DC], 2016.
H. Shen, Interactive notebooks: Sharing the code, Nature Toolbox, 515 (2014), pp. 151--152, http://www.nature.com/news/interactive-notebooks-sharing-the-code-1.16261.
G. Strang, Introduction to Linear Algebra, Wellesley-Cambridge Press, Wellesley, MA, 2003, https://books.google.com/books?id=Gv4pCVyoUVYC.
M. Udell, K. Mohan, D. Zeng, J. Hong, S. Diamond, and S. Boyd, Convex optimization in Julia, in SC14 Workshop on High Performance Technical Computing in Dynamic Languages, 2014; preprint, arXiv:1410.4821 [math.OC], 2014.
S. van der Walt, S. C. Colbert, and G. Varoquaux, The NumPy Array: A Structure for Efficient Numerical Computation, CoRR, abs/1102.1523, 2011.
H. Wickham, ggplot2, http://ggplot2.org/.
L. Wilkinson, The Grammar of Graphics (Statistics and Computing), Springer-Verlag, New York, 2005.

Information & Authors


Published In

cover image SIAM Review
SIAM Review
Pages: 65 - 98
ISSN (online): 1095-7200


Submitted: 18 December 2014
Accepted: 16 December 2015
Published online: 7 February 2017


  1. Julia
  2. numerical
  3. scientific computing
  4. parallel

MSC codes

  1. 68N15
  2. 65Y05
  3. 97P40



Metrics & Citations



If you have the appropriate software installed, you can download article citation data to the citation manager of your choice. Simply select your manager software from the list below and click Download.

Cited By