Announcing Ozma: Extending Scala With Oz Concurrency
setori88 writes "Programming for concurrency makes sense in developing for both large
scales (cloud computing) and small (multicore CPUs). Some languages
were designed for concurrency and distribution; One of those languages
is Oz, which provides advanced primitives regarding concurrency and
distribution. Oz is mostly declarative, a paradigm that encompasses
functional and logic programming. Despite its innovative features and
expressiveness, Oz never made it into the wide developer community;
one reason is its
unusual
syntax." Read on to learn about an effort to bring Oz's concurrency
features to more programmers.
setori88 continues: "But first, some background: Martin Odersky, in designing the Scala programming language, recognized the need for community acceptance of the kind that Oz lacked. He designed Scala as being both close to Java (in terms of syntax and concepts) and interoperable with existing Java libraries. Today, Scala seems to be the best hope for making functional programming accessible to programmers.
Although Scala has no language feature related to concurrency, the advanced library Akka, inspired by Erlang, provides Scala programmers with concurrent and distributed concepts.
Now comes a project attempting to popularize the concurrency concepts of Oz, called Ozma. Ozma implements the full Scala specification and runs on the Mozart VM. It extends Scala with dataflow variables, declarative concurrency, lazy declarative concurrency, and message-passing concurrency based on ports. Ozma extends the duality of Scala, namely the combination of functional and object styles, to concurrent programming."
Although Scala has no language feature related to concurrency, the advanced library Akka, inspired by Erlang, provides Scala programmers with concurrent and distributed concepts.
Now comes a project attempting to popularize the concurrency concepts of Oz, called Ozma. Ozma implements the full Scala specification and runs on the Mozart VM. It extends Scala with dataflow variables, declarative concurrency, lazy declarative concurrency, and message-passing concurrency based on ports. Ozma extends the duality of Scala, namely the combination of functional and object styles, to concurrent programming."
I have a hard time imagining why you would use a name in 2003 that has been the name of a software product and a software company that you don't even work for since 1987. It would be like naming a programming language "Borland" when you work for Seagate.
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
Opa is only for web applications (or webservices) But indeed, it's a very good language to program them, as a concurrent alternative to Scala + Lift.
I don't like Ozma, it takes the fun out of functions :P
The syntax can be weird, (why the double square-bracket? why?) but I wouldn't call that Oz's biggest misstep in gaining wide acceptance. In my experience, the biggest problems while learning were
1. Almost zero documentation on getting the language to (partially) compile and/or run outside of Eclipse. I'm not sure how I ever figured this out, to be honest.
2. Lack of a decent file I/O library. When was the last time you had to write your own streamreader for a business application?
I am thrilled to see Oz getting more mainstream attention - the whole dataflow concept is very cool, and it's fun to write.
Scala's actor framework is indeed built in, and works very well for multi-core scaling. What it doesn't have is a distributed concurrency model that makes it trivial to run a single "program" on multiple weakly-connected systems ("in the cloud.")
You're special forces then? That's great! I just love your olympics!
But "proactive" and "paradigm"? Aren't these just buzzwords that dumb people use to sound important? Not that I'm accusing you of anything like that. I'm fired, aren't I?
So it's got "unusual syntax" AND builtin oxymorons? Sign me up!
I bought the MIT book about Oz, and it was really fun. (Read only 3 chapters) However I can't imagine learning it from PowerPoint slides. (Especially if you got shown a constraint statisfaction problem right-away.) By the way it seems less weird for me than Haskell or Common Lisp. * (I'm just fiddled with them, don't know them at any usable level.)
I think when you understand the canonic representation of program structures, and how the flow of control goes, it does seem quite sensible.
On the other hand when I tried Scala, the type system always got in the way. The guys in the forum were really helpful, but they referred to things that wasn't in the documentation/ was hard to find in the documentation. (It was pretty badly organized.) It was too much time to statisfy the compiler, and I didn't see the gain in code roboustness. I started to really appreciate Java's half-baked generics. (Where usually you don't actually need to use generics due to type erasure, but if you do, the IDE will offer better auto-completition.)
I think Scala is mostly used by Lambda-the-ultimate fabboys, who just fall in love with everything if it has anonymous functions and continuations, and don't really give a shit about productivity, developer training, good documentation, good tool support or performance.
I mean this book:
http://www.info.ucl.ac.be/~pvr/book.html
If I remember correctly, "#" is for constraint statisfaction problems (delayed goal), and I think that operator shouldn't be taught to an Oz newbie, as Constraint Logic Programming is a paradigm onto itself (and not just paradigm, as in thinking pattern, but it involves quite a lot of complex algorithm that run in the background (demons), and non-sequantial execution).
Last time I installed Oz, it came with Emacs bundled by default.
It's true that the Oz runtime system, libraries, and development environment are not as good as mainstream systems like Java. But that's not the point!
The point is concurrent programming: Ozma (and Oz) have a concurrency model worlds beyond that of Java, and much better even than Scala or Erlang. Simple, easy to program in, and with very few race conditions (zero if your program uses only dataflow and no ports). If you haven't seen this model, you can't imagine how much better it is than the crud that Java gives you. The purpose of Ozma is to make it easy for developers to learn about this model. That's why we picked Scala as the foundation for Ozma, because Scala is a well-designed and well-implemented language with a fairly large community, and it has some momentum as a possible successor to Java. We hope that Scala programmers will take a look at Ozma and like what they see.