Julia 0.5 release
github.com
github.com
Better yet, wait for the official announcement once binaries are compiled and posted for download. I believe there will be a blog post to go along with it, too.
Edit: this is a game changer for me:
> Support for multi-threading. Loops with independent iterations can be easily parallelized with the Threads.@threads macro.
"Support for arrays with indexing starting at values different from 1. The array types are expected to be defined in packages, but now Julia provides an API for writing generic algorithms for arbitrary indexing schemes (#16260)."
Originally I thought total nightmare but now I'm not sure.
My guess is that most people who prefer zero-based feel strongly about it, and most people that like one-based don't care that much. If it really doesn't matter that much, I think Julia should've gone with zero. FFTs, Vandermonde matrices (least squares), polynomials, and pretty much anything where the array subscript relates to the mathematics is cleaner with zero-based arrays.
FWIW, as someone in the latter category (liking one-based indexing), I'd say you're partially correct: I'm not emotional attached to 1-based indexing the way some 0-based folks seem to be, but it's a practical nicety and one of the things I'm really glad Julia chose to do. Making 0-based the default would definitely reduce its appeal to me.
How do you multiply two matrices that use different indexing? Ignore the indexing differences?
It's also problematic when different libraries use different conventions (0-based vs 1-based). Can you use the output of one such library to feed another?
I think the varying indices are a great feature for porting old code over from other programming languages.
I really like/liked Julia, but some things breaking between 0.2 and 0.4 made me use it a bit less.
Until now, [a, b] meant "concatenate a and b if they're arrays, make a 2-element array otherwise". This struck me as both annoyingly inconsistent and as a failure to think recursively.
Now it's always a 2-element array, possibly an array of arrays. And that's a huge change in syntax, and it's for the better. I look at many things in the 0.5 release notes and they're fixes to specific pain points I had. This has me paying attention to the language again.
But there is a lot of enthusiasm.
To you it is a better numpy/python, to me it is a faster/cleaner/more parallelizable version of R, to some people it is a cleaner/faster version of Matlab.
This could be seen as a "kitchen sink" approach but it also is very useful when you want to get things done. My gripes about Julia are really minor considering how young and ambitious the project is.
* Higher order functions now specialize on (and possibly even inline!) passed functions
* Anonymous functions are now fast, too
* Fused broadcasting can avoid intermediate allocations and only make one pass through the array
* User-extensible bounds checks allow custom array types to opt-in to skipping bounds checking, enabling SIMD-ification of some for loops
That said, compilation times may take a bit longer due to the LLVM upgrade… but this resulted in an even stronger push towards better performance in many other areas.
If you have a specific operation where MKL is noticeably faster than OpenBLAS, report it. OpenBLAS can always be improved if they have specific workloads to target.
By the way, Julia partners with Intel as well, but on things like adding multithreading support to the language, and developing auto-parallelizing compilers (https://github.com/IntelLabs/ParallelAccelerator.jl). Improved support for building Julia with MKL and Intel's C and Fortran compilers is something that Intel would probably like to collaborate with us on as well, but not much has happened there officially yet (these are different groups within Intel).
I don't know, maybe it's great. Maybe I should reconsider. But then again, it's strongly typed, which isn't usually my sort of thing (I'm not working with a team, and my programs haven't devolved into chaos yet, so with no empirical data either way, I'll take my favorite)
Granted, the emphasis has been on applied mathematics. I think in the longer run it will branch in several directions, one being realtime simulation - and then on to games. It is close to C++ efficiency (plus or minus) already, and it will only get better.
I haven't looked into Julia's GC implementation in detail, but I'm hopeful that with a little effort it's easy to avoid "stop the world" GC collections.
Programming is the art of getting a particular machine to do something you want. You may use math to get there (like in accounting or swimming) but its fundamentally a task that's performed by skilled people.
This week I have used Julia for running SQL against SQLite, manipulating dictionaries, raytracing, statistical analysis, engineering problems, simplex optimization, processing data from Excel, k-means clustering.
I'm pretty sure none of these would be classed as high-level math exactly, though some math is involved.
Any it's not as strongly typed for writing code as you seem to think
function fred(a, b)
return a * b
end
would work to multiply its numeric arguments or concatenate string arguments but it would throw an error on mixed string / numeric argumentsIt also supports duck typing
function jule(a, b)
return a.value * b.value
end
will work no matter the types of a and b so long as they have the required attributesI mean, if Julia works for you, that's great. But it seems a bit awkward to me, and until now (and even now), there was the array indices elephant in the room (it's the Lua problem: Even if you support zero-based arrays, it's not supported by convention).
As a Scheme/Lua/JS/Python/Ruby/C/Whatever else programmer (I don't know them all well, but I like to keep my hand in), I just don't see what Julia gets me. But that's just me.
I've not really found the 1 index much of a problem, makes translating other code a bit awkward.
The new dynamic indexing scheme (0 based, -10 based, whatever) seems interesting.
What Julia gets me is a stats / machine learning environment I had to awkwardly program in Octave.