Lush, an object-oriented lisp for large-scale numerical and graphic applications
lush.sourceforge.net
lush.sourceforge.net
To me, the important thing about Lush is not that it's object-oriented, but that it's oriented toward high-performance numerical computation.
It has array types with aggregate operations (like J, K, R, NumPy, PDL, PV-WAVE IDL, etc.) even for interpreted code, plus bindings to all the standard numerical libraries; and it has a decent compiler and supports inline C.
The only problems I have with it are the minor one of the OO syntax (minor as I never made much use of the OO features) and the somewhat more major issue of the dynamic scoping (no closures). It was a deal-breaker for me but was pretty educational, as I had not quite understood dynamic versus lexical scoping at the time.
Except those issues, it's a great Lisp, especially if you need one that plays nicely with the OS and is easy to learn. (And it is pretty speedy to boot, even respectably speedy interpreted.)
(Edited, removed a bit where I repeated myself.)
Both look like activity has died out recently... This is a shame, I was thinking recently about this issue. It seems that there is a real need for a stats environment based around a straight-forward general purpose programming language that can be easily parallelized and can easily access GPU functions. Although GPU functionality is still pretty narrow, it's growing, and linear algebra seems to have a place in statistical computing.
I have not yet seen anything that fits this bill, but Incanter is the closest. Clojure has the Calx library for OpenCL. Last I asked around, nobody had put the peanut butter in the chocolate just yet.
But the way most people use parallel stuff in numpy is: first use BLAS/LAPACK which is multithreaded, then use multiprocessing, etc... It depends on what you are trying to achieve, but my understanding is that as soon as you use arrays and the liked, clojure is not that helpful compared to a much more primitive runtime as python, because all the parallel goodies of clojure are not available anymore. But I have never seriously used clojure, so I may be dead wrong.
no automagic memory management, no garbage collection, no functional programming
Lush brings the best of both worlds by wrapping three
languages into one: (1) a weakly-typed, garbage-
collected, dynamically scoped, interpreted language with
a simple Lisp-like syntax, (2) a strongly-typed,
lexically-scoped compiled language that uses the same
Lisp-like syntax, and (3) the C language, which can be
freely mixed with Lush code within a single program, even
within a single function.
The thing is that Lush the interpreted lisp like language is quite different from CLush the compiled lisp (un)like language. This is indeed an unexpected quirk and gets people who are starting at it. The two, share the same syntax but are quite different languages. CLush can almost be described as C with lisp syntax. What you are referring to is CLush. Lush on the other hand is fully garbage collected. In fact it used to have a reference counting based garbage collector but the developers were looking at other garbage collection algorithms, mainly Boehms garbage collector. I have not used it in a while so I am not sure if it has been baked in. Something I was looking forward to in the new version was parallel loops. There is a stub for that, but it defaulted to the sequential loops in the version I played with. I think a reference counting garbage collector makes parallelism hard to implement, Cpython is perhaps an example of that, whereas Sisal is a counterexample.Its a fun language to use, it is so much more easier to interface with C (compared to MATLAB, well even Python/Numpy/Scipy sans weave). But there are a few surprises if you expect Lisp.
EDIT: Replying to gaius here to save on deep nests.
Only if you want to distribute it as a compiled binary, (may be to protect your source). You can distribute the source code as is, and it will run just fine. As far as distributing something self contained, I agree that Lush is not tailor made for that. Because even the successfully compiled parts are typically loaded dynamically.
That's a big drawback.
Common Lisp (SBCL) is very fast already, and one can avoid the GC overhead in a number of interesting situations (though not all). Are there benchmarks comparing SBCL and Lush?
Has anyone found a sane way of doing maths (linear algebra, etc.) in Common Lisp? My experience with the GNU scientific library has been disastrous.