On the Julia homepage, the goals of Julia are stated as:
- Fast
- Composable (multiple dispatch)
- Dynamic
- General
- Reproducible
- Open Source
Other informal goals would be “batteries included” (base has much of what you need), eliminating the two language problem, cross-platform, and support for parallel computation (either on 1 machine or a network; Julia having been designed in the era of parallelism).
Let me pose a question on the goal of “Fast”:
- What direction are the developers and major contributors setting for “fast” in Julia – is the direction to incorporate more SIMD, more multiprocessing, in base and libraries?
- Is there a goal to be “best in class” fast?
Base is mostly single-threaded, which is understandable, as just getting dozens of statements and thousands of functions created and working is a major undertaking. “Fast” comes from JIT compilation and multiple dispatch. Success!
Today, however, we have several JuliaSIMD packages, which vectorize and thread many functions (or your own). There is Floops for parallel execution. Package NumericExtensions.jl provides high performance computational support, with some implementations having been incorporated into base (sum, maximum, minimum). IntelVectorMath.jl ties into the Intel Vector Math Library for many base mathematical functions, achieving significant speedups.
The Development Process
Usually what I observe in code development for library functions is roughly the following:
- get it working (single threaded)
- get it working better (code flow, algorithm improvements; single threaded)
- get it working faster (use SIMD/AVX if possible)
- get it working faster (use multiprocessing, if possible)
Related to my two questions above, it could be restated – would the “philosophy” or “goal” be to get Julia base and libraries to steps 3 & 4?
I posted this in offtopic to encourage bloviating from anyone with an interest in the topic.