This is a list of resources and articles about the Julia language.
Jump to: Documentation • Libraries • Other
16/5/2023 8:00 Threadpools in Julia: My favorite new feature in Julia v.1.9: spawn as many tasks as you want, but keep a thread reserved for the REPL, so it continues to respond instantly.
13/5/2023 12:52 Julia 1.9.0 lives up to its promise
12/5/2023 6:31 Extreme Multi-Threading: C++ and Julia 1.9 Integration: With Julia v.1.9 we can call Julia libraries from multi-threaded C++ programs, apparently. This article shows you how.
10/5/2023 7:00 Julia 1.9 Released: Julia v.1.9 is now officially released. I’ve been enjoying the 1.9 series since the beta releases. The new version offers significant performance improvements and is even more convenient for development.
14/4/2023 10:45 Inviscid and incompressible Navier-Stokes equations in 2D implemented in Julia and compiled to WASM: This is quite wonderful and amazing: a Julia fluid solver compiled to WASM and running in the browser. Users can create flow boundaries with the mouse.
06/04/2023 21:21 Julia for Biologists: “Major computational challenges exist in relation to the collection, curation, processing and analysis of large genomic and imaging datasets, as well as the simulation of larger and more realistic models in systems biology. Here we discuss how a relative newcomer among programming languages—Julia—is poised to meet the current and emerging demands in the computational biosciences and beyond. Speed, flexibility, a thriving package ecosystem and readability are major factors that make high-performance computing and data analysis available to an unprecedented degree. We highlight how Julia’s design is already enabling new ways of analyzing biological data and systems, and we provide a list of resources that can facilitate the transition into Julian computing.”
2/4/2023 10:30 Solving one based indexing: Finally, a solution to the non-problem of 1-based indexing in Julia that should satisfy everybody.
1/4/2023 7:59 Julia’s latency: Past, present and future
18/3/2023 10:19 Practical guide: how to contribute to open source Julia projects: This is helpful for those interested in making their first contribution to the ecosystem.
3/12/2022 12:38 Metadata in DataFrames.jl: why and how?: Valuable and detailed introduction to this useful feature of DataFrames.jl, by one of its developers and the author of Julia for Data Analysis.
22/11/2022 8:26 Here’s why quantum computing could be the big break for the Julia Language: Introducing Yao.jl, a Julia library for quantum computing.
16/11/2022 8:41 Introducing Braket.jl - Quantum Computing with Julia: “Braket.jl is a new, experimental package that lets you build quantum circuits and programs in Julia and run them on Amazon Braket.”
11/11/2022 8:00 Bridging HPC Communities through the Julia Programming Language: “The Julia programming language has evolved into a modern alternative to fill existing gaps in scientific computing and data science applications.”
10/11/2022 9:55 SciML: Differentiable Modeling and Simulation Combined with Machine Learning: A new hub for Julia’s SciML documentation.
25/10/2022 9:30 The best Julia programming books going into 2023: Description of books the author has used plus notes about others, including books arriving in the near future.
5/9/2022 9:51 Swalbe.jl: A lattice Boltzmann solver for thin film hydrodynamics: A Julia program.
31/8/2022 14:01 Review of Interactive Visualization and Plotting with Julia by Zea: A knowledgeable author poorly served by a careless publisher.
18/8/2022 9:23 Julia 1.8 released: I’ve been using the betas for a while and they’ve been stable and responsive. The highlights in 1.8 are typed non-constant globals and improvements in precompilation, both significant for all users.
5/08/2022 07:32 My Julia book available for pre-order and early access
27/7/2022 8:27 JuliaCon 2022 Agenda
25/4/2022 12:26 Julia REPL ↓ trick: Stefan Karpinski reveals a secret superpower in plain sight: “After evaluating a command from history in the REPL, you can press ↓ and get the next command after that one, so you can replay a sequence of commands by finding the first one and doing ↓⏎ repeatedly”.
6/4/2022 14:46 Jack Dongarra, who made supercomputers usable, awarded 2021 ACM Turing prize: The creative force behind LINPACK and BLAS says that Julia is a good candidate for the next computing paradigm.
11/3/2022 11:55 Julia v1.8 Release Notes: Julia 1.8.0 is in beta. These release notes include many welcome enhancements. Several of the new features relate to the creation of sysimages, and appear to make it easier to produce smaller compiled code.
8/2/2022 7:47 Julia v1.7.2 Released: “As a patch release, 1.7.2 contains no new features or breaking changes, only bug fixes, documentation improvements, and performance improvements. […] We recommend that anyone currently using 1.7.0 or 1.7.1 upgrade to 1.7.2. Note that 1.7 on Travis, AppVeyor, Cirrus, and GitHub Actions now refers to 1.7.2.”
4/2/2022 18:48 Why Menlo Ventures Invested in Julia Computing
22/1/2022 12:53 Pluto 0.17.6 Announced: The latest version of Pluto, the computational notebook for Julia, has some great new features, including a dark mode and the ability to print logging messages from running code in the notebook.
22/1/2022 11:37 Macroeconomic Modeling: “The Federal Reserve Bank of New York publishes its trademark Dynamic Stochastic General Equilibrium models in Julia.”
12/1/2022 7:33 State of machine learning in Julia: …as of Jan, 2022.
06/01/2022 20:56 PlutoUI Demonstration: Using the PlutoSliderServer.
4/1/2022 16:43 Fermi.jl: A Modern Design for Quantum Chemistry: “we introduce the quantum chemistry package Fermi.jl, which contains the first implementations of post-Hartree–Fock methods written in Julia. Its design makes use of many Julia core features, including multiple dispatch, metaprogramming, and interactive usage. Fermi.jl is a modular package, where new methods and implementations can be easily added to the existing code. Furthermore, it is designed to maximize code reusability by relying on general functions with specialized methods for particular cases.”
2/12/2021 11:23 Julia 1.7 Highlights: “After 4 betas and 3 release candidates, Julia version 1.7 has finally been released.”
9/11/2021 13:15 Concurrency in Julia: An overview of the easiest-to-approach facilities for parallel and concurrent computation in Julia, with a demonstration of the effects of a new feature: thread migration. Discussed on Hacker News.
2/11/2021 10:50 Bash shell completions for Julia: Bash shell completions contextually finish what you’re typing when you hit the tab key. This project tells the shell about Julia commands, to save you keystrokes.
31/10/2021 9:06 Julia Data Science: A free and open-source book in several formats, including a paperback on amazon. Confined mainly to a brief language introduction, dataframes, and plotting with Mackie.
21/10/2021 10:49 Composability in Julia: Implementing Deep Equilibrium Models via Neural ODEs: “The SciML Common Interface defines a complete set of equation solving techniques, from differential equations and optimization to nonlinear solves and integration (quadrature), in a way that is made to naturally mix with machine learning. In this sense, there is no difference between the optimized libraries being used for physical modeling and the techniques used in machine learning: in the composable ecosystem of Julia, these are one and the same.[…] With a composable package ecosystem, the only thing holding you back is the ability to figure out new ways to compose the parts.”
13/10/2021 13:15 Digging into Julia’s package system: How Julia’s excellent package system eases development and code sharing.
7/10/2021 10:37 Struct Destructuring in Julia: The soon-to-arrive Julia v.1.7 has a new destructuring syntax for structs. I take a look at what it’s good for.
5/10/2021 15:37 Magnification Shape Styling in Lens Insets in Julia: In the current version of
Plotsyou can style the lines with which the magnification shape is drawn when making lens insets.
4/10/2021 13:15 What’s coming in Julia 1.7: New features on the way.
23/9/2021 23:19 Julia v1.7 Release Notes
5/9/2021 10:08 optimizer: supports callsite annotations of inlining: fixes #18773
19/7/2021 11:16 Julia Computing Raises $24M Series A: “Julia Computing will use the funding to further develop and advance its secure, high-performance JuliaHub cloud platform and to grow the Julia ecosystem.”
8/7/2021 13:19 Pluto’s built-in package management: “Starting with version 0.15, Pluto has a built-in package manager, which means:
- Packages are automatically installed when you use import or using.
- Your package environment is stored inside the notebook file. When someone else opens your notebook with Pluto, the exact same package environment will be used, and packages will work on their computer.
19/6/2021 11:58 ImageClipboard.jl: Copy & Paste images with Julia
25/05/2021 12:09 Julia v.1.6 release addresses latency issues: Julia’s new release turns the “time to first plot” problem into (almost) a non-issue.
22/5/2021 9:35 Julia Meta Types: “One of my favorite tools and a double edged blade in the Julia programming language are Meta Types. Loosely related to Metaprogramming, meta types, derived from the Greek word μετα, ‘transcend’ beyond a simple data structure. Rather than simply describe a physical data structure in memory, a meta type includes information on the type itself.”
6/5/2021 20:44 ModelingToolkit.jl: “A modeling framework for automatically parallelized scientific machine learning (SciML) in Julia. A computer algebra system for integrated symbolics for physics-informed machine learning and automated transformations of differential equations”.
Documentation and tutorials
Python Criticism from a Julia Perspective: Contains, among other interesting nuggets, a description of a Julia REPL facility for discovering a list of methods that can act on a given combination of types (I had no idea).
What does it mean that a data frame is a collection of rows?: The main developer of Dataframes.jl explains its interface in this illuminating article.
How to Create Software Packages with Julia Language: “This article will teach you how to create an open-source software package in the Julia programming language and develop your package using Git-based workflows.” This tutorial is a detailed and gentle on-ramp to the subject.
Ref ref: “Today I want to discuss the Ref type defined in Base Julia. The reason is that it is often used in practice, but it is not immediately obvious what the design behind Ref is.”
Signal Processing with Julia Language: A tutorial series.
Multithreading in Julia Language Applied to Cell Lists Algorithm: “This article teaches you how to use multithreading in Julia Language to parallelize serial algorithms. As a practical example, we explore how to convert the serial Cell Lists algorithm”.
Type-Dispatch Design: Post Object-Oriented Programming for Julia: “I am going to try to explain in detail the type-dispatch design which is used in Julian software architectures. It’s modeled after the design of many different packages and Julia Base […] Julia is built around types. Software architectures in Julia are built around good use of the type system. This makes it easy to build generic code which works over a large range of types and gets good performance. The result is high-performance code that has many features. In fact, with generic typing, your code may have more features than you know of! The purpose of this tutorial is to introduce the multiple dispatch designs that allow this to happen.”
Functional One-Liners in Julia: Introduction to currying used in conjunction with broadcasting, with examples.
HPC Cafe: An introduction to the Julia programming language for HPC: This video is packed with insights about high performance computing with Julia, and is easy to follow.
PlutoUI Demonstration: A live demonstration of PlutoUI controls, served with the PlutoSliderServer.
Writing type-stable Julia code: Using many examples, this tutorial will help you understand how to do what’s in the title.
Julia macros for beginners: A clear introduction.
What is a Symbol in Julia?: Stefan Karpinski’s masterful explanation of what a Symbol really is.
Particle Simulations with Julia: Excellent tutorial and demonstration available as a web page and as a Pluto notebook. Contains fascinating animations of error propagation in a running simulation.
Successful Static Compilation of Julia Code for use in Production: “a successful experiment to statically compile a piece of Julia code into a small
.solibrary on Linux, which is then loaded from Python and used in training of a deep learning model.”
Data Science in Julia for Hackers: “This book is currently in a beta version. We are looking forward to getting feedback and criticism”.
Parallel Computing and Scientific Machine Learning (SciML): Methods and Applications: “This book is a compilation of lecture notes from the MIT Course 18.337J/6.338J: Parallel Computing and Scientific Machine Learning…a live document, updating to continuously add the latest details on methods from the field of scientific machine learning and the latest techniques for high-performance computing.”
Guide for writing shell scripts in Julia: From 2019, but may still be useful.
Differentiation for Hackers: “The goal of this handbook is to demystify algorithmic differentiation, the tool that underlies modern machine learning.”
Julia Books: A list from Julia headquarters of works available now or on the way.
Convolutions in image processing: Not much about Julia, but a superb demonstration of how simple convolutions can create blurring, sharpening, and edge detection. Ends by showing how to speed up the calculation using FFTs.
Bayesian Estimation of Differential Equations: Tutorials showing how to use Turing.jl to estimate parameters of ODEs from data.
Using Julia on the HPC: A survey of simple examples of using Julia in HPC contexts.
Triangle frenzy: A case study using CUDA for some graphics calculations.
Julia: The Greeks and Math operators at the command line via LaTeX: If you haven’t tried Julia, this may whet your appetite.
PairPlots.jl: Julia package for making corner plots, the statistical visualization that lets you compare a collection of distributions all at once.
FunSQL.jl: Julia library for compositional construction of SQL queries’
PlutoSliderServer.jl: Web server to run just the
@bindparts of a Pluto.jl notebook.
Books.jl: Creates books with embedded output from Julia code, using Pandoc.
Pandoc.jl: Pandoc Interface and Types in Julia: Run Pandoc and write Pandoc filters in Julia. Uses the json serialization, so won’t be as fast as Lua filters.
Stipple: A reactive user interface library for use with Genie. Standard use is over a websocket, somewhat similarly to Phoenix Liveview. Seems quite useful for building interactive web applications with Julia, but Unfortunately undocumented, like most Julia packages.
Julia library for stylized terminal output: Create beautiful output in the terminal.
Weave.jl: Scientific reports/literate programming for Julia: “Weave is a scientific report generator/literate programming tool for the Julia programming language. It resembles Pweave, knitr, R Markdown, and Sweave.”
Changing Physics education with Julia: Interactivity in physics education; why Julia is an ideal language for physics education; applied to teaching dynamical systems and the DynamicalSystems library, of which the author is the maintainer, and his textbook.
TerminalPager.jl: This lovely package, announced April 19th, 2021, lets you page horizontally and vertically through a dataframe in the REPL, sort of like paging through a file with
ImplicitPlots.jl: Julia package for the plotting of plane curves and surfaces: “Plot plane curves defined by an implicit function f(x,y)=0.”
Turing.jl: “Bayesian inference with probabilistic programming.”
WaterLily.jl: Fast and simple fluid simulator in Julia: “WaterLily.jl solves the unsteady incompressible 2D or 3D Navier-Stokes equations on a Cartesian grid. The pressure Poisson equation is solved with a geometric multigrid method. Solid boundaries are modelled using the Boundary Data Immersion Method.”
ThreadPools: A set of macros for concurrency. Last updated around 2021; some of its function is provided by the new interactive task feature in Julia 1.9.
GridWorlds.jl: Help! I’m lost in the flatland!: “A package for creating grid world environments for reinforcement learning in Julia.“ Juliacon presentation here.
JuliaHEP: High energy physics packages. Includes compatibility layers and partial replacements for ROOT.
Bayesian Statistics using Julia and Turing: “Welcome to the repository of tutorials on how to do Bayesian Statistics using Julia and Turing.”
Merly.jl: Micro framework for web programming in Julia: Seems similar to Oxygen, but hasn’t been updated since about 2020.
Downloads.jl: “The Downloads package provides a single function, download, which provides cross-platform, multi-protocol, in-process download functionality implemented with libcurl.” This is now used by the package manager to retrieve packages.
JuliaSymbolics: “JuliaSymbolics is the Julia organization dedicated to building a fully-featured and high performance Computer Algebra System (CAS) for the Julia programming language.”
TikzGraphs: Exploiting the superb TikZ system from Julia to create high-quality graph diagrams (“graph” in the node-edge sense) conveniently.
CSV: A powerful package for dealing with data stored in comma (or any delimiter) separated value files.
Yao: “Welcome to Yao, a Flexible, Extensible, Efficient Framework for Quantum Algorithm Design. Yao (幺) is the Chinese character for normalized but not orthogonal.”
APL.jl: APL in Julia, with all the beautiful characters, and with Julia’s speed.
JuliaAstroSim/AstroNbodySim.jl: “Unitful and differentiable gravitational N-body simulation code in Julia”.
PureFun.jl: Immutable containers for Julia.
SuiteSparseGraphBLAS.jl: An Introduction: “This blog post serves a couple purposes. The first is to introduce Julia users to GraphBLAS, and the features and performance of the
SuiteSparseGraphBLAS.jlpackage. The second is an update on new features in versions 0.6 and 0.7 as well as a roadmap for the near future.”
JuliaFolds/Folds.jl: A unified interface for sequential, threaded, and distributed fold: Powerful, convenient, does what it’s supposed to do.
Oxygen.jl: A breath of fresh air for programming web apps in Julia: A micro-framework that provides routing and request/response handling.
How the Julia language is making it easy for programmers to use GPU capabilities with JuliaGPU: An interview with Tim Besard, a principal contributor to JuliaGPU.
Agents.jl: A Julia package for agent-based modeling. Very easy to set up simulations on a variety of spaces, including Open Street Map.
EmacsVterm.jl: “Better integration of Julia REPL with Emacs vterm terminal.”
TensorCast.jl: It slices, it dices, it splices!: “This package lets you work with multi-dimensional arrays in index notation, by defining a few macros which translate this to broadcasting, permuting, and reducing operations.”
PlanetOrbits.jl: Tools for solving and displaying Keplerian orbits for exoplanets.: “The primary use case is mapping Keplerian orbital elements into Cartesian coordinates at different times. A Plots.jl recipe is included for easily plotting orbits.”
Introduction to GRUtils: “GRUtils is a refactoring of the module jlgr from GR, a graphics package for Julia. The purpose of GRUtils is to provide the main utilities of jlgr in a more ‘Julian’ and modular style, easier to read, and facilitate code contributions by others.”
Accuracy of tropical peat and non-peat fire forecasts enhanced by simulating hydrology: Fire forecasting using Flux.jl.
A Look at Communication-Intensive Performance in Julia: “if programmers properly balance the computation to communication ratio, Julia can actually outperform C/MPI in a cluster computing environment.”
Nonlinear Dynamics: “A Concise Introduction Interlaced with Code”.
What’s bad about Julia?: A sophisticated and detailed critique, concentrating especially on the type system, from the point of view of a Julia user.
From Common Lisp to Julia: A personal journey from CL to Julia from a graphics and games programmer. Interesting observations, badly in need of editing.
C. Brenhin Keller: An assistant Professor of Earth Sciences at Dartmouth using Julia in research and teaching. Many links to Julia Earth science resources.
Julia’s Big Problem With Namespace: Points out how
usingtwo modules that
exportthe same names leads to a naming conflict.
Comparing Julia to Performance Portable Parallel Programming Models for HPC: “Julia programs enjoys comparable performance to native C/C++ solutions.[…] Julia gets the unique opportunity to provide best-in-class performance on some of the latest hardware platforms.”
GitHub - JuliaDynamics/NonlinearDynamicsTextbook: coming soon: A repository for the book Nonlinear Dynamics.
Julia 1.6.0 released: Version 1.6.0 was officially released on March 24th, 2021. I’ve been using 1.6.0-rc1 for a while, and it has been stable and fast with precompilation, reducing the “time to first plot” to just a few seconds.
Climate Modeling Alliance: “We are building a new Earth system model that leverages recent advances in the computational and data sciences to learn directly from a wealth of Earth observations from space and the ground. Our model will harness more data than ever before, providing a new level of accuracy to predictions of droughts, heat waves, and rainfall extremes.” The code is contained in a collection of Julia packages.
Julia: Project Workflow: Good ideas about organizing Julia projects, including how to incorporate Pluto notebooks.
Why not: from Common Lisp to Julia: Somewhat of a rebuttal to this.
Automated Code Optimization with E-Graphs: “Can programmers implement their own high-level compiler optimizations for their domain-specific scientific programs, without the requirement of them being compiler experts at all? […] can symbolic mathematics do high-level compiler optimizations or vice-versa?”
What’s great about Julia?: The other side of the coin revealed by the author of “What’s bad about Julia?”.
Switching from Common Lisp to Julia: Although written in the pre-1.0 Julia era, the author penetrates into the core of Julia’s uniqueness: “A sufficiently rich parametric type system with multiple dispatch integrated into the language and supported by a JIT compiler is the secret weapon of Julia.” An informative discussion of scientific computing in CL and Julia.
Auto-Optimization and Parallelism in DifferentialEquations.jl: A video by Chris Rackauckas describing two levels of automation for the scientist who needs to solve some differential equations efficiently: first, detect properties of the equation system to choose the best solver; but also automate the choice of what algorithm use to do that. The pieces are under the SciML ecosystem.
Why Julia is the most suitable language for science: Engaging presentation by the maintainer of the Julia dynamical systems package.
Oceananigans.jl: Fast and friendly geophysical fluid dynamics on GPUs: “Oceananigans.jl is a fast and friendly software package for the numerical simulation of incompressible, stratified, rotating fluid flows on CPUs and GPUs. Oceananigans.jl is fast and flexible enough for research yet simple enough for students and first-time programmers. Oceananigans.jl is being developed as part of the Climate Modeling Alliance project for the simulation of small-scale ocean physics at high-resolution that affect the evolution of Earth’s climate.”
Julia: The Goldilocks language: Contains some interesting details about the origins and history of Julia, along with some odd remarks (“elements of the high-level functionality of MATLAB and R with the speed of C or Ruby”).
Computer algebra in Julia: A survey.
Meshes.jl: Computational geometry and meshing algorithms in Julia
Analyzing sources of compiler latency in Julia: method invalidations: “The Julia programming language has wonderful flexibility with types, and this allows you to combine packages in unanticipated ways to solve new kinds of problems. Crucially, it achieves this flexibility without sacrificing runtime performance. It does this by running versions of code or algorithms that have been”specialized” for the specific types you are using. Creating these specializations is compilation, and when done on the fly (as is common in Julia) this is called “just in time” (JIT) compilation. Unfortunately, JIT-compilation takes time, and this contributes to latency when you first run Julia code. This problem is often summarized as “time-to-first-plot,” though there is nothing specific about plotting other than the fact that plotting libraries tend to involve large code bases, and these must be JIT-compiled.”
The Essential Tools of Scientific Machine Learning: An overview of the state of packages and libraries for scientific ML as of 2019, not confined to Julia.
2021_FortranCon Benchmarks: Comparison of of code and performance between Julia and Fortran on a 2D particle simulation.
Switching from Common Lisp to Julia: “A sufficiently rich parametric type system with multiple dispatch integrated into the language and supported by a JIT compiler is the secret weapon of Julia” and the core reason for the author’s adoption of the language for scientific computing.