
Programming languages list, by Ian Hickson - bpierre
http://ian.hixie.ch/programming/
======
weland
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.

~~~
Svip
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'.

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

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

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

~~~
CmonDev
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?

~~~
Svip
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](https://bitbucket.org/minux/goios/wiki/Home)

------
dkhenry
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 ?

------
AlexanderDhoore
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](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?

~~~
Marazan
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.

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

[1]
[http://www.youtube.com/watch?v=7cqq0V9LnXY&feature=player_de...](http://www.youtube.com/watch?v=7cqq0V9LnXY&feature=player_detailpage#t=15)

------
sambeau
I was amused by:

    
    
      Perl 5: Paradigm: Yes*

~~~
laumars
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.

~~~
sambeau
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://ian.hixie.ch/career/resume.html)

[http://lxr.mozilla.org/mozilla/find?string=PLIF/](http://lxr.mozilla.org/mozilla/find?string=PLIF/)

[http://software.hixie.ch/utilities/cgi/data/data.pl](http://software.hixie.ch/utilities/cgi/data/data.pl)

[http://software.hixie.ch/utilities/cgi/pingback-
proxy/server...](http://software.hixie.ch/utilities/cgi/pingback-proxy/server-
to-get-proxy.pl)

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

Everyone is entitled to their own opinion though :)

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

~~~
andreasvc
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.

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

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

------
mjburgess
I wont say this list is worthless, but, given that there's so much missing or
wrong... it's at best pointless.

------
zhaopuming
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/](http://forum.dlang.org/).

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

~~~
unwind
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.

------
V-2
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?

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

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

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

~~~
twelvechairs
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.

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

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

------
L4mppu
Only 9 languages listed? I am disappointed.

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

[http://hyperpolyglot.org/](http://hyperpolyglot.org/)

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

~~~
skc
Why not?

------
qznc
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](http://dlang.org/comparison.html)

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

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

~~~
pjmlp
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.

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

~~~
parasubvert
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.

~~~
edem
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.

~~~
parasubvert
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.

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

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

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

------
parasubvert
This seems like classic Hixie.

