A new language for mathematical computing: Julia
Julia is a high-level, high-performance dynamic programming language for technical computing, with syntax that is familiar to users of other technical computing environments. It provides a sophisticated compiler, distributed parallel execution, numerical accuracy, and an extensive mathematical function library. The library, mostly written in Julia itself, also integrates mature, best-of-breed C and Fortran libraries for linear algebra, random number generation, FFTs, and string processing.
More info: The Julia Language and Why We Created Julia and A Matlab Programmer’s Take on Julia. Sounds pretty awesome.
Incidentally, the third link includes a quote which pretty much exactly captures my current feelings about Matlab:
The Matlab language is slow, it is crufty, and has many idiosyncracies… I strongly disagree, however, with the opinion, common among some circles, that Matlab is to be dismissed just because it is crufty or “not well designed”. It is actually a very productive language that is very well suited to numerical computing and algorithm exploration. Cruftiness and slowness are the price we pay for its convenience and flexibility.
I fundamentally disagree with the last statement though. Cruftiness and slowness should not be the price we pay for convenience and flexibility. Matlab could’ve been designed to be both high-performance and productive. For example: one source of slowness and cruftiness is that objects are usually passed by value, not by reference (yes, I know MATLAB does copy-on-write… which is great… until you want to write to an object). I think that defaulting to pass-by-value is simply a design mistake. Pass by reference wouldn’t prevent MATLAB from doing the things it does, and would make it faster.