Hacker News new | past | comments | ask | show | jobs | submit login
Programming languages list, by Ian Hickson (hixie.ch)
28 points by bpierre on Aug 23, 2013 | hide | past | favorite | 56 comments



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.


Only strings are 1-indexed in Pascal, all other forms of lists (both array of and object based lists) are 0-indexed. It is rather confusing.

It may be my limited English, but I don't entirely understand what he means by 'case-for-visibility'.


Fair enough. My memories of it are very dim, I could have sworn arrays were 1-indexed, too.


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.


Go is probably less controlled by Google than either C# by MS, or Java by Oracle.


C# has an alternative compiler - Mono that let's it run on Android, iOS. How do I run a Go program on iPhone? What's the point of the "freedom" then?


C# is from 2000. Go is from 2009. Give it time.

Besides, there is an iOS port of Go here: https://bitbucket.org/minux/goios/wiki/Home


I think that depends more on how the company manages the development than the company itself.


If there will be one long green bar (as it should be) then Python/Ruby hipsters might get nervous. We don't want that, right?


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 ?


Today I Learned the difference between Nominative and Structural typing. Go is labeled as structural, while the others are nominative.

Check it out: http://c2.com/cgi/wiki?NominativeAndStructuralTyping

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?


The c2 wiki is the source of secret programming knowledge and opinions. As such the first rule is not to talk about it lest people ruin it.

It's probably one of the best sites on the internet for programmers wanting to learn.


Ok. Got it. Ssh be quiet, we're hiding! [1]

[1] http://www.youtube.com/watch?v=7cqq0V9LnXY&feature=player_de...


I was amused by:

  Perl 5: Paradigm: Yes*


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.

http://ian.hixie.ch/career/resume.html

http://lxr.mozilla.org/mozilla/find?string=PLIF/

http://software.hixie.ch/utilities/cgi/data/data.pl

http://software.hixie.ch/utilities/cgi/pingback-proxy/server...


I'm also a Perl hacker. I don't agree with it.

Everyone is entitled to their own opinion though :)


Looking at his code it becomes fairly obvious that he's not a very good Perl developer. That neatly explains why the perl row has so many mistakes.


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.


Yes, No, FileNotFound, three major paradigms


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.


> Python: Direct memory access: no

Wrong. `ctypes.c_char.from_address(a)` and enjoy your SIGSEGVs like a seasoned C programmer.

(Well, that is unless you're on Jython or IronPython.)


No Objective-C on the list.

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 wont say this list is worthless, but, given that there's so much missing or wrong... it's at best pointless.


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/.


What's the difference between 'VM' and 'Native with runtime'? (In the 'Execution' column)


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' is lack of understanding what a compiled language is all about.

Even C and C++ have runtimes.


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?


Can you change types in C#, e.g. converting a private field into a public one? Java introspection can do this.


Yes, assuming the current application domain security allows your code to do it.


Am I the only one around here that feels bothered when one writes "orientated"?


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.


"Oriented" is the right word. "Object-oriented"


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.)


It's British English :-)


Only 9 languages listed? I am disappointed.


These tables have a few dozen languages and side by side snippets rather than a language feature ticklist

http://hyperpolyglot.org/


Same. I would love to see more.


C# has virtual constructors? I also wouldn't rate its Unicode support as highly as Java or Perl's.


Why not?


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.

Feature table: http://dlang.org/comparison.html


The "Execution" column show a lack of understanding about languages and their respective implementations.

And the "Other notable failings" looks pretty much a very biased personal opinion.


Yes. Execution is not actually a property of a language, but of its implementation. Some languages have several implementations, each with distinct characteristics!


How do young developers fail to learn this nowadays?

Back in the 8 bit days, at the age of 12 I was already aware of compilers and interpreters implementations for several languages.

Just as one possible example, there were BASIC interpreters and compilers for CP/M.


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*"


It is only "object oriented" in North America. Europeans have long used "orientated".

If you've followed the HTML 5 spec process, you'll have answers to your other questions as to Hixie's inisght and taste in technology paradigms.


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.


He's the HTML5 spec editor, known for his strong opinions on many topics.

I am being polite here, but there is a reason certain languages were ignored.


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.


No Lisp! And clearly written from a frame of mind that hasn't imagined much beyond the capabilities of C and Java.


C# is VM/Native. It runs native on iOS via Xamarin compiler. It runs native on Windows Phone 8 via cloud compilation. Please correct/do more research.


This seems like classic Hixie.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: