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