Clojure could be to Concurrency-Oriented Programming what Java was to OOP
bc.tech.coop
bc.tech.coop
But Lisp has been around for 50 years and never hit the mainstream so it seems there perhaps is something about it that doesn't fit with most programmers?
Also it only offers one form of concurrnecy and while I like it there is still much speculation and research in the area. Scala for example kind of builds on the whole Java-language and offers a more recognizable language for Java-developers and more opportunities to roll your own concurrency-mechanisms, or at least that's the impression I've gotten.
And then we have Haskell and Erlang.
In terms of Scala, it's built on top of the JVM (as is Clojure) and so it's underlying model is the same -- Java threads mapped to OS threads. Scala does give people a variety of syntactic constructs.
It has all the good Lisp stuff, but ditches all the historical Lisp cruft, actually has a little syntax. And because it runs on the JVM, it's stable, fast, debuggable, has a wealth of libraries and runs on Windows, Mac and Linux.
And there's already a (beta) book: http://pragprog.com/titles/shcloj/programming-clojure
(format t "~{~A has been around for ~D years so it seems there perhaps is something about it that doesn't fit with most programmers?~^ ~}"
'("Structured programming" 10
"Lexical scoping" 20
"GC" 30
"Closures" 40))
The last increment of power that makes Python into a Lisp seems pretty small in comparison.Clojure does fix one of the last things holding it back: it removed "Lisp" from the name, and added a trendy "J".
http://www.appliedthought.com/peter/smalltalkvsjava.html
If anything, Java promotes class-oriented programming, not object-oriented programming.
edit: if you disagree, please explain so i can learn.
OOP, at the moment, is recognized as being what C++, Java, .NET are. There are certain concepts that allow you do OOP, and Java fulfills all of these concepts pretty well. Java, as a language, is really not bad at all. As a representative of the contemporary definition of OOP, it performs very well.
Now, if you have worked a lot with OOP, and you have independently come to the conclusion that Java is a worse OO language than C++ or .NET, then you are entitled to your opinion. If, however, you are primarily a scripting language user, and you read the opinion on Slashdot or so, then I would suggest that you first read in somewhat more detail about this before making such judgements.
Java is not a horrible language. It did set back good OOP by about 20 years. There is no reason to bring C++ into the debate. Prior to Java, the C++ community understood that C++ was not a great OOP language. C++ was C++ and people chose it for its unique characteristics, none of which was that it was a great OO language.
Next invested heavily in Objective-C for precisely the reason that they needed to get closer to the metal but knew that C++ was not great at OOP.
And when I say "problem" I'm really talking about the scalability of fine-grained concurrency techniques formalized by Dikjstra (http://en.wikipedia.org/wiki/Semaphore_(programming)).
I agree that programmers will eventually have to be relieved of concerns such as critical section but we will never escape questions like "what are the parallel aspects of this algorithm (or library or application)". A compiler will never "discover" large-scale concurrency patterns in any mainstream language (at least to my reckoning). Maybe interpreted languages will ultimately lead the way.