I presume this was mostly tongue-in-cheek or something, but even so I have a couple of pet peeves:
- It's not immediately clear what the criteria for a "major failing" is. C# is actually an ECMA and ISO standard, just like JavaScript, certainly less controlled by Microsoft than Java is controlled by Oracle through their rubber-stamping JCP, or than Go is controlled by Google. Also, if we're getting stuff like "one-based strings" in the list of failings (BTW, wasn't indexing done starting from 1 for anything in Pascal?), indenting-based block delimitation should also be listed there for Python, because what the hell, I don't like that either.
- Execution is arguably a property of the runtime, not of the language. There are some C interpreters around, for instance.
I think if "Controlled by Microsoft" is going to be a "notable failing" for C#, "Controlled by Google" has to be a negative for Go, and "Controlled by Oracle" has to be one for Java.
Actually Ian, Scala has all the things you mention ( It isn't as nice for direct memory manipulation as C, but you can do it ). Not that everything in that list is important or necessary, It kind of like saying you can't get a car that has a maximum speed of 200mph and a fuel economy of 100+ MPG, and is also a reusable space launch vehicle. Yeah each of those exist, and we could make something that checked all those boxes, but even if we could would it be wise to design said vehicle just to meet an arbitrary set of features, not taking into account any trade offs that would make it better at any single task ?
BTW: Every time I dive deeply into programming, especially computer science theory, I come across this c2.com site. Why isn't it mentioned more? I understand it was the first wiki ever?
It was the "unmaintainable" comment that got me. This guy clearly doesn't like Perl and is letting his bias affect the list.
Perl is no less or more maintainable than any other programming language. It just depends on the developers you use that particular tool. And the whole "Perl promotes unreadable code" is really a thing of the past; modern Perl has come on leaps and bounds.
I think if you read this in the context of Hixie being a well-know internet person, standards geek and known Perl hacker you can see that it is supposed to be humorous (and a little self-depracating being he has to maintain his own Perl scripts).
Don't take it too seriously and you will see there is a more than a grain of truth in what he says.
Agreed. I thought "Paradigm: Yes" was hilarious, but the Perl row has a few errors.
"Function Overloading" should be "N/A" for a language without subroutine signatures. Any Perl function can take any combination of arguments and decide what to do with them. This is used to create de facto function overloading.
"Method Pointers: No" is ridiculous. Perl has subroutine references, which includes methods. You can even use a method name string as a method reference if you need to.
In the C++ row, what is meant by "very limited" RTTI and "limited" Automatic Memory Management. RTTI is, AFAIK, actually a C++ concept and memory management is in fact implementation defined, though most implementation provide you with none in the runtime. The standard containers do, of course, provide memory management; IMHO, the balance is great in C++.
Also, Python garbage collection is optional and generally the memory management is through reference counting, not crappy stop the world garbage collection.
RTTI is runtime type introspection. You may be confusing it with RAII, resource acquisition is initialization.
Yes, technically reference counting is not garbage collection, but in these sorts of comparisons the term is typically intended to distinguish automatic from manual memory management. The overhead of reference counting is non-trivial, that's why it's lumped with the garbage collected languages.
LLVM is open source project sponsored by Apple, but I'm not sure about Foundation framework (a standard library with containers, concurrency functions and networking).
I think D will soon become your ideal language. It is quickly stabalizing and fits nearly all aspects you've listed, with only `a rich set of libraries` still on the road. You can see how `vibrant` the D community is in http://forum.dlang.org/.
The former means that programs are converted into code for a virtual machine, which is then executed. Often this involves compiling them back to native code, as in various JIT solutions.
The latter means that the code compiles straight to native machine code, but also that executing the code relies on services provided by a "heavy" (as compared to C's runtime library) runtime library. For Go, the runtime does garbage collection, i.e. it's takes a fairly "active" part of the execution.
Native with runtime means you get a native executable which has to use the runtime of the language, for example containing its garbage collector and support for co-routines. With VM you get code for, e.g., a stack or register-based virtual machine, not native code.
I suspect it's the difference between being forced to ship with a library at runtime to provide library functions, and the compiled byte code being interpreted by a native executable.
e.g. the difference between 1+1 being translated to bytecode meaning 1+1, and it being actually translated to an x86 add operation.
What is the difference between RTTI support in C# ("yes") and Java ("comprehensive")? I only superficially know Java. What advantages does it offer over C# in this aspect?
to orient is to face east. orientation is understanding which way is which (if you know what is east, you know others by extension). because knowing any direction gives you orientation, any known point of reference is therefore an orientation. to be orientated is to have an orientation.
twelvechairs was explaining the etymology. As current usage goes, it's a British English / American English difference, as has already been pointed out.
(And frankly, taking an arbitrary regional spelling difference and declaring that whichever one you're used to is "Right", without even an attempt at a justification, is pointless at best and borderline trollish at worst.)
D still lacks on the libraries front, but apart from that it is fits the bill. Easy interop with C and even somewhat interop with C++ makes the library deficiencies bearable.
Yes. Execution is not actually a property of a language, but of its implementation. Some languages have several implementations, each with distinct characteristics!
Where are all the functional languages? Did I miss something? Where is LISP? Prolog? You only know about the OO and the procedural paradigm? "Prototypes" is how OO is achieved in javascript it is not considered a paradigm in that level you are using the term. You should've just said it is OO.
I also don't understend why closures are "planned" in java but method pointers are "no*"
Ok, I corrected it. He was talking about programming languages in general. He did not mention HTML 5 at all. If I think about writing web applications the first programming language which comes into mind is Clojure. This does not make sense for me.
I do not understand the "paradigm" column. Labeling C++ as OO is not fair, especially since the standard library is rather "Generic Programming" than OO. Most of the languages do not fit into one paradigm anyways.
Also, why does Go have "Native with runtime"? All the other native languages have runtimes as well.
- It's not immediately clear what the criteria for a "major failing" is. C# is actually an ECMA and ISO standard, just like JavaScript, certainly less controlled by Microsoft than Java is controlled by Oracle through their rubber-stamping JCP, or than Go is controlled by Google. Also, if we're getting stuff like "one-based strings" in the list of failings (BTW, wasn't indexing done starting from 1 for anything in Pascal?), indenting-based block delimitation should also be listed there for Python, because what the hell, I don't like that either.
- Execution is arguably a property of the runtime, not of the language. There are some C interpreters around, for instance.