The Azimuth Project
Julia (changes)

Showing changes from revision #1 to #2: Added | Removed | Changed

Julia

Idea

Julia is an up-and-coming language for the rapid development of high-peformance numerical, scientific and data analysis algorithms and applications. It is open source, has a small group of highly active developers and although there is only one implementation of the language, it appears to have a stable future.Julia is an up-and-coming language for the rapid development of high-peformance numerical, scientific and data analysis algorithms and applications. It is open source, has a small group of highly active developers and although there is only one implementation of the language, it appears to have a stable future.

Technical details

Its authors describe Julia as a Scheme-derived language, although the syntax is such that numerical parts look a lot like Matlab. Although most of the core is settled, the language is still evolving with new features planned for future releases.

Some key technical points are:

  1. It has a type system which provides both inheritance and parameterised types. The language itself uses “run-time typing”, i.e., every value has a single well-defined type, but these may not be determined until actual run-time. (Thus the indirections asssociated with boxed-types is generally avoided, but requires run-time JIT compilation.)

  2. It provides generalised function dispatch (including operator overloading overloading) referred to as mulitple-dispatch.

  3. It uses LLVM in order to just-in-time compile code entered at an interactive prompt.

  4. It uses optimised math libraries (BLAS, LAPACK, etc) for well-known algorithms (eq, SVD decomposition) on “native types”.

  5. Graphical plotting, and to general integrated development environments, is under development and is best described as “usable but incomplete”.

Metaprogramming

Metaprogramming has several related meanings in practical computer languages. In C++ metagprogramming generally references to compile-time type-parameterised programming (known as “template metaprogramming”). In Julia this directly achievable as function arguments can be specified, including constraints on “type parameters”, so generic routines can be written directly.

Metaprogramming can also be taken to refer to other mechanisms for “creating code from code”, often using macros. As a scheme-based language, Julia has a macro system for creating code dynamically. (Indeed, the standard Julia libraries use this facility to avoid having large numbers of repetitive definitions of similar standard functions.)

category: software