The Julia Programming Language


Star

Julia in a Nutshell



Julia is fast!

Julia was designed from the beginning for high performance. Julia programs compile to efficient native code for multiple platforms via LLVM.

Dynamic

Julia is dynamically-typed, feels like a scripting language, and has good support for interactive use.

Optionally Typed

Julia has a rich language of descriptive datatypes, and type declarations can be used to clarify and solidify programs.

General

Julia uses multiple dispatch as a paradigm, making it easy to express many object-oriented and functional programming patterns. The standard library provides asynchronous I/O, process control, logging, profiling, a package manager, and more.

Technical

Julia excels at numerical computing. Its syntax is great for math, many numeric datatypes are supported, and parallelism is available out of the box. Julia's multiple dispatch is a natural fit for defining number and array-like datatypes.

Composable

Julia packages naturally work well together. Matrices of unit quantities, or data table columns of currencies and colors, just work — and with good performance.




Ecosystem



General Computing

Build, Deploy or Embed Your Code

Julia lets you write UIs, statically compile your code, or even deploy it on a webserver. It also has powerful shell-like capabilities for managing other processes. It provides Lisp-like macros and other metaprogramming facilities.

It is also friendly with other languages, providing stable interfaces with: C, Python, R, Java, and many more.

Parallel Computing

Parallel and Heterogeneous Computing

Julia is designed for parallelism, and provides built-in primitives for parallel computing at every level: vectorization (SIMD), multithreading and distributed computing, which lets it run on supercomputers.

Julia's sophisticated compiler can also generate machine code for various hardware accelerators, such as GPUs and Xeon Phis. Write generic code that runs all platforms, without worrying about lower level details.

Machine Learning

Scalable Machine Learning

Julia provides powerful tools for deep learning (Flux and Knet), machine learning and AI. Julia’s mathematical syntax makes it an ideal way to express algorithms just as they are written in papers, build trainable models with automatic differentiation, GPU acceleration and support for terabytes of data.

Julia's rich machine learning ecosystem also provides supervised learning algorithms such as regression, decision trees, and unsupervised learning algorithms such as clustering. You can also find packages for Bayesian Networks and Markov Chain Monte Carlo.

Scientific Computing

Rich Ecosystem for Scientific Computing

Julia is designed from the ground up to be very good at numerical and scientific computing. This can be seen in the abundance of scientific tooling written in Julia, such as the state-of-the-art differential equations ecosystem (DiffEq), optimization tools (JuMP and Optim), iterative linear solvers (IterativeSolvers) and many more, that can drive all your simulations.

Julia also offers a number of domain-specific ecosystems, such as in biology (BioJulia), operations research (JuliaOpt), quantum physics (QuantumOptics), nonlinear dynamics (JuliaDynamics), quantitative economics (QuantEcon), astronomy (JuliaAstro) and ecology (EcoJulia). With a set of highly enthused developers and maintainers from various parts of the scientific community, this ecosystem will only continue to get bigger and bigger.

Data Science

Interact with your Data

The Julia data ecosystem lets you load multidimensional datasets quickly, perform aggregations, joins and preprocessing operations in parallel, and save them to disk in efficient formats. You can also perform online computations on streaming data. Whether you're looking for the convenient and familiar DataFrames, or a new approach with JuliaDB, Julia provides you a rich variety of tools. The Queryverse package acts a meta package through which you can access these tools with Julian APIs. In addition to working with tabular data, the JuliaGraphs packages make it easy to work with combinatorial data.

Julia also integrates with every popular database you've heard of, including MySQL, JDBC, ODBC, HDFS and Hive .

Visualization

Data Visualization and Plotting

Data visualization has a complicated history. Plotting software makes trade-offs between features and simplicity, speed and beauty, and a static and dynamic interface. Some packages make a display and never change it, while others make updates in real-time.

Plots.jl is a visualization interface and toolset. It sits above other backends, like GR or PyPlot, connecting commands with implementation. If one backend does not support your desired features or make the right trade-offs, you can just switch to another backend with one command. No need to change your code. No need to learn a new syntax. Plots might be the last plotting package you ever learn.






Videos from JuliaCon 2018







Packages



Julia has been downloaded over 2 million times and the Julia community has developed over 1,900 Julia packages. These include various mathematical libraries, data manipulation tools, and packages for general purpose computing. In addition to these, you can easily use libraries from Python, R, C/Fortran, C++, and Java. If you do not find what you are looking for, ask on Discourse, or even better, contribute!







Recent Blog Posts



Julia 1.0

Julia 1.0 正式發佈

Julia 1.0

Announcing the release of Julia 1.0







Talk to us







Julia Editors and IDEs



Visual Studio Code