Julia: Dynamism and Performance Reconciled byDesign

Published on Nov 5, 2018 in OOPSLA (Conference on Object-Oriented Programming Systems, Languages, and Applications)
· DOI :10.1145/3276490
Jeff Bezanson5
Estimated H-index: 5
Benjamin Chung3
Estimated H-index: 3
(NU: Northeastern University)
+ 4 AuthorsLionel Zoubritzky1
Estimated H-index: 1
(NU: Northeastern University)
Julia is a programming language for the scientific community that combines features of productivity languages, such as Python or MATLAB, with characteristics of performance-oriented languages, such as C++ or Fortran. Julia's productivity features include: dynamic typing, automatic memory management, rich type annotations, and multiple dispatch. At the same time, Julia allows programmers to control memory layout and leverages a specializing just-in-time compiler to eliminate much of the overhead of those features. This paper details the design choices made by the creators of Julia and reflects on the implications of those choices for performance and usability.
Figures & Tables
  • References (34)
  • Citations (6)
📖 Papers frequently viewed together
283 Citations
2017ECOOP: European Conference on Object-Oriented Programming
2 Citations
1 Author (Jim Hugunin)
5 Citations
78% of Scinapse members use related papers. After signing in, all features are FREE.
Nov 5, 2018 in OOPSLA (Conference on Object-Oriented Programming Systems, Languages, and Applications)
#1Francesco Zappa Nardelli (NU: Northeastern University)H-Index: 21
#2Julia Belyakova (CTU: Czech Technical University in Prague)H-Index: 1
Last. Jan Vitek (CTU: Czech Technical University in Prague)H-Index: 40
view all 6 authors...
Programming languages that support multiple dispatch rely on an expressive notion of subtyping to specify method applicability. In these languages, type annotations on method declarations are used to select, out of a potentially large set of methods, the one that is most appropriate for a particular tuple of arguments. Julia is a language for scientific computing built around multiple dispatch and an expressive subtyping relation. This paper provides the first formal definition of Julia's subtyp...
5 CitationsSource
#1Avik Chaudhuri (Facebook)H-Index: 12
#2Panagiotis Vekris (UCSD: University of California, San Diego)H-Index: 5
Last. Gabriel Levi (Facebook)H-Index: 1
view all 5 authors...
In this paper we present the design and implementation of Flow, a fast and precise type checker for JavaScript that is used by thousands of developers on millions of lines of code at Facebook every day. Flow uses sophisticated type inference to understand common JavaScript idioms precisely. This helps it find non-trivial bugs in code and provide code intelligence to editors without requiring significant rewriting or annotations from the developer. We formalize an important fragment of Flow's ana...
9 CitationsSource
#1Jeff BezansonH-Index: 5
#2Alan EdelmanH-Index: 36
Last. Viral B. ShahH-Index: 13
view all 4 authors...
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. \ite...
647 CitationsSource
Jan 1, 2017 in ECOOP (European Conference on Object-Oriented Programming)
#1Todd A. Anderson (Intel)H-Index: 9
#2Hai Liu (Intel)H-Index: 4
Last. Tatiana Shpeisman (Intel)H-Index: 20
view all 6 authors...
2 CitationsSource
#1Miguel Garcia (University of Oviedo)H-Index: 7
#2Francisco Ortin (University of Oviedo)H-Index: 13
Last. Jose Quiroga (University of Oviedo)H-Index: 3
view all 3 authors...
Dynamic languages are suitable for developing specific applications where runtime adaptability is an important issue. On the contrary, statically typed languages commonly provide better compile-time type error detection and more opportunities for compiler optimizations. Because both approaches offer different benefits, there exist programming languages that support hybrid dynamic and static typing. However, the existing hybrid typing languages commonly do not gather type information of dynamic r...
5 CitationsSource
#1Miles Lubin (MIT: Massachusetts Institute of Technology)H-Index: 14
#2Iain Dunning (MIT: Massachusetts Institute of Technology)H-Index: 10
The state of numerical computing is currently characterized by a divide between highly efficient yet typically cumbersome low-level languages such as C, C++, and Fortran and highly expressive yet typically slow high-level languages such as Python and MATLAB. This paper explores how Julia, a modern programming language for numerical computing that claims to bridge this divide by incorporating recent advances in language and compiler design (such as just-in-time compilation), can be used for imple...
163 CitationsSource
This paper reviews some programming techniques in R that have proved useful, particularly for substantial projects. These include several versions of object-oriented programming, used in a large number of R packages. The review tries to clarify the origins and ideas behind the various versions, each of which is valuable in the appropriate context. R has also been strongly influenced by the ideas of functional programming and, in particular, by the desire to combine functional with object oriente...
5 CitationsSource
Mar 1, 2014 in VEE (Virtual Execution Environments)
#1Tomas Kalibera (Purdue University)H-Index: 16
#2Petr MajH-Index: 6
Last. Jan Vitek (Purdue University)H-Index: 40
view all 4 authors...
Dynamic languages have been gaining popularity to the point that their performance is starting to matter. The effort required to develop a production-quality, high-performance runtime is, however, staggering and the expertise required to do so is often out of reach of the community maintaining a particular language. Many domain specific languages remain stuck with naive implementations, as they are easy to write and simple to maintain for domain scientists. In this paper, we try to see how far o...
22 CitationsSource
126k Citations
#1Thomas Würthinger (Oracle Corporation)H-Index: 15
#2Christian Wimmer (Oracle Corporation)H-Index: 19
Last. Mario I. Wolczko (Oracle Corporation)H-Index: 2
view all 9 authors...
Building high-performance virtual machines is a complex and expensive undertaking; many popular languages still have low-performance implementations. We describe a new approach to virtual machine (VM) construction that amortizes much of the effort in initial construction by allowing new languages to be implemented with modest additional effort. The approach relies on abstract syntax tree (AST) interpretation where a node can rewrite itself to a more specialized or more general node, together wit...
143 CitationsSource
Cited By6
#1Henrik BarthelsH-Index: 2
#2Christos PsarrasH-Index: 1
Last. Paolo BientinesiH-Index: 17
view all 3 authors...
The translation of linear algebra computations into efficient sequences of library calls is a non-trivial task that requires expertise in both linear algebra and high-performance computing. Almost all high-level languages and libraries for matrix computations (e.g., Matlab, Eigen) internally use optimized kernels such as those provided by BLAS and LAPACK; however, their translation algorithms are often too simplistic and thus lead to a suboptimal use of said kernels, resulting in significant per...
#1Olivier Flückiger (NU: Northeastern University)H-Index: 1
#2Guido Chari (CTU: Czech Technical University in Prague)H-Index: 3
Last. Jan Vitek (CTU: Czech Technical University in Prague)H-Index: 40
view all 6 authors...
The R programming language combines a number of features considered hard to analyze and implement efficiently: dynamic typing, reflection, lazy evaluation, vectorized primitive types, first-class closures, and extensive use of native code. Additionally, variable scopes are reified at runtime as first-class environments. The combination of these features renders most static program analysis techniques impractical, and thus, compiler optimizations based on them ineffective. We present our work on ...
1 CitationsSource
#1Mathieu BesançonH-Index: 1
#2David AnthoffH-Index: 1
Last. John PearsonH-Index: 1
view all 7 authors...
Random variables and their distributions are a central part in many areas of statistical methods. The Distributions.jl package provides Julia users and developers tools for working with probability distributions, leveraging Julia features for their intuitive and flexible manipulation, while remaining highly efficient through zero-cost abstractions.
#1Henrik Barthels (RWTH Aachen University)H-Index: 2
#2Christos Psarras (RWTH Aachen University)H-Index: 1
Last. Paolo Bientinesi (Umeå University)H-Index: 17
view all 3 authors...
The level of abstraction at which application experts reason about linear algebra computations and the level of abstraction used by developers of high-performance numerical linear algebra libraries do not match. The former is conveniently captured by high-level languages and libraries such as Matlab and Eigen, while the latter expresses the kernels included in the BLAS and LAPACK libraries. Unfortunately, the translation from a high-level computation to an efficient sequence of kernels is a task...
#1Tim Besard (UGent: Ghent University)H-Index: 2
#2Valentin Churavy (MIT: Massachusetts Institute of Technology)
Last. Bjorn De Sutter (UGent: Ghent University)H-Index: 25
view all 4 authors...
Abstract The software needs of scientists and engineers are growing and their programs are becoming more compute-heavy and problem-specific. This has led to an influx of non-expert programmers, who need to use and program high-performance computing platforms. With the continued stagnation of single-threaded performance, using hardware accelerators such as GPUs or FPGAs is necessary. Adapting software to these compute platforms is a difficult task, especially for non-expert programmers, leading t...
#1Christopher Rackauckas (MIT: Massachusetts Institute of Technology)H-Index: 5
#2Qing Nie (UCI: University of California, Irvine)H-Index: 30
Abstract Performant numerical solving of differential equations is required for large-scale scientific modeling. In this manuscript we focus on two questions: (1) how can researchers empirically verify theoretical advances and consistently compare methods in production software settings and (2) how can users (scientific domain experts) keep up with the state-of-the-art methods to select those which are most appropriate? Here we describe how the confederated modular API of DifferentialEquations.j...