Hacker News new | past | comments | ask | show | jobs | submit login
Programming languages and their relationship styles (maradydd.livejournal.com)
43 points by dochtman on Feb 17, 2011 | hide | past | favorite | 30 comments



If you're going to make a comparative list of anything (programming languages, spoken languages, cultures, phones, whatever), for crying out loud limit it to things you know about! Padding the list out with things you've only read of in youtube comments does nobody any favors.

Based on the descriptions, I'd guess the author only has experience with C++, Python, Prolog, and possibly Java. That's a bit like someone who's only ever eaten frozen waffles, frozen pizza, and canned soup trying to write a comparative list of world cuisine.


Oh come on, you've got to give "Assembler just lies there" some credit.


I thought she did a good job with Lisp, Logo, and Haskell too. The Ada one left me completely perplexed -- as someone who wrote a fair bit on Ada in the 90s. What does this mean, "However, your tendency to wear the bondage and discipline gear all the time, as opposed to when your lover asks you to bring it out, frightens people off. You need to learn to stop calling people "worm" and "slave" in front of their mothers."?


I think it's a reference to Ada's reputation for being a "bondage and discipline language": http://c2.com/cgi/wiki?BondageAndDisciplineLanguage


I don't find it works well in this metaphor though, because the stereotype of Ada is that it's straight-laced and proper and thus popular with the Department of Defence. To me that doesn't mesh at all well with this picture of it bringing out the bondage gear to play "Mistress of Pain" of an evening.


I agree. I would have gone with a Catholic school headmistress or something like that. I was just explaining where the (overly literal) description came from.


I can't speak for LISP or Logo, but her Haskell entry was completely divorced from reality. It would have been a better fit (and somewhat appropriate) if she'd just copy-pasted the OCaml entry.


It's a reference to Haskell's extremely elaborate Turing-complete type system and the many contrarian (for lack of a better word) choices made in the language design — purity, default laziness, utter rejection of OO. Most people are unlikely to have used a language like that before. Even OCaml lacks those qualities.

And I don't think anyone would disagree that Haskell is extremely serious about safety ("prophylactic techniques") and carefully marking impure portions of the program by tainting them with IO.

The only part of the Haskell description I didn't get is the "person you're with no longer resembles Haskell."


> the many contrarian (for lack of a better word) choices made in the language design — purity, default laziness, utter rejection of OO.

Haskell isn't a pure language. Its only notable characteristic regarding purity is that it's possible to annotate whether some code is pure or not. Working with impure (and sometimes downright unsafe) is common, encouraged, and widespread. Especially in real-world code.

Haskell doesn't utterly reject OO; if anything, its combination of typeclasses and nearly-free threads brings it closer to Smalltalk or Erlang than many pretend-OO languages (C++, Java, C#).

Default laziness is one of the few truly weird parts of Haskell, and I sincerely doubt the author has done anything serious enough to worry about the evaluation model.


Haskell isn't a pure language. Its only notable characteristic regarding purity is that it's possible to annotate whether some code is pure or not.

Isn't this a requirement (the use of the type system for annotating purity), not something that is just "possible". And isn't that what people generally mean by its purity?


IMO, a pure language would be one which is incapable of representing impure code. Or at least, where it's very hard. I don't know where the line lies, but I strongly feel that any language that supports manual memory management, pointers, and mutable variables can't properly be called "pure".

Some people get confused between purity and expressiveness. Inexpressive languages like C require using impure constructs to represent fundamentally pure constructs. More expressive languages like Python don't need as many impure workarounds. Haskell, as a very expressive language, can do amazing things in pure code that other languages must resort to impurity for.

If you want a pure language, look into Agda or Coq.


Any language that is only pure is about as useful as write-only memory.

Haskell was historically pure and had side effects added as a way to interact with the world. The language enforces (discounting unsafePerformIO) the separation of pure and impure code. That is sufficient to label any practical language pure.


> Any language that is only pure is about as useful as write-only memory.

That's actually not true -- you can write the core of a system in a pure language, then use that pure core as a library in larger applications. Pure languages like Coq and Agda are often not Turing-complete, so various sorts of verification and proofs can be applied more easily.


> It's a reference to Haskell's extremely elaborate Turing-complete type system [...]

Haskell's type system is decidable. Thus it can't be Turing complete.


With the right combination of language extensions, you can force Haskell's type system to turing-completness; see http://www.haskell.org/haskellwiki/Type_SK


Yes. But if nothing else is said, I expect people to talk about the standard Haskell 98.

C++'s type system is isomorph to lambda calculus even without extensions, and nobody made this joke there.


I agree in general, but which of "purity, default laziness, utter rejection of OO" does OCaml have?


D'oh, none. I originally wrote "…has none of them," looked back and saw "OO," and cleverly "corrected" myself. Thanks for catching that.


She got it right with Smalltalk as well.


It is ashame too because the article started out nicely but I drew the same conclusion as you mid-way through.


I agree. It's certainly funnier when you have people ranting and joking about things they know about.


> Logo: Lisp's adorable 7-year-old niece who likes to play with her toy turtle. On casual conversation, she proves to be disturbingly worldly and well-informed. You resolve not to let your kids play around Lisp's house. Thinking about using Logo in any serious way makes you feel a bit dirty.

That was hilarious and disturbing at the same time.


Weird, sometimes the text is in second person ("Your older sister is the most popular...") other times third ("Python cares deeply about you..."). Not particularly entertaining anyway.


Agreed. Consistency would have helped a lot.


I like this from the comments

"C#

Well, you're a big girl now -- all grown up and the heiress of a promising diamond mine. But you're also a politician bucking to be the first female president. You've promised to be everything all of your predecessors were and everything they could not be.

You look strangely familiar like an old girlfriend who has had a facelift and who has been in the witness relocation program. The wig and wheelchair don't fool those who can smell your scent and those of us who see that little switch at the back of the wheelchair that says "/unsafe" which is a euphemism for "release the whore" or “Unleashed! Now Scks And Fcks Everybody.”

Once flipped, you'll be doing all of the nasty things we secretly like, but hired you not to do. But once we know you can be that whore, that's all you'll ever be... and at the dinner-party / political fund-raiser, your diamonds will still sparkle. Wipe your mouth, honey. "


Ruby's talks about popular older sister... who is that supposed to be though?


I assume Python or Perl. I recall seeing a quote from the creator along the lines of "I wanted it to be more OO than python"


I believe it could be smalltalk?


It's Perl. (This was written a while ago.)


S/N is too low.




Join us for AI Startup School this June 16-17 in San Francisco!

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

Search: