Julia (programming language)
   HOME

TheInfoList



OR:

Julia is a high-level, dynamic
programming language A programming language is a system of notation for writing computer programs. Most programming languages are text-based formal languages, but they may also be graphical. They are a kind of computer language. The description of a programming ...
. Its features are well suited for
numerical analysis Numerical analysis is the study of algorithms that use numerical approximation (as opposed to symbolic manipulations) for the problems of mathematical analysis (as distinguished from discrete mathematics). It is the study of numerical methods ...
and computational science. Distinctive aspects of Julia's design include a type system with
parametric polymorphism In programming languages and type theory, parametric polymorphism allows a single piece of code to be given a "generic" type, using variables in place of actual types, and then instantiated with particular types as needed. Parametrically polymorph ...
in a dynamic programming language; with
multiple dispatch Multiple dispatch or multimethods is a feature of some programming languages in which a function or method can be dynamically dispatched based on the run-time (dynamic) type or, in the more general case, some other attribute of more than one of ...
as its core
programming paradigm Programming paradigms are a way to classify programming languages based on their features. Languages can be classified into multiple paradigms. Some paradigms are concerned mainly with implications for the execution model of the language, suc ...
. Julia supports
concurrent Concurrent means happening at the same time. Concurrency, concurrent, or concurrence may refer to: Law * Concurrence, in jurisprudence, the need to prove both ''actus reus'' and ''mens rea'' * Concurring opinion (also called a "concurrence"), a ...
, (composable) parallel and
distributed computing A distributed system is a system whose components are located on different networked computers, which communicate and coordinate their actions by passing messages to one another from any system. Distributed computing is a field of computer sci ...
(with or without using MPI or the built-in corresponding to "
OpenMP OpenMP (Open Multi-Processing) is an application programming interface (API) that supports multi-platform shared-memory multiprocessing programming in C, C++, and Fortran, on many platforms, instruction-set architectures and operating syst ...
-style" threads), and direct calling of C and Fortran libraries without
glue code Adhesive, also known as glue, cement, mucilage, or paste, is any non-metallic substance applied to one or both surfaces of two separate items that binds them together and resists their separation. The use of adhesives offers certain advant ...
. Julia uses a just-in-time (JIT) compiler that is referred to as "just- ahead-of-time" (JAOT) in the Julia community, as Julia compiles all code (by default) to
machine code In computer programming, machine code is any low-level programming language, consisting of machine language instructions, which are used to control a computer's central processing unit (CPU). Each instruction causes the CPU to perform a ve ...
before running it. Julia is garbage-collected, uses
eager evaluation In a programming language, an evaluation strategy is a set of rules for evaluating expressions. The term is often used to refer to the more specific notion of a ''parameter-passing strategy'' that defines the kind of value that is passed to the f ...
, and includes efficient libraries for floating-point calculations,
linear algebra Linear algebra is the branch of mathematics concerning linear equations such as: :a_1x_1+\cdots +a_nx_n=b, linear maps such as: :(x_1, \ldots, x_n) \mapsto a_1x_1+\cdots +a_nx_n, and their representations in vector spaces and through matrices ...
,
random number generation Random number generation is a process by which, often by means of a random number generator (RNG), a sequence of numbers or symbols that cannot be reasonably predicted better than by random chance is generated. This means that the particular out ...
, and
regular expression A regular expression (shortened as regex or regexp; sometimes referred to as rational expression) is a sequence of characters that specifies a search pattern in text. Usually such patterns are used by string-searching algorithms for "find" ...
matching. Many libraries are available, including some (e.g., for fast Fourier transforms) that were previously bundled with Julia and are now separate. Several development tools support coding in Julia, such as
integrated development environment An integrated development environment (IDE) is a software application that provides comprehensive facilities to computer programmers for software development. An IDE normally consists of at least a source code editor, build automation tools ...
s (e.g. for Microsoft's
Visual Studio Code Visual Studio Code, also commonly referred to as VS Code, is a source-code editor made by Microsoft with the Electron Framework, for Windows, Linux and macOS. Features include support for debugging, syntax highlighting, intelligent code comple ...
, an extension is available providing debugging and linting support); with integrated tools, e.g. a profiler (and flame graph support available for the built-in one), debugger, and the Rebugger.jl package "supports repeated-execution debugging" and more. Julia works with other languages, calling C has special support, and with use of extra packages, e.g. for working with Python, R, Rust, C++, SQL and to work with or even to compile to JavaScript. Julia can be compiled to binary executables using a package for it supporting all Julia features. Small binary executables can also be made using a different package but then the Julia runtime isn't included in the executable, e.g. down to 9 KB (then without e.g. the garbage collector since it's part of Julia's runtime, i.e. with similar limited capabilities to the C language), for computers or even microcontrollers with 2 KB of RAM. By default, Julia code depends on the Julia runtime to support all Julia features, e.g. threading, but some (non-idiomatic, to smaller or larger degree) Julia code can be compiled to small executables (with limited Julia capabilities). In both cases no
source code In computing, source code, or simply code, is any collection of code, with or without comments, written using a human-readable programming language, usually as plain text. The source code of a program is specially designed to facilitate the w ...
needs to be distributed.


History

Work on Julia was started in 2009, by
Jeff Bezanson Jeff Bezanson (born December 26, 1981) is a computer scientist best known for co-creating the Julia programming language with Stefan Karpinski, Alan Edelman and Viral B. Shah in 2012. The language spawned Julia Computing Inc. (since then rena ...
,
Stefan Karpinski Stefan Karpinski is an American computer scientist known for being a co-creator of the Julia programming language. He is an alumnus of Harvard and works at Julia Computing, which he co-founded with Julia co-creators, Alan Edelman, Jeff Bezanson, ...
,
Viral B. Shah Viral B Shah ( hi, वीराल बी. शाह, link=no) is an Indian computer scientist, best known for being a co-creator of the Julia programming language. He was also actively involved in the initial design of the Aadhaar project in Ind ...
, and
Alan Edelman Alan Stuart Edelman (born June 1963) is an American mathematician and computer scientist. He is a professor of applied mathematics at the Massachusetts Institute of Technology (MIT) and a Principal Investigator at the MIT Computer Science and Ar ...
, who set out to create a free language that was both high-level and fast. On 14 February 2012, the team launched a website with a blog post explaining the language's mission. In an interview with ''
InfoWorld ''InfoWorld'' (abbreviated IW) is an information technology media business. Founded in 1978, it began as a monthly magazine. In 2007, it transitioned to a web-only publication. Its parent company today is International Data Group, and its siste ...
'' in April 2012, Karpinski said of the name "Julia": "There's no good reason, really. It just seemed like a pretty name." Bezanson said he chose the name on the recommendation of a friend, then years later wrote: In the 10 years since the 2012 launch of pre-1.0 Julia, the community has grown. The Julia package ecosystem has over 11.8 million lines of code (including docs and tests). The JuliaCon
academic conference An academic conference or scientific conference (also congress, symposium, workshop, or meeting) is an event for researchers (not necessarily academics) to present and discuss their scholarly work. Together with academic or scientific journal ...
for Julia users and developers has been held annually since 2014 with JuliaCon2020 welcoming over 28,900 unique viewers, and then JuliaCon2021 breaking all previous records (with more than 300 JuliaCon2021 presentations available for free on YouTube, up from 162 the year before), and 43,000 unique viewers during the conference. Three of the Julia co-creators are the recipients of the 2019 James H. Wilkinson Prize for Numerical Software (awarded every four years) "for the creation of Julia, an innovative environment for the creation of high-performance tools that enable the analysis and solution of computational science problems." Also, Alan Edelman, professor of applied mathematics at MIT, has been selected to receive the 2019 IEEE Computer Society Sidney Fernbach Award "for outstanding breakthroughs in high-performance computing, linear algebra, and computational science and for contributions to the Julia programming language." Both Julia 0.7 and version 1.0 were released on 8 August 2018. Work on Julia 0.7 was a "huge undertaking" (e.g., because of an "entirely new optimizer"), and some changes were made to semantics, e.g. the
iteration Iteration is the repetition of a process in order to generate a (possibly unbounded) sequence of outcomes. Each repetition of the process is a single iteration, and the outcome of each iteration is then the starting point of the next iteration. ...
interface was simplified; and the syntax changed a little (with the syntax now stable, and same for 1.x and 0.7). Julia 1.1 was released in January 2019 with a new "exception stack" feature. Julia 1.2 was released in August 2019 with some built-in support for web browsers. Julia 1.3 added composable multi-threaded parallelism and a binary artifacts system for Julia packages. Julia 1.4 added syntax for generic array indexing to handle e.g. 0-based arrays. The memory model was also changed. Julia 1.5 released in August 2020 added record and replay debugging support, for Mozilla's rr tool. The release changed the behavior in the REPL (soft scope) to the one used in Jupyter, but fully compatible with non-REPL code. Most of the thread API was marked as stable, and with this release "arbitrary immutable objects—regardless of whether they have fields that reference mutable objects or not—can now be stack allocated", reducing heap allocations, e.g. views are no longer allocating. Julia 1.5 targeted so-called "time-to-first-plot" performance, in general, the speed of compilation itself (as opposed to performance of the generated code), and adds tools for developers to improve package loading. Julia 1.6 was the largest release since 1.0, faster on many fronts, e.g. introduced parallel precompilation and faster loading of packages, in some cases "50x speedup in load times for large trees of binary artifacts". As of version 1.7 Julia development is back to time-based releases. Julia 1.7.0 was released in November 2021, with many changes, e.g. a new faster random-number generator. Julia 1.7.3 was released on 25 May 2022, fixing some issues, including at least one security update. Julia 1.8 has been released (and 1.8.1 and 1.8.2 as followup on 29 September 2022, both fixing bugs and invalidations, thus compiling faster), with improvements for distributing Julia programs without source code, and compiler speedup, in some cases by 25%, and more controllable
inlining In computing, inline expansion, or inlining, is a manual or compiler optimization that replaces a function call site with the body of the called function. Inline expansion is similar to macro expansion, but occurs during compilation, without cha ...
(i.e. now also allowing applying @inline at the call site, not just on the function itself) and Julia 1.9 is the next milestone, it and the milestones for 1.10, 1.11, 1.12 and 2.0 currently have no set due dates.


JuliaCon

Since 2014, the Julia Community has hosted an annual Julia Conference focused on developers and users. The first JuliaCon took place in Chicago and kickstarted the annual occurrence of the conference. Since 2014, the conference has taken place across a number of locations including MIT and the University of Maryland, Baltimore. The event audience has grown from a few dozen people to over 28,900 unique attendees during JuliaCon 2020, which took place virtually. JuliaCon 2021 also took place virtually with keynote addresses from professors William Kahan (the primary architect of the IEEE 754 floating-point standard, which his keynote is about, that virtually all CPUs use and languages, including Julia), and Jan Vitek, Xiaoye Sherry Li, and Soumith Chintala (co-creator of
PyTorch PyTorch is a machine learning framework based on the Torch library, used for applications such as computer vision and natural language processing, originally developed by Meta AI and now part of the Linux Foundation umbrella. It is free and open ...
). JuliaCon grew to 43,000 unique attendees and more than 300 presentations (still freely accessible, plus for older years). JuliaCon 2022 will also be virtual held between July 27 and July 29, 2022, for the first time in several languages, not just in English.


Sponsors

The Julia language became a NumFOCUS fiscally sponsored project in 2014 in an effort to ensure the project's long-term sustainability. Jeremy Kepner at
MIT Lincoln Laboratory The MIT Lincoln Laboratory, located in Lexington, Massachusetts, is a United States Department of Defense federally funded research and development center chartered to apply advanced technology to problems of national security. Research and dev ...
was the founding sponsor of the Julia project in its early days. In addition, funds from the
Gordon and Betty Moore Foundation The Gordon and Betty Moore Foundation is an American foundation established by Intel co-founder Gordon E. Moore and his wife Betty I. Moore in September 2000 to support scientific discovery, environmental conservation, patient care improvements a ...
, the Alfred P. Sloan Foundation,
Intel Intel Corporation is an American multinational corporation and technology company headquartered in Santa Clara, California. It is the world's largest semiconductor chip manufacturer by revenue, and is one of the developers of the x86 seri ...
, and agencies such as NSF,
DARPA The Defense Advanced Research Projects Agency (DARPA) is a research and development agency of the United States Department of Defense responsible for the development of emerging technologies for use by the military. Originally known as the Ad ...
,
NIH The National Institutes of Health, commonly referred to as NIH (with each letter pronounced individually), is the primary agency of the United States government responsible for biomedical and public health research. It was founded in the late ...
,
NASA The National Aeronautics and Space Administration (NASA ) is an independent agencies of the United States government, independent agency of the US federal government responsible for the civil List of government space agencies, space program ...
, and
FAA The Federal Aviation Administration (FAA) is the largest transportation agency of the U.S. government and regulates all aspects of civil aviation in the country as well as over surrounding international waters. Its powers include air traffic m ...
have been essential to the development of Julia.
Mozilla Mozilla (stylized as moz://a) is a free software community founded in 1998 by members of Netscape. The Mozilla community uses, develops, spreads and supports Mozilla products, thereby promoting exclusively free software and open standards, w ...
, the maker of Firefox web browser, with its research grants for H1 2019, sponsored "a member of the official Julia team" for the project "Bringing Julia to the Browser", meaning to Firefox and other web browsers. The Julia language is also supported by individual donors on GitHub.


Julia company

JuliaHub, Inc. was founded in 2015 as Julia Computing, Inc. by
Viral B. Shah Viral B Shah ( hi, वीराल बी. शाह, link=no) is an Indian computer scientist, best known for being a co-creator of the Julia programming language. He was also actively involved in the initial design of the Aadhaar project in Ind ...
, Deepak Vinchhi,
Alan Edelman Alan Stuart Edelman (born June 1963) is an American mathematician and computer scientist. He is a professor of applied mathematics at the Massachusetts Institute of Technology (MIT) and a Principal Investigator at the MIT Computer Science and Ar ...
,
Jeff Bezanson Jeff Bezanson (born December 26, 1981) is a computer scientist best known for co-creating the Julia programming language with Stefan Karpinski, Alan Edelman and Viral B. Shah in 2012. The language spawned Julia Computing Inc. (since then rena ...
,
Stefan Karpinski Stefan Karpinski is an American computer scientist known for being a co-creator of the Julia programming language. He is an alumnus of Harvard and works at Julia Computing, which he co-founded with Julia co-creators, Alan Edelman, Jeff Bezanson, ...
and Keno Fischer. In June 2017, Julia Computing raised US$4.6million in seed funding from General Catalyst and Founder Collective, the same month was "granted $910,000 by the Alfred P. Sloan Foundation to support open-source Julia development, including $160,000 to promote diversity in the Julia community", and in December 2019 the company got $1.1million funding from the US government to "develop a neural component
machine learning Machine learning (ML) is a field of inquiry devoted to understanding and building methods that 'learn', that is, methods that leverage data to improve performance on some set of tasks. It is seen as a part of artificial intelligence. Machine ...
tool to reduce the total energy consumption of heating, ventilation, and air conditioning (HVAC) systems in buildings". In July 2021, Julia Computing announced they raised a $24 million
Series A round A series A round (also known as series A financing or series A investment) is the name typically given to a company's first significant round of venture capital financing. The name refers to the class of preferred stock sold to investors in exch ...
led by Dorilton Ventures, which also owns team
Williams Racing Williams Grand Prix Engineering Limited, currently racing in Formula One as Williams Racing, is a British Formula One motor racing team and constructor. It was founded by former team owner Frank Williams and automotive engineer Patrick Head ...
, that partnered with Julia Computing. Williams' Commercial Director said: "Investing in companies building best-in-class cloud technology is a strategic focus for Dorilton and Julia's versatile platform, with revolutionary capabilities in simulation and modelling, is hugely relevant to our business. We look forward to embedding Julia Computing in the world's most technologically advanced sport".


Language features

Julia is a
general-purpose programming language In computer software, a general-purpose programming language (GPL) is a programming language for building software in a wide variety of application domains. Conversely, a domain-specific programming language is used within a specific area. For exam ...
, while also originally designed for numerical/technical computing. It is also useful for low-level
systems programming Systems programming, or system programming, is the activity of programming computer system software. The primary distinguishing characteristic of systems programming when compared to application programming is that application programming aims to pr ...
, as a
specification language A specification language is a formal language in computer science used during systems analysis, requirements analysis, and systems design to describe a system at a much higher level than a programming language, which is used to produce the execu ...
, High-level Synthesis (HLS) tool (for hardware, e.g. FPGAs), and for web programming at both server and client side. The main features of the language are: * Multiple dispatch: providing ability to define function behavior across combinations of argument types * Dynamic type system: types for documentation, optimization, and dispatch * Performance approaching that of statically-typed languages like C * A built-in
package manager A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner. A package manager deals wi ...
* Lisp-like macros and other
metaprogramming Metaprogramming is a programming technique in which computer programs have the ability to treat other programs as their data. It means that a program can be designed to read, generate, analyze or transform other programs, and even modify itself ...
facilities * Call C functions directly without wrappers or special APIs * Ability to interface with other languages, e.g. PythonCall.jl allows calling to or from Python (also possible with PyCall.jl), R with RCall.jl, and Java/Scala with JavaCall.jl *
shell Shell may refer to: Architecture and design * Shell (structure), a thin structure ** Concrete shell, a thin shell of concrete, usually with no interior columns or exterior buttresses ** Thin-shell structure Science Biology * Seashell, a hard o ...
-like abilities to manage other processes * Designed for parallel and
distributed computing A distributed system is a system whose components are located on different networked computers, which communicate and coordinate their actions by passing messages to one another from any system. Distributed computing is a field of computer sci ...
*
Coroutine Coroutines are computer program components that generalize subroutines for non-preemptive multitasking, by allowing execution to be suspended and resumed. Coroutines are well-suited for implementing familiar program components such as cooperative ...
s: lightweight ''green'' threading * User-defined types are as compact as built-ins * Automatic generation of code for different argument types * Extensible conversions and promotions for numeric and other types * Support for
Unicode Unicode, formally The Unicode Standard,The formal version reference is is an information technology standard for the consistent encoding, representation, and handling of text expressed in most of the world's writing systems. The standard, wh ...
, including but not limited to
UTF-8 UTF-8 is a variable-length character encoding used for electronic communication. Defined by the Unicode Standard, the name is derived from ''Unicode'' (or ''Universal Coded Character Set'') ''Transformation Format 8-bit''. UTF-8 is capable of ...
Multiple dispatch (also termed multimethods in Lisp) is a generalization of single dispatch the polymorphic mechanism used in common
object-oriented programming Object-oriented programming (OOP) is a programming paradigm based on the concept of "objects", which can contain data and code. The data is in the form of fields (often known as attributes or ''properties''), and the code is in the form of ...
(OOP) languages, such as
Python Python may refer to: Snakes * Pythonidae, a family of nonvenomous snakes found in Africa, Asia, and Australia ** ''Python'' (genus), a genus of Pythonidae found in Africa and Asia * Python (mythology), a mythical serpent Computing * Python (pro ...
,
C++ C++ (pronounced "C plus plus") is a high-level general-purpose programming language created by Danish computer scientist Bjarne Stroustrup as an extension of the C programming language, or "C with Classes". The language has expanded significan ...
,
Java Java (; id, Jawa, ; jv, ꦗꦮ; su, ) is one of the Greater Sunda Islands in Indonesia. It is bordered by the Indian Ocean to the south and the Java Sea to the north. With a population of 151.6 million people, Java is the world's mos ...
,
JavaScript JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of websites use JavaScript on the client side for webpage behavior, of ...
, and Smalltalk that uses
inheritance Inheritance is the practice of receiving private property, titles, debts, entitlements, privileges, rights, and obligations upon the death of an individual. The rules of inheritance differ among societies and have changed over time. Officia ...
. In Julia, all concrete types are subtypes of abstract types, directly or indirectly subtypes of the Any type, which is the top of the type hierarchy. Concrete types can not themselves be subtyped the way they can in other languages; composition is used instead (see also inheritance vs subtyping). By default, the Julia runtime must be pre-installed as user-provided source code is run. Alternatively, a standalone executable that needs no Julia source code can be built with e.g. ''PackageCompiler.jl''. Julia's syntactic macros (used for
metaprogramming Metaprogramming is a programming technique in which computer programs have the ability to treat other programs as their data. It means that a program can be designed to read, generate, analyze or transform other programs, and even modify itself ...
), like Lisp macros, are more powerful than text-substitution macros used in the
preprocessor In computer science, a preprocessor (or precompiler) is a program that processes its input data to produce output that is used as input in another program. The output is said to be a preprocessed form of the input data, which is often used by so ...
of some other languages such as C, because they work at the level of
abstract syntax tree In computer science, an abstract syntax tree (AST), or just syntax tree, is a tree representation of the abstract syntactic structure of text (often source code) written in a formal language. Each node of the tree denotes a construct occurr ...
s (ASTs). Julia's macro system is hygienic, but also supports deliberate capture when desired (like for anaphoric macros) using the esc construct. Julia draws inspiration from various dialects of Lisp, including Scheme and Common Lisp, and it shares many features with Dylan, also a multiple-dispatch-oriented dynamic language (which features an
ALGOL ALGOL (; short for "Algorithmic Language") is a family of imperative computer programming languages originally developed in 1958. ALGOL heavily influenced many other languages and was the standard method for algorithm description used by the ...
-like free-form infix syntax rather than a Lisp-like prefix syntax, while in Julia "everything" is an
expression Expression may refer to: Linguistics * Expression (linguistics), a word, phrase, or sentence * Fixed expression, a form of words with a specific meaning * Idiom, a type of fixed expression * Metaphorical expression, a particular word, phrase, o ...
), and with Fortress, another numerical programming language (which features multiple dispatch and a sophisticated parametric type system). While Common Lisp Object System (CLOS) adds multiple dispatch to Common Lisp, not all functions are generic functions. In Julia, Dylan, and Fortress, extensibility is the default, and the system's built-in functions are all generic and extensible. In Dylan, multiple dispatch is as fundamental as it is in Julia: all user-defined functions and even basic built-in operations like + are generic. Dylan's type system, however, does not fully support parametric types, which are more typical of the ML lineage of languages. By default, CLOS does not allow for dispatch on Common Lisp's parametric types; such extended dispatch semantics can only be added as an extension through the CLOS Metaobject Protocol. By convergent design, Fortress also features multiple dispatch on parametric types; unlike Julia, however, Fortress is statically rather than dynamically typed, with separate compiling and executing phases. The language features are summarized in the following table: An example of the extensibility of Julia, the Unitful.jl package adds support for physical
units of measurement A unit of measurement is a definite magnitude of a quantity, defined and adopted by convention or by law, that is used as a standard for measurement of the same kind of quantity. Any other quantity of that kind can be expressed as a multi ...
to the language.


Interaction

The Julia official distribution includes an interactive command-line
read–eval–print loop A read–eval–print loop (REPL), also termed an interactive toplevel or language shell, is a simple interactive computer programming environment that takes single user inputs, executes them, and returns the result to the user; a program written ...
(REPL), with a searchable history,
tab completion Command-line completion (also tab completion) is a common feature of command-line interpreters, in which the program automatically fills in partially typed commands. Command line interpreters are programs that allow a user to interact with the u ...
, and dedicated help and
shell Shell may refer to: Architecture and design * Shell (structure), a thin structure ** Concrete shell, a thin shell of concrete, usually with no interior columns or exterior buttresses ** Thin-shell structure Science Biology * Seashell, a hard o ...
modes, which can be used to experiment and test code quickly. The following fragment represents a sample session example where strings are concatenated automatically by println: julia> p(x) = 2x^2 + 1; f(x, y) = 1 + 2p(x)y julia> println("Hello world!", " I'm on cloud ", f(0, 4), " as Julia supports recognizable syntax!") Hello world! I'm on cloud 9 as Julia supports recognizable syntax! The REPL gives user access to the system shell and to help mode, by pressing ; or ? after the prompt (preceding each command), respectively. It also keeps the history of commands, including between sessions. Code can be tested inside Julia's interactive session or saved into a file with a .jl extension and run from the command line by typing: $ julia Julia uses
UTF-8 UTF-8 is a variable-length character encoding used for electronic communication. Defined by the Unicode Standard, the name is derived from ''Unicode'' (or ''Universal Coded Character Set'') ''Transformation Format 8-bit''. UTF-8 is capable of ...
, e.g. for source code, meaning also allowing as an option common math symbols for many operators, such as ∈ for the in operator, typable with \in then pressing (i.e. uses
LaTeX Latex is an emulsion (stable dispersion) of polymer microparticles in water. Latexes are found in nature, but synthetic latexes are common as well. In nature, latex is found as a milky fluid found in 10% of all flowering plants (angiosperms ...
codes, or also possible by simply copy-pasting, e.g. possible for
sqrt In mathematics, a square root of a number is a number such that ; in other words, a number whose ''square'' (the result of multiplying the number by itself, or  ⋅ ) is . For example, 4 and −4 are square roots of 16, because . ...
and cbrt functions). Julia has support for Unicode 14.0 (from 2021, and 1.9-DEV supports the latest Unicode 15.0), for the languages of the world, even for source code, e.g. variable names (while not using English isn't recommended for code for others to read e.g. package names). Julia is supported by Jupyter, an online interactive "notebooks" environment, an
Pluto.jl
a "''reactive'' notebook" (where notebooks are saved as pure Julia files), a possible replacement for the former kind. The REPL can be extended with additional modes, and has been with packages, e.g. with an SQL mode, for database access, and RCall.jl adds an , to work with the R language.


Use with other languages

Julia is in practice interoperable with other languages (e.g. majority of top 10–20 languages in popular use). Julia's ccall keyword is used to call C-exported or Fortran shared library functions individually, and packages are available to allow calling other languages e.g. Python, R, MATLAB, C# (and other .NET languages with DotNET.jl), JavaScript, Java (and other JVM languages, such as Scala with JavaCall.jl). And packages for other languages allow to call to Julia, e.g. from Python, R,
Rust Rust is an iron oxide, a usually reddish-brown oxide formed by the reaction of iron and oxygen in the catalytic presence of water or air moisture. Rust consists of hydrous iron(III) oxides (Fe2O3·nH2O) and iron(III) oxide-hydroxide (FeO( ...
, or Ruby, such as with pyjulia and PythonCall.jl/juliacall for Python and a different JuliaCall package for R. Julia has also been used for hardware, i.e. to compile to
VHDL The VHSIC Hardware Description Language (VHDL) is a hardware description language (HDL) that can model the behavior and structure of digital systems at multiple levels of abstraction, ranging from the system level down to that of logic gate ...
, as a High-level Synthesis (HLS) tool (for e.g. FPGAs). Julia has packages supporting markup languages such as
HTML The HyperText Markup Language or HTML is the standard markup language for documents designed to be displayed in a web browser. It can be assisted by technologies such as Cascading Style Sheets (CSS) and scripting languages such as JavaSc ...
(and also for
HTTP The Hypertext Transfer Protocol (HTTP) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide We ...
),
XML Extensible Markup Language (XML) is a markup language and file format for storing, transmitting, and reconstructing arbitrary data. It defines a set of rules for encoding documents in a format that is both human-readable and machine-readable ...
, JSON and
BSON BSON () is a computer data interchange format. The name "BSON" is based on the term JSON and stands for "Binary JSON". It is a binary form for representing simple or complex data structures including associative arrays (also known as name-value ...
, and for
database In computing, a database is an organized collection of data stored and accessed electronically. Small databases can be stored on a file system, while large databases are hosted on computer clusters or cloud storage. The design of databases s ...
s (such as PostgreSQL, Mongo, Oracle, including for TimesTen, MySQL, SQLite, Microsoft SQL Server, Amazon Redshift, Vertica, ODBC) and web use in general.


Package system

Julia has a built-in
package manager A package manager or package-management system is a collection of software tools that automates the process of installing, upgrading, configuring, and removing computer programs for a computer in a consistent manner. A package manager deals wi ...
and includes a default registry system. Packages are most often distributed as source code hosted on
GitHub GitHub, Inc. () is an Internet hosting service for software development and version control using Git. It provides the distributed version control of Git plus access control, bug tracking, software feature requests, task management, continu ...
, though alternatives can also be used just as well. Packages can also be installed as binaries, using artifacts. Julia's package manager is used to query and compile packages, as well as managing environments. Federated package registries are supported, allowing registries other than the official to be added locally.


Implementation

Julia's core is implemented in Julia and C, together with
C++ C++ (pronounced "C plus plus") is a high-level general-purpose programming language created by Danish computer scientist Bjarne Stroustrup as an extension of the C programming language, or "C with Classes". The language has expanded significan ...
for the LLVM dependency. The code parsing and code-lowering are implemented in FemtoLisp, a Scheme dialect (that parser can however be switched out at runtime, with the pure-Julia package ''JuliaSyntax.jl'', a drop-in, faster replacement, usually, and it "greatly improves parser error messages in various cases", thus it's being considered as an addition to Julia, first as a non-default option in 1.10.0, but can already be used in older versions). A non-default parser package ''Parser.jl'' (for e.g. much faster
floating-point number In computing, floating-point arithmetic (FP) is arithmetic that represents real numbers approximately, using an integer with a fixed precision, called the significand, scaled by an integer exponent of a fixed base. For example, 12.345 can be r ...
parsing on Windows) is available, already used indirectly by some packages, but is also being considered for inclusion into Julia. The LLVM compiler infrastructure project is used as the back end for generation of 64-bit or 32-bit optimized
machine code In computer programming, machine code is any low-level programming language, consisting of machine language instructions, which are used to control a computer's central processing unit (CPU). Each instruction causes the CPU to perform a ve ...
depending on the platform Julia runs on. With some exceptions (e.g., PCRE, which is being considered for removal in Julia 2.0; Julia already has alternative regex libraries, e.g. ''RE2.jl'' for Google's re2, ''StrRegex.jl'' and ''ReadableRegex.jl''), the standard library is implemented in Julia. A very notable aspect of Julia's implementation is its speed, which is often within a factor of two relative to fully optimized C code (and thus often an order of magnitude faster than Python or R). Development of Julia began in 2009 and an open-source version was publicized in February 2012.


Current and future platforms

Julia has tier 1
macOS macOS (; previously OS X and originally Mac OS X) is a Unix operating system developed and marketed by Apple Inc. since 2001. It is the primary operating system for Apple's Mac computers. Within the market of desktop and lapt ...
support, meaning for Intel-based Macs, but also for the new
Apple M1 Apple M1 is a series of ARM-based systems-on-a-chip (SoCs) designed by Apple Inc. as a central processing unit (CPU) and graphics processing unit (GPU) for its Mac desktops and notebooks, and the iPad Pro and iPad Air tablets. The M1 c ...
-based Macs, by either ''running in Rosetta 2 emulation'', or, while then, with tier 2 native (non-Rosetta) support with Julia 1.8 (unlike the older LTS version of Julia which only has tier 3 (experimental) support; Windows on ARM has no official support yet). The work on that support (i.e. without emulation) is mostly done, and many programs work with Julia 1.8.0. Julia was prior to 1.8.0 claimed to work "ok" on M1 Macs (at reduced performance) through the (automatic) use of Rosetta 2 (that needs to emulate Julia). Since Julia uses JIT, Julia generates native machine code directly, before a function is first run (i.e. a different approach than compiling to
bytecode Bytecode (also called portable code or p-code) is a form of instruction set designed for efficient execution by a software interpreter. Unlike human-readable source code, bytecodes are compact numeric codes, constants, and references (norma ...
, that you distribute by default, to be run on a
virtual machine In computing, a virtual machine (VM) is the virtualization/ emulation of a computer system. Virtual machines are based on computer architectures and provide functionality of a physical computer. Their implementations may involve specialized h ...
(VM), as with e.g. Java/ JVM; then translated from the bytecode while running, as done by Dalvik on older versions of Android). Julia has four support tiers. All
IA-32 IA-32 (short for "Intel Architecture, 32-bit", commonly called i386) is the 32-bit version of the x86 instruction set architecture, designed by Intel and first implemented in the 80386 microprocessor in 1985. IA-32 is the first incarnation o ...
processors completely implementing the i686 subarchitecture are supported and all 64-bit
x86-64 x86-64 (also known as x64, x86_64, AMD64, and Intel 64) is a 64-bit version of the x86 instruction set, first released in 1999. It introduced two new modes of operation, 64-bit mode and compatibility mode, along with a new 4-level paging ...
(aka
amd64 x86-64 (also known as x64, x86_64, AMD64, and Intel 64) is a 64-bit version of the x86 instruction set, first released in 1999. It introduced two new modes of operation, 64-bit mode and compatibility mode, along with a new 4-level paging m ...
), i.e. all less than about a decade old are supported.
ARMv8 ARM (stylised in lowercase as arm, formerly an acronym for Advanced RISC Machines and originally Acorn RISC Machine) is a family of reduced instruction set computer (RISC) instruction set architectures for computer processors, configured ...
(
AArch64 AArch64 or ARM64 is the 64-bit extension of the ARM architecture family. It was first introduced with the Armv8-A architecture. Arm releases a new extension every year. ARMv8.x and ARMv9.x extensions and features Announced in October 2011, AR ...
) processors are supported on second tier, and ARMv7 and ARMv6 (AArch32) are supported with some caveats (lower tier) for Julia 1.0.x and also had official executables for later versions, while 32-bit ARM support was later downgraded to tier 3 (however, unofficial binaries are available for Julia 1.5.1). Hundreds of packages are GPU-accellerated:
CUDA CUDA (or Compute Unified Device Architecture) is a parallel computing platform and application programming interface (API) that allows software to use certain types of graphics processing units (GPUs) for general purpose processing, an approach ...
(i.e. Nvidia GPUs; implementing PTX) has tier 1 support, with the help of an external package. There are also additionally packages supporting other accelerators, such as Google's TPUs, and some Intel (integrated) GPUs, through oneAPI.jl, and AMD's GPUs have support with e.g.
OpenCL OpenCL (Open Computing Language) is a framework for writing programs that execute across heterogeneous platforms consisting of central processing units (CPUs), graphics processing units (GPUs), digital signal processors (DSPs), field-progra ...
; and experimental support for the AMD ROCm stack. Julia's downloads page provides executables (and source) for all the officially supported platforms. On some platforms, Julia may need to be compiled from source code (e.g., the original
Raspberry Pi Raspberry Pi () is a series of small single-board computers (SBCs) developed in the United Kingdom by the Raspberry Pi Foundation in association with Broadcom. The Raspberry Pi project originally leaned towards the promotion of teaching basic ...
), with specific build options, which has been done and unofficial pre-built binaries (and build instructions) are available. Julia has been built for several ARM platforms, from small Raspberry Pis to (recent) top-1 supercomputer Fugaku's ARM-based A64FX. PowerPC (64-bit) has tier 3 support, meaning it "may or may not build". Julia is now supported in
Raspbian Raspberry Pi OS (formerly Raspbian) is a Unix-like operating system based on the Debian Linux distribution for the Raspberry Pi family of compact single-board computers. First developed independently in 2012, it has been produced as the primary ...
while support is better for newer Pis, e.g., those with ARMv7 or newer; the Julia support is promoted by the
Raspberry Pi Foundation The Raspberry Pi Foundation is a British charity and company founded in 2009 to promote the study of basic computer science in schools, and is responsible for developing the Raspberry Pi single-board computers. Foundation The Raspberry Pi Foun ...
. There is also support for web browsers/
JavaScript JavaScript (), often abbreviated as JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. As of 2022, 98% of websites use JavaScript on the client side for webpage behavior, of ...
through JSExpr.jl; and the alternative language of web browsers, WebAssembly, has minimal support for several upcoming external Julia projects. Julia can compile to ARM; thus, in theory, Android apps can be made with the NDK, but for now Julia has been made to run under Android only indirectly, ''i.e.'' with a Ubuntu chroot on Android. While Julia requires an
operating system An operating system (OS) is system software that manages computer hardware, software resources, and provides common services for computer programs. Time-sharing operating systems schedule tasks for efficient use of the system and may also i ...
by default, and has no official support to run without or on
embedded system An embedded system is a computer system—a combination of a computer processor, computer memory, and input/output peripheral devices—that has a dedicated function within a larger mechanical or electronic system. It is ''embedded'' ...
platforms like
Arduino Arduino () is an open-source hardware and software company, project, and user community that designs and manufactures single-board microcontrollers and microcontroller kits for building digital devices. Its hardware products are licensed under ...
, Julia code has still been run, with some limitations, on a baremetal 16 
MHz The hertz (symbol: Hz) is the unit of frequency in the International System of Units (SI), equivalent to one event (or cycle) per second. The hertz is an SI derived unit whose expression in terms of SI base units is s−1, meaning that one he ...
8-bit AVR-microcontroller Arduino with 2 KB RAM (plus 32 KB of flash memory).


Adoption

Julia has been adopted by many universities including
MIT The Massachusetts Institute of Technology (MIT) is a private land-grant research university in Cambridge, Massachusetts. Established in 1861, MIT has played a key role in the development of modern technology and science, and is one of the m ...
, Stanford, and
UC Berkeley The University of California, Berkeley (UC Berkeley, Berkeley, Cal, or California) is a public land-grant research university in Berkeley, California. Established in 1868 as the University of California, it is the state's first land-grant uni ...
. Large private firms across many sectors have adopted the language including
Amazon Amazon most often refers to: * Amazons, a tribe of female warriors in Greek mythology * Amazon rainforest, a rainforest covering most of the Amazon basin * Amazon River, in South America * Amazon (company), an American multinational technolog ...
, IBM,
BlackRock BlackRock, Inc. is an American multi-national investment company based in New York City. Founded in 1988, initially as a risk management and fixed income institutional asset manager, BlackRock is the world's largest asset manager, with trill ...
,
JP Morgan JPMorgan Chase & Co. is an American Multinational corporation, multinational Investment banking, investment bank and financial services holding company headquartered in City of New York, New York City and Delaware General Corporation Law, inco ...
, ASML, and many of the largest pharma companies. Julia has also been used in government agencies like
NASA The National Aeronautics and Space Administration (NASA ) is an independent agencies of the United States government, independent agency of the US federal government responsible for the civil List of government space agencies, space program ...
and the
FAA The Federal Aviation Administration (FAA) is the largest transportation agency of the U.S. government and regulates all aspects of civil aviation in the country as well as over surrounding international waters. Its powers include air traffic m ...
as well as every US national energy laboratory.


Scientific computing

* The Climate Modeling Alliance selected Julia for implementing their next generation global climate model to provide insight into the effects and challenges of climate change. * NASA models spacecraft separation dynamics, analyzes (
TRAPPIST The Trappists, officially known as the Order of Cistercians of the Strict Observance ( la, Ordo Cisterciensis Strictioris Observantiae, abbreviated as OCSO) and originally named the Order of Reformed Cistercians of Our Lady of La Trappe, are a ...
) exoplanet datasets and
cosmic microwave background In Big Bang cosmology the cosmic microwave background (CMB, CMBR) is electromagnetic radiation that is a remnant from an early stage of the universe, also known as "relic radiation". The CMB is faint cosmic background radiation filling all spac ...
data from the Big Bang. * The Brazilian INPE plans space missions and simulates
satellite A satellite or artificial satellite is an object intentionally placed into orbit in outer space. Except for passive satellites, most satellites have an electricity generation system for equipment on board, such as solar panels or radioi ...
s in Julia. * CERN uses Julia for the Large Hadron Collider (
LHCb experiment The LHCb (Large Hadron Collider beauty) experiment is one of eight particle physics detector experiments collecting data at the Large Hadron Collider at CERN. LHCb is a specialized b-physics experiment, designed primarily to measure the paramet ...
).


Other notable uses

* The Federal Reserve Bank of New York created economic models of the United States with Julia in 2015 (ported from
MATLAB MATLAB (an abbreviation of "MATrix LABoratory") is a proprietary multi-paradigm programming language and numeric computing environment developed by MathWorks. MATLAB allows matrix manipulations, plotting of functions and data, implementa ...
), and its later version 1.3 includes estimating
COVID-19 Coronavirus disease 2019 (COVID-19) is a contagious disease caused by a virus, the severe acute respiratory syndrome coronavirus 2 (SARS-CoV-2). The first known case was identified in Wuhan, China, in December 2019. The disease quickly ...
shocks in 2021. *
BlackRock BlackRock, Inc. is an American multi-national investment company based in New York City. Founded in 1988, initially as a risk management and fixed income institutional asset manager, BlackRock is the world's largest asset manager, with trill ...
analyzes
time series In mathematics, a time series is a series of data points indexed (or listed or graphed) in time order. Most commonly, a time series is a sequence taken at successive equally spaced points in time. Thus it is a sequence of discrete-time data. Ex ...
using Julia. * Aviva calculates risk for insurance with Julia. * Mitre Corporation produced verification software for published election results using Julia.


See also

*
Comparison of numerical-analysis software The following tables provide a comparison of numerical-analysis software. Applications General Operating system support The operating systems the software can run on natively (without emulation). Language features Colors indicate ...
* Comparison of statistical packages *
Differentiable programming Differentiable programming is a programming paradigm in which a numeric computer program can be differentiated throughout via automatic differentiation. This allows for gradient-based optimization of parameters in the program, often via grad ...
* JuMP an algebraic modeling language for mathematical optimization embedded in Julia


Notes


References


Further reading

* * * * Tobin A Driscoll and Richard J. Braun (Aug. 2022). "Fundamentals of Numerical Computation: Julia Edition". SIAM. . * C. T. Kelley (2022). "Solving Nonlinear Equations with Iterative Methods: Solvers and Examples in Julia", SIAM. . *


External links

* * {{Authority control 2012 software Array programming languages Articles with example Julia code Notebook interface Cross-platform software Data mining and machine learning software Data-centric programming languages Dynamically typed programming languages Free compilers and interpreters Free computer libraries Free data analysis software Free data visualization software Free software programmed in C Free software programmed in Julia Free software projects Free statistical software Functional languages High-level programming languages Homoiconic programming languages Lisp programming language family Multi-paradigm programming languages Numerical analysis software for Linux Numerical analysis software for macOS Numerical analysis software for Windows Numerical libraries Numerical linear algebra Numerical programming languages Object-oriented programming languages Parallel computing Procedural programming languages Programming languages Programming languages created in 2012 Software using the MIT license Statistical programming languages Text-oriented programming languages Programming languages supporting units of measure