Open Source Languages Rumble At OSCON
blackbearnh writes "Everybody knows what the best programming language is, it's whatever one you like the most. But is there a best language overall? Or even a best language for a given purpose? This question has been debated since the first time there were two languages to choose from. The argument is still going on, of course, but maybe a little light will be shed on the issue this week at OSCON. On Wednesday night at 7PM Pacific, representatives of the 5 major open source languages (perl, PHP, Python, Java and Ruby), as arbitrarily decided by O'Reilly, will meet to debate the merits of their various languages. If you're not going to be at OSCON, you can watch it live on a webcast and pose questions or comments to the participants. The representatives are: Python: Alex Martelli, Google; Ruby: Brian Ford, Engine Yard; PHP: Laura Thomson, Mozilla; Perl: Jim Brandt, Perl Foundation; Java: Rod Johnson, SpringSource."
My God - it's full of puss!
Just reading the title that's the only obvious conclusion!
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
OSCON organizers have stated that the language debate won't be considered finished until at least one of the languages is compared to Hitler and/or the Nazis.
A slashdotter who didn't build his own computer is like a Jedi who didn't build his own lightsaber.
When did C lose its status as an open source language? or do we mean languages for web apps?
My favorite language was Z80 ASM. That would be as useful now as a kick stand on a bass boat.
* Carthago Delenda Est *
Isn't C and C++ open source now? Or at least as open source as Java is?
Indeed they are, as a quite a lot of other languages. I suppose they are debating which kid's language is best, really ;)
Not that I care, in my view, *all* languages fall short. And I don't even think my list is unreasonable!
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
Back in college I was working the summer on a forest firefighting crew ("Hotshots") when one evening back at camp two
guys got into an argument over whether Stihl or Husquvarna chainsaws were best. Punches were thrown and the two had to be wrestled apart.
That's what these L1 vs L2 vs Ln arguments all remind me of. Use a for loop or a list comprehension, call free() or let the compiler do it for you,
use '{' or not, does it really matter? - your manager probably wanted the functionality implemented yesterday - just do it using the tool you know best.
It's Fortran...
Except for when it's Cobol...
If it's neither of them, then it's C.
(every language after C is made to ameliorate one of the above three...)
Why were those particular languages picked?
Probably because someone competent and authoritative enough was willing to speak on the languages listed.
Not a typewriter
The argument is still going on, of course, but maybe a little light will be shed on the issue this week at OSCON. On Wednesday night at 7PM Pacific, representatives of the 5 major open source languages [...]
5 geeks.... 90 minutes.... that will be a very dim light to be shed on such unanimously-agreed subject.
So post your list and let the debate begin!
Rod Johnson?? Really?! Rod Johnson is easily one of the top 5 names of all time. Rod Johnson wins by name alone!!!! It's settled. Java is the best language. Suck it, other languages and your weakly named representatives! I'm a PHP programmer more than anything... but I must concede to Rod Johnson. You can't make that name any better! Maybe if his middle name was 'Motherf***ing'.
Why are people listed by where they work their day job, as if that has anything to do with it?
- Adam L. Beberg - The Cosm Project - http://www.mithral.com/
Programming languages do not have source code, and thus cannot be "open source". Unless perhaps you're referring to languages whose specifications are updated by means of some community driven process, e.g. Sun's JCP. Interpreters, virtual machines and run-time environments do have source code and can be open source. They're just not the same thing as "the programming language" itself, which is essentially just a specification.
I love this "Highlander" attitude towards programming. That there will be one language that is the best and I guess will defeat all the other languages. If anything there might have a been a few best languages decades ago, but as time goes on there will just be more and more languages used for different purposes. Should we also debate what's the best tool. A hammer, a screwdriver, or a wrench?
Democracy Now! - your daily, uncensored, corporate-free
I really should write it down. I will forget some points. For each feature, I will list a language that actually implements this feature
I probably forgot a lot, but it's a start, no?
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
So do your part to destroy a programmers will to live, deploy a VB6 app today!
What we need is a "Scary" mod.
My other car is a 1984 Nark Avenger.
For the Java team, the summary only mentions Rod Johnson - it should be noted that Rod will be joined by other veteran developers advocating Java: Long Wang, Peter Cox (and his wife Anita), and, of course, notable Java developer Dick Manmeat.
Bow-ties are cool.
Also, in the future we will commute to work in Jetsons-style flying cars. I realize it is "in" right now, but it serves no sensible purpose for most programs, (except to lock the user to his service provider).
Sensible error messages (like NOT C++ currently and especially g++. "Expected primary-expression before ;" is just not very helpful, and the template errors are much much worse. Much tied to the aforementioned grammar)
The C++ template error messages aren't tied to the grammar. The template language is turing complete, and the error messages you get are a complete stack trace along with all the data on the entire stack.
SJW n. One who posts facts.
Because Intercal is the real winner.
Anything can be found funny, from a certain point of view.
APL: (~RâSRâ.Ã--R)/Râ1â"âR
(so pretty much like Perl...)
Entomologically speaking, the spider is not a bug, it's a feature.
No, the clear winner is Unlambda. With Shakespeare as a close second (gives a whole new meaning to literate programming!)
The Tao of math: The numbers you can count are not the real numbers.
Seriously, all of this stuff is really old and tired. All of the cool kids are elsewhere.
And also.. how in the world can a computer "run" if no program is running ?
--Ivan
Hey! No debate forking!
The tourists (i.e. out-of-state vacation cabin owners) all have those orange hard hats with the built-in hearing protectors with "Husqvarna" across the front.
You forgot threads (and the memory model needed for that, see e.g. http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/). Very difficult task to do well, that is why most languages to not even attempt.
Some others worth to consider are libraries (XML, etc.), documentation (Java has good, others have/are catching up), Javadoc and perhaps even support for things like UML, ctags, etc.
Java keeps you up at night in more ways than one!
Knowledge is how to play a game, intelligence is how to win, wisdom is knowing what game to play.
Or because those are whose sell more books. Remember, the thing is being organized by O'Reilley.
You forgot threads (and the memory model needed for that, see e.g. http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/). Very difficult task to do well, that is why most languages to not even attempt.
Some others worth to consider are libraries (XML, etc.), documentation (Java has good, others have/are catching up), Javadoc and perhaps even support for things like UML, ctags, etc.
True about Memory model, granted. Libraries, definitely *not*. Libraries should exists independently of the language, so that they can be replaced if they suck (see Java for an example of how bad it can get). I don't regard this as *critical*, though, as library implementations are passable.
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
Concepts was going to be the cure for that in C++. Now, alas, I am reading that concepts are not included in the next standard. A sad day indeed.
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
I think I may have met her a couple years ago, at a previous OSCON. I was surprised to find myself speaking to someone who knows PHP very well, and doesn't think it sucks.
$x='S24;r)>63/* h@<5+oZ)32"5cz';$me='phroggy'x$];
$x=~y+ -xz+\0-Tx+;print$_^chop$me for split'',$x;
If they want a heated debate then going for closely related groups is always best. Far more vitriol and animosity between groups who have only minor differences than groups with almost nothing in common.
They should invite McCarthy as well. He will all clobber them with LISP fragments.
Usability depends on how your brain works. If Perl is easier for you then so be it. If Python appeals to your tidy mind then good.
There is no best. There is only what you want to use.
...try Lua .... it covers *most* of these ....
Puteulanus fenestra mortis
Ok, so 7pm PT today - but then it says:
So 7pm tomorrow? WTF?
(Off topic). I always liked the saying, "atheism is a religion the same way that not collecting stamps is a hobby". Also, people often interpret agnosticism to mean "I don't know whether a God exists", which is indecisive. But the real meaning of agnostic is "It is not possible to know for certain that God does or does not exist", and that's a decisive assertion.
(Off topic). I always liked the saying, "atheism is a religion the same way that not collecting stamps is a hobby". Also, people often interpret agnosticism to mean "I don't know whether a God exists", which is indecisive. But the real meaning of agnostic is "It is not possible to know for certain that God does or does not exist", and that's a decisive assertion.
Yeah, that's what I wanted to put in my quote. Unfortunately, the length limit is pretty strict :) So I had to go with just assuming people new the "modern" meaning of an agnostic=fence sitter, not the original agnostic=acknowledge that most questions are at the core indeterminable.
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
Then again what is Pascal without Borland anymore?
Here is why I think parts of your list are unreasonable.
By unnecessary overhead I meant that there should be no overhead which isn't required by the job at hand, unless explicitly requested. So,e.g, no mandatory array bounds check.
As for the sensible error message: To make it more precise: The error message should at least identify the offending token or construct uniquely, and should be able to have enough information that it doesn't take kilobytes of text to write out the error message. But yeah, I suppose that is not strictly quantifyable, I just feel this is a reel problem with C++ -- and the gcc implementation is just horrid (but work is underway to fix that, at least)
"No dependency on a virtual machine": as the performance of virtual machines begins to rival that of "bare iron" execution for high-level languages, the advantages of the one over the other diminish accordingly.
No, not at all. The virtual machine incurs several overheads, and only one of them is runtime. Virtual machines are in reality processors running on top of processors, compounding the many tasks including porting, debugging, memory management and so on. E.g, a Java program does not yield a meaningful core dump; it does not manage system memory properly and many excellent debugging tools are just MIA due to the virtual machine.
"everything an object" and reflection: this is nitpicking, but it seems that what you really want is some method of treating data objects uniformly and inspecting or coercing their type later on. As the authors of "Structure and Interpretation of Computer Programs" (http://mitpress.mit.edu/sicp/full-text/book/book.html) demonstrate, you can do this in LISP by treating everything as a list, a native type of that language, and providing the appropriate constructors, accessors, and predicates for working with lists that represent different types of data (in the book, they use integer, rational, real, and complex numbers as their type hierarchy).
That is fine, as long as this includes strings so that stuff like "asasas".to_upper() works or 2.next_in_sequence() works. I do not know LISP enough to know if this is possible.
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
...try Lua .... it covers *most* of these ....
It fails all the static ones. Lots and lots of script languages passing the other tests, e.g. ruby, python and I believe even ECMAscript.
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
Java has bad libraries???
I bet you can tell a language which has better - or maybe not as you think they should not be part. I totally disagree on that, I do not want to reinvent the wheel.
Java has bad libraries???
I bet you can tell a language which has better - or maybe not as you think they should not be part. I totally disagree on that, I do not want to reinvent the wheel.
Libraries are great! I love boost, ruby-forge and all the rest. But *standard libraries* are problematic.
Java's standard library is huge. Consequentially, it has some poorly thought-out classes, methods and even frameworks (Vector, Thread::cancel() (or was it stop?), AWT). But because the libraries are *standard* libraries, they will live on forever. There is a name for that: CRUFT. Cruft is bad.
Much better to have libraries separate, and have programs depend on a library in a sensible way (which, in Java, is much harder than it should be because the standard class loader is more braindead than a school of shrimps).
And it's not just Java. C's (and C++) standard library sucks in major ways, too! For C, I think strncpy takes the crown as the most useless function in a standard library ever. For C++, I have always had a special hatred for std::vector<bool>.
I hope I have explained my motivations better now.
As an afternote: What should be in a standard library is stuff that often gets parsed between libraries: strings, vectors (ArrayList for you Javapeople due to an early blunder), n-tuples, perhaps threads and that sort of thing. That makes it possible for libraries to interact nicely without too much conversion.
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
Flamebait!? Mod must be a perl programmer that got his butt hurt. WTF
On the other hand, for many well-mannered loops (that the array index is generated by some kind of iterator or index stepping expression, one not modified from inside the loop), it should be easy enough to have an optimizing compiler/JIT/whatever that checks the bounds once on entry to the loop.
In that case, I would indeed like to have bounds checking, thank-you-very-much. There are efficient ways to do bounds checking, and why not use them?
I humbly disagree, I am a strong supporter of big standard libraries.
For example let's take Python. There is no standard GUI library (Tk, IMHO, is not good enough - and nobody uses it). Therefore e.g. Meld is impossible(?) to get to work in Windows. Not good.
Thread::stop() is deprecated, AWT is not designed to be used (directly). Vector, OTOH, is better than C++ Vector (e.g. insert is thread safe) and I fail to find big problems in it WHEN USED FOR WHAT IT IS DESIGNED FOR. It is not an array nor a Map.
Nobody forces you to use the standard libraries if they are not appropriate for your use case! Sure they add to bloat but that is with todays computers completely immaterial.
I agree the Java class loader is idiotic although it has improved.
I humbly disagree, I am a strong supporter of big standard libraries.
For example let's take Python. There is no standard GUI library (Tk, IMHO, is not good enough - and nobody uses it). Therefore e.g. Meld is impossible(?) to get to work in Windows. Not good.
Thread::stop() is deprecated, AWT is not designed to be used (directly). Vector, OTOH, is better than C++ Vector (e.g. insert is thread safe) and I fail to find big problems in it WHEN USED FOR WHAT IT IS DESIGNED FOR. It is not an array nor a Map.
Nobody forces you to use the standard libraries if they are not appropriate for your use case! Sure they add to bloat but that is with todays computers completely immaterial.
I agree the Java class loader is idiotic although it has improved.
As for Python: It doesn't matter whether it is a standard library. I do not know or use python much, but for C++ and ruby there is Qt, which is cross-platform and much better than anything Java has to offer (I lie: Qt is available for Java, too). It might be available for Python, too, who knows.
One of the problems is that even if I discard the entire standard library, I still pay the price for loading that huge, steaming pile of junk! And for what? What is the advantage of a standard library compared to just a library? That you save 10 minutes in the beginning of developing an application? Who cares?
As to the specific points:
AWT was designed to be used, directly. It is simply a steaming pile of crap, as is both SWT and Swing (havn't actually tried QtJambi, but then that is not a standard library). A lot of it is, I admit, due to the fact that Java does not really lend itself to GUI programming, because it lacks resource management support, and GUI programming has a lot of resources. That leaves you with either a lot of anonymous derivations which is Java's excuse for lambdas, or the finally hell. Or you can go the Qt route and build a parallel graph for managing those resources.
Vector: How often do you really need thread synchronized vectors? In the few cases where you might be tempted, a n-ary or binomial queue is probably a better choice anyway. Much better to have thread synchronization to be an option, which is also the route that the Java standard library developers chose later on.. But the cannot remove Vector now, without breaking existing programs. Fun, eh? So now every newbie has to be told: You want a vector? Look at ArrayList. CRUFT. This could have been avoided by having this functionality as a perfectly normal library: Old programs would depend on libcollection.so.1 and new ones on libcollection.so.2. Package management would handle the dependencies and everything would just work, without the cruft. As a bonus, porting to small-factor devices wouldn't have required a scaled-down standard library.
Sorry, I do go on. In any case, once you get to know and learn 5-10 languages and their standard library or so, I'm sure you will see my point.
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.
I mean with thread safe that insert operation in multithreaded C++ is *undefined* (i.e. can and does crash if some other thread is reading from it at the same time).
BTW, queue is hugely slower when most common access is read or update, especially if several threads are doing it simultaneously.
Your only complaint is bloat into which I will not go again.
I mean with thread safe that insert operation in multithreaded C++ is *undefined* (i.e. can and does crash if some other thread is reading from it at the same time).
yep, exactly like every collection in Java including Vector, provided that no sync. has been done. So? My point is that this *expensive* guarantee is usually not wanted, which is why the library designer changed course an made the collection library. To quote
Note that the fail-fast behavior of an iterator cannot be guaranteed as it is, generally speaking, impossible to make any hard guarantees in the presence of unsynchronized concurrent modification. Fail-fast iterators throw ConcurrentModificationException on a best-effort basis. Therefore, it would be wrong to write a program that depended on this exception for its correctness: the fail-fast behavior of iterators should be used only to detect bugs.
In other words, it's an expensive, best-effort mechanism that garantees nothing. Or in other words: It is broken by design. Like everyone, the designers made a (common) mistake, and endeavored to fix it. But truly fixing it is not possible because the error is in the std lib. Just like strncpy()
BTW, queue is hugely slower when most common access is read or update, especially if several threads are doing it simultaneously.
not if reading front the top and inserting somewhere well-defined is what you want... which is usually the case for such a structure *shared between threads*. Consider what insert at position 5 would mean in a multithreaded case: the inserted element could be anywhere! Find->index would be meaningless without more synching, too, since another thread might insert between the find and the read. I'm not saying that a shared vector with insert and reads never occurs, only that it is rare. Also, as you should now, sync, at the methods of vector is almost certainly the wrong place to do it.
Your only complaint is bloat into which I will not go again.
In short, it is all pain, no gain. In Java, it is a symptom of a (probably intentionally) poor support for calling C and C++ interfaces.
Religion is regarded by the common people as true, by the wise as false, and by rulers as useful.