Hello!

I've been playing with Mozart for about two weeks now, and I have some 
thoughts I want to share.


As a programmer, I can say that Oz has two main drawbacks.

1) The first is lack of a good tutorial (all the existing documentation 
isn't meant for programmers; it is meant for computer scientists with 
PhD ;) ). This makes the process of learning Oz very steep.

After reading "Tutorial of Oz" I knew less about *programming* in Oz, than 
after reading the first chapter of the book "Concepts, Techniques and 
Models of Computer Programming". Of course, I knew more about the way Oz 
*works*, but I'm not interested in it - I just want to write programs, that 
solve my problems, and that's all.

For example: from the introduction I learned, that "The full Oz language can 
be regarded as syntactic sugar to a small kernel language.". But there's 
one problem with that: I have no idea, what syntactic sugar (kernel 
language, etc.) is. And I definitely don't want to learn about it: all I 
need is the knowledge, that will allow me to write programs, that will 
solve my problems. I have written many programs in Pascal, Object Pascal, 
C, C++, Java, Prolog, Python and Bash - without any knowledge about 
syntactic sugars and kernel languages. As anyone can see, that knowledge 
isn't needed for writing programs.

Later, in the same "tutorial", I learned, that functions are syntactic sugar 
for procedures (or something like that). So what? Should I congratulate the 
creators of Oz, or something? Tell me, how can I apply this piece of 
information to solve my problems?

And another example: "A class is essentially a record that contains the 
method table and attribute names.". Sorry, but for me (a programmer) it's a 
crap. A class is a template for an object. For example, *my car* is an 
object of the class car. In this case, a class is a design plan for some 
car, and an object is an instance of that class. That's the way it works, 
and that's the way it is used in the real world to solve real problems (in 
software development).

Of course, I'm not arguing, that what in the "Tutorial of Oz" written is, 
wrong is. This is (I suppose) the truth, but this is not a language, that 
programmers understand. Most of programmers are used to quite a different 
language - and I would be happy to read a tutorial written in such a 
language. A "programmer friendly" tutorial.

(I noticed, that the more languages I know, the less time it takes me to 
learn a new one. I learned Pascal in one year, C in about 8 months, Java in 
about 4 months, Prolog in about 2 months - and the most difficult part was 
to understand, that it is not an imperative language - Python in about 2 
weeks, Bash in about 2 weeks and so on. For now I've been learning Oz for 
about two weeks, and I still have serious problems with it - I haven't had 
such a problems with any other language I learned in the last four years.)

2) The second drawback is the low popularity of Oz. In general, Oz isn't 
widely known. And I really can't understand why. This language supports 
many programming paradigms - and that's something wonderful and AFAIK, 
quite unique. In my opinion, Oz can be *the* language for solving many 
scientific problems at universities.

I'll take my own case as an example. I'm a PhD student, and I'm interested 
in scheduling problems. I'm doing research on applying evolutionary 
algorithms to solve these problems. I need optimal solutions for results 
comparison.

So far I've been writing almost all my software in Python/Pyrex/C. Coding 
was easy and fast, and performance was good enough for my needs. But now I 
have reached the point, when I need to compare my results to the optimal 
ones. So far I've written a branch-and-bound algorithm for one of my 
problems in Python, but I'm not interested in operational research in 
general, and in developing bab algorithms for my problems in particular. 
I'm interested only in the optimal solutions of my problems.

Using Python, Pyrex, C, or any other imperative language, I'll have to do 
research on something I'm not interested in, and waste my time on it.

Fortunately one of my colleagues advised me to take a look at CLP languages. 
I wrote some programs in Prolog when I was a student. Besides, programming 
is my hobby (although I'm not a professional programmer, nor computer 
scientist). I took a look at GNU Prolog, but someone told me, that Chip is 
better. Perhaps, but Chip is commercial, and I prefer to use OS software, 
because I work on a GNU/Linux system (it's not a matter of ideology, but of 
availability). Then, someone told me about Mozart, "a tool superior to 
Chip".

Of course, Oz is much better for my needs (looking for optimal solutions of 
scheduling problems), than any imperative language - all I have to do is to 
make a model, and then ask for a solution. I don't need to bother in the 
way solution is obtained - that's the problem of Oz (and that's the way I 
really like!). And the best of Oz is that I'm not constrained to CLP 
programming - I can also use OOP, or FP - whatever I need, whatever I'll 
find useful at the moment.

Another area of applying Oz is the laboratory of scheduling. For now, 
students at our university have to write their own programs solving simple 
scheduling problems (e.g. Flow-Shop scheduling using Johnson's rule). We 
don't make them use a particular language. They choose Delphi, C++, 
sometimes Matlab, PHP, or even MS Excel. I think, that it would be easier 
for them to write programs in Oz. Mozart's ability to draw the search tree 
(e.g. for bab algorithm) is wonderful - for now students have to draw the 
tree for themselves (and they are far from being happy for that reason). 
With Mozart, they could focus on the scheduling problems they have to 
solve, not on GUI programming.

But almost no one knows about Mozart here, at my university, so this 
software is not used at all.

Two weeks ago I talked to a professor, who I work for (sometimes I solve 
some problems for him). He told me, that he needs to solve some integer 
programming problems and wants me to solve them for him. All right, I told 
him, that perhaps I'll use the Mozart software for this job. And then he 
told me, that he knows about this Mozart.

So - even if people know about Oz, they are not talking about it in public. 
They are not using it (with very rare exceptions).

And since Oz just "doesn't exist", it's not popular.

I can hardly understand, why it is so. I find Oz an interesting language 
(although I don't like its syntax - but that's a matter of my personal 
taste).



I really find Oz a fine language - mostly because it supports so many 
different programing paradigms, a programmer can always choose what's best 
for a given purpose. Therefore I have some questions regarding Oz.

1) Will Oz be still developed?

I can use Oz for my purposes (obtaining optimal solutions of the scheduling 
problems I solve). But I'm still not 100% sure of that - I'm still 
searching (e.g. Gecode, Alice, even OCaml - it's not CLP, but it has some 
features worth my efforts). I don't have time to waste on a language 
without the future - no one has. So the question is very important for me.

So far, I haven't found any book about *programming in Oz* - the "Concepts, 
Techniques and Models of Computer Programming" is not about it (as far as I 
can say - I haven't read the whole book yet). All I have found is Mozart's 
documentation (and I don't like the tutorials). That's not a good 
recommendation for a language. For example - compare that all to the 
literature regarding Java, Perl or Python.

2) Does anybody work on some Oz tutorial for *programmers*? Just the 
practice and problems solving, nothing about pure theory (that's something, 
that already done is).

3) What is performance of Oz? How fast is Oz in comparison to, say, C/C++, 
Java or Python?


Best regards (and sorry for such a long message),

        Tomek

_________________________________________________________________________________
mozart-users mailing list                               
mozart-users@ps.uni-sb.de
http://www.mozart-oz.org/mailman/listinfo/mozart-users

Reply via email to