Videos from the Julia tutorial at MIT
julialang.org
julialang.org
1. In the REPL, highlighting of matching parenthesis/brackets (like in CLISP) would be good.
2. In the top-level Makefile, add a target "make distclean" to mean "make cleanall". distclean is the "GNU standard" [1]. Similarly "make mostlyclean" could clean everything except major dependencies.
[1] http://www.gnu.org/software/make/manual/html_node/Standard-T...
We did use to have a distclean, but seems to have been lost in various build system updates.
Matching parentheses/brackets in the REPL would be really nice too. Can one do this with readline? It would be great if you could file an issue - just trying to nudge you into joining the fun. :-)
BTW, the lightning round is awesome. Thanks विराळ् :)
1. The expressive, sophisticated type system
2. Using multiple dispatch as its core paradigm
3. Extreme interoperability with C libraries
4. C-like performance
Of course, LuaJIT gets great performance too, so that's actually rather similar to Lua. Lua also isn't nearly as naturally suited to scientific programming.I'd have said Common Lisp as well, but some might argue point #1 with respect to that.
It is nice to see others (re-)discovering the joy of full on multiple dispatch though!
An expressive dynamic language with repl and native code compilers. quite nice.
The one thing so far that I don't like is <> around identifiers.
What I wish for:
- faster lambdas and which capture numbers as values not as addresses. I left Python over the latter, it caught me up all the time. At least Julia developers don't consider it a feature and plan to fix it.
- to be able to specify function domain and range types, for documentation and sanity checking
- maybe some improvements in comprehensions would be nice, so I could have an Array of Arrays of something e.g.. Currently the [x for...] comprehensions tend to collapse things together while the {x for ...} comprehensions tend to lose the types of what's inside.
Overall a great language already and a positive experience.
This _is_ an OO approach, just not the common Java-type OO approach. Common Lisp's Object System (CLOS) has had multiple dispatch for decades.
Clearly, a lot of work has gone into the library side of things, but I'm curious what is special about the language level for technical computing.
Another feature that's very useful for technical computing is the ability to easily create user-defined numeric types with storage and performance that's just as good as Julia's built in types (which are actually also just defined in Julia). They can also easily be made to interact completely transparently with other numeric types. A very simple example can be found here:
https://github.com/JuliaLang/julia/blob/master/examples/modi...
These 13 lines of code define a modular integer type that has the same storage and speed as regular integers, but with modular behavior, and interoperates with normal integers (i.e. `1 + ModInt{11}(1234)` works). Because of generic programming, you get matrices of ModInts for free, again with performance like plain old integers but different behavior. The same applies to defining new representations of things like matrices or dicts.
http://arxiv.org/abs/1209.5145
Also, a number of other language features include: `ccall` to make it easy to call C and Fortran libraries, multiple dispatch which is already discussed here, real metaprogramming capabilities which have traditionally been considered optional in this class of languages, keyword arguments (coming soon), coroutines (julia Tasks) which integrate nicely with the asynchronous networking runtime so that it is easy to overlap computation and communication, immutable types, and I am sure this is not exhaustive.