“Dig deeper with us into Sun’s enhancements. You can now assert in Java, and you’ll like the new logging capabilities. We’ve got benchmark tests of the new graphics routines, too. Java coders can now do what C programmers have done from the start with new classes for Regular Expressions. Pattern matching is now a piece of cake. Yes, it’s still beta, but here’s a preview of what’s faster–and slower.” Read the second part of the interesting Java 1.4 preview at ExtremeTech.
Wow – this new Java thing is revolutionary! Asserts, logging capabilities – yeah. Performance is almost on the same level than with previous versions, nice …
Seriously speaking this pace of innovation will guarantee Java immediate death. Where are the generics, enumerated types, a better type system (maybe with type inference in the milner tradition (read ML, Haskell)).
My take is – Java has lost. Much to many design flaws, which could not be fixed without breaking compability. This very same reason prevents fixes in C++, that’s why Java was created. Now we have C#, which is a small iteration over Java, but I would appreciate a language which integrates nicely all the concepts in current research (see functional languages). Cyclone is an example for a “cured” C btw.
Seriously, you dont want Java, you seem to want ML, Haskell or Cyclone, an established language cannot and should not change much. Once designed all that remains are slow and careful tweaks, few viable languages has made any drastic changes such as introducing a new type system mid-life (C possibly, but they did it over a period of 10+ years and it really was a rather small change in semantics). There are two languages that actually are used which have tried to change much, that is C++ and Python, C++ ended up truly horribly large and Python is going the same way with users of both going along the “If you don’t use it you don’t have to pay for it” way, problem is that if you only know a subset of the language you can only read a subset of the available code.
All in all Sun is picking the right route, Java is not a great language, but nothing they can do at this point will fix that, people dont use Java to get ML, they use Java to get Java and Java is what Sun will have to stick with. If they do another language they will most likely be sensible enough to call it something else.
But won’t you agree with me that certain things for Java (in particular generics) were promised since decades and still remain to be seen. This 1.4 release deservses no special attention.
Besides, I disagree with you about the way Python evolves. The newer versions mostly fix some flaws (eg. type/class dichotomy). Additions are minor and sensible, even useful so far. And if you study the PEPs, you won’t see revolutionary changes in the near future.
Yes, will have to agree on generics, greatest problem with Java really so it would be good if it could be nicely hacked in, hardly reason to say that 1.4 is not interesting though, the changes in the language itself is small but that is to be expected and quite correct imho, the class library has been revised quite a bit and it seems to be a bit of a maintainence release, it is after all a minor version number change as well.
The class/type unification really is a good idea, but I really dislike the way this whole thing is going. Python at 1.5.2 was a sensible language, it wasnt great for big projects but it really was quite small and clean and thus the nice learning and quick hack language they still like to call it. The language they are trying to make python however is just too far from it, addition of things lately like operator overloading (one of those features people love to plug but I see no use for, a huge special case that adds nothing but complexity), function attributes (added since zope used the comment strings in a broken way, horrible idea all in all), generators is hardly a brilliant idea considering the complexity addition at this late point, if it had been in there from the beginning it would have been a different matter since iteration statements and such could have been very nicely designed around them, things like the C arithmethic assignment operators hardly helped the language keep its label of being clean either. Sure things like the type unification and integer promotion are nice feature additions, also making division floating point by default is obviously valuable for it as a beginners language, but here lies a bit of my problem with Python, it really not a language I would ever recommend to a beginner anymore, it is just too damn large and complicated.
When Guido and friends discovered that all this should be changed it was time to call 1.5.2 the standard of python, only do the small tweaks like all other languages get and started writing a new language with a new name instead of dragging people who liked 1.5.2 through the reconstruction. van Rossum languages could have been as much a concept as Wirth languages then
As it happens I am no fan of Python in any case (so I am aware that I might sound a bit flamebaitish , this form of dynamic typing is not a feature, it is a problem, whitespace syntax sounds like a good idea in theory but it doesnt take that much complexity before you start missing the redundancy of indented syntactic blocks, they also have little to no regard for keeping things compatible (of course due to far too large changes too often) and in general it is a badly managed language in my humble opinion.
Concerning Python, which I do like somehow …
All I can say is that from a users point of view Python remains simple as ever. I agree that dynamic typing is not very desireable, and I would greatly appreciate a modern static type system. Certainly this will not be part of Python instead it would require a completly new language. However this Python 3000 ๐ could still preserve much of Pythons syntactic elegance (of which indentation and operator overloading [1] is clearly an integral part).
I agree with you on assignment operators. That assigment is not of great value anyway is certainly a different thread ๐
The added complexity of simple generators or function attributes is not that high. What has been implemented from generators does not contradict the general iteration mechanism IMHO. The rationale for function attributes is also clear for me. Give me one example where function attributes add complexity.
Making division not a floor division as in C is not only useful in beginners languages. Why is such a feature considered valuable only for beginners. It’s intuitive!
One final remark. Python surely is in constant change. It’s not an ISO certified language. But the changes are the result of a “formalized” process with discussion, rationales, design documents and so on. In my opinion this is *very* nice. Definetly much better than having a proprietary language like Java and being of the mercy of Sun Microsystems. Python listens to its users ๐
[1] I disagree with your statement in regard to operator overloading. Certainly there is an overhead for the compiler to dispatch to the correct function (which is theoretically not very difficult because of unique type signatures which Python lacks sadly). The syntactical elegance is clearly of great benefit and by far it outweights the implementation overhead.
Operator overloading is very much free, however it has in my opinion no benefits, it only makes code harder to read. Seeing the difference between a primitive language construct and a user defined one is in my opinion an important thing which is something that operator overloading directly attempts to change.
The real disagreement seems to be that you think that adding a feature that is easy to implement and does not reduce execution efficiency cannot be a bad thing, I very mcuh disagree with that, a feature such as generators has to be very useful to just get thrown in late in the game, a language should try to maintain an as small set as possible of keywords and different semantics for keywords as it can to remain easy to learn and read. As it happens generators are not intuitive, not one bit, they remove the guaranteed single point of entry into not only functions, but into all other constructs at the same time. So one small addition and suddenly we have a multiple point of entry reading problem of setjump/longjump proportions, no matter what part of a function or statement you read you have to keep in mind that it is not sure at all that the part you read will be evaluated at each call of the function but will instead have to backtrack and reread carefully when you reach a yield. As I said, too high costs for a construct too late.
To quote all C++ users favourite “If you dont use it you dont pay for it” but you always do, if it is there people will use it and if people use it you will have to be able to read it and understand it well.
Oh, and in my humble opinion people have no idea what they want, no language ever designed by committee has ever ended up good so while it might be nice in theory that python is changed by its user nothing good will come from it in the end I believe, sorry
I have said the same things myself, Python is not doing itself any good when it introduces all these new features. And I am a fan of the language, otherwise – it’s still my first choice for most things.
The strength of Java is not the programming language, it’s the platform (JVM) and the API. The language is ok, it’s pretty simple learn and use (compared to C++). There are a few things that should be added, like generics and C++ const, but Sun should be very careful about adding new features.
As for .NET, it’s a complete rip off of the JVM. I’m sure it’s a great platform to create Windows application with, but the reason I use Java is that it’s available on all major platforms and .NET will always be Microsoft only. C# is not a better programming language than Java.
Dear Tesmako,
our disagreements are pretty clear by now. I’d only like to add that Haskell for instance is certainly quite impressive and the result of a commitees effort. I share a more “democratic” point of view than you do and firmly believe that intelligent people do indeed know what they want. And as a matter of fact programmers usually are intelligent people ๐
Anyway thanks for the conversation …
And as a matter of fact programmers usually are intelligent people ๐
sometimes …
Have to give you a point on Haskell, a most excellent language (still prefer SML personally though). However while being designed by a commitee one of the design goals was to make a more standardised language from the many different functional languages out there and it did after all end up looking an awful lot like Miranda, which was designed by a single person (David Turner).
I will not agree that programmers are particularly intelligent about these things, everyone wants the feature aiding the purpose they use tha language for but to avoid ending up looking like PL/I, matlab and perl merged into one one has to try to keep it more general than that.
But but, I agree that we wont get anywhere with this argument, was real fun though, see you again when Java 1.5 gets here (they still hope to have generics by then so it ought to be more fun)