A list of resources about the Julia language
- Julia documentation
- Modern Numerical Computing (MIT 18.337/6.338)
- Multidimensional algorithms and iteration
- Type-dispatch-design ≠ object-oriented programming language
- Intro to Julia tutorial (version 1.0) by Jane Herriman
- Developing Julia Packages
- Automatic Differentiation with Julia
- The Unreasonable Effectiveness of Multiple Dispatch
The Julia programming language has brought an innovative new approach to scientific computing, promising a combination of performance and productivity that is not usually available in the current set of languages that is commonly used. In solving the two- language problem, it has seen tremendous growth both in academia and industry. It has been used in domains from robotics, astronomy, and physics, to insurance and trading. It has particular relevance in the area of machine learning, with increasing use for the emerging field of differentiable computing.
Most new developers are attracted to the language due to its promise of high performance. This book shows you how and why that is possible. We talk about the design choices of the language's creators that allow such a high-performance compiler to be built. We also show you the steps that you, as an application developer, can take to ensure the highest possible performance for your code. We also tell you the ways in which your code can work with the compiler and runtime to fully utilize your hardware to the greatest extent possible.
This book is for the beginner and intermediate Julia developer who wants to fully leverage Julia's promise of performance with productivity. We assume you are proficient with one or more programming languages and have some familiarity with Julia's syntax. We do not expect you to be expert Julia programmers yet but assume that you have written small Julia programs, or that you have taken an introductory course on the language.
Design patterns are fundamental techniques for developing reusable and maintainable code. They provide a set of proven solutions that allow developers to solve problems in software development quickly. This book will demonstrate how to leverage design patterns with real-world applications.
Starting with an overview of design patterns and best practices in application design, you'll learn about some of the most fundamental Julia features such as modules, data types, functions/interfaces, and metaprogramming. You'll then get to grips with the modern Julia design patterns for building large-scale applications with a focus on performance, reusability, robustness, and maintainability. The book also covers anti-patterns and how to avoid common mistakes and pitfalls in development. You'll see how traditional object-oriented patterns can be implemented differently and more effectively in Julia. Finally, you'll explore various use cases and examples, such as how expert Julia developers use design patterns in their open source packages.
By the end of this Julia programming book, you'll have learned methods to improve software design, extensibility, and reusability, and be able to use design patterns efficiently to overcome common challenges in software development.
- StaticArrays: Statically sized arrays for Julia
- CxxWrap: Creation of Julia packages relying on
C++ libraries (equivalent to
Boost.Python
orpybind11
for Python)
- Documenter: A documentation generator for Julia.
- DocStrings: Diagnose the missing docstrings in your package. Copy paste from your REPL the smart inputs straight into your docstrings.
- Plots – powerful convenience for visualization in Julia.
- Makie is a high-performance, extendable, and multi-platform plotting ecosystem for the Julia programming language.
- PGFPlotsX is a Julia package for creating publication quality figures using the LaTeX library PGFPlots as the backend. See also this video.
- JuAFEM.jl is a finite element toolbox that provides functionalities to implement finite element analysis in Julia.
- Gridap.jl provides a set of tools for the grid-based approximation of partial differential equations (PDEs) written in the Julia programming language. The main motivation behind the development of this library is to provide an easy-to-use framework for the development of complex PDE solvers in a dynamically typed style without sacrificing the performance of statically typed languages. The library currently supports linear and nonlinear PDE systems for scalar and vector fields, single and multi-field problems, conforming and nonconforming finite element discretizations, on structured and unstructured meshes of simplices and hexahedra.
- BifurcationKit.jl aims at performing automatic bifurcation analysis of large dimensional equations F(u, λ)=0 where λ∈ℝ by taking advantage of iterative methods, sparse formulation and specific hardwares (e.g. GPU).
- tens3d and tenssurf: Maple and Mathematica packages for tensor calculation (including variant-covariant, Christoffel coefficients, differential operators…)
- juliaplots: This package makes it easy to integrate Julia code and plots into LaTeX documents