Bring Out the Type System

By the way, about void-safety: for a decade now, Eiffel has been void-safe, meaning a compile-time guarantee of no run-time null pointer dereferencing. It is beyond my understanding how the rest of the world can still live with programs that run under myriad swords of Damocles: x.op (…) calls that might any minute, without any warning or precedent, hit a null x and crash.
—Bertrand Meyer, Why not program right?

I knew this would be exasperating, but really now. At this point, my eyes rolled completely out of my head and I no longer have eyes. ?

References don't just randomly become null without warning. You chose to call a function that might return null, and didn't bother to put in an if or assert when that's a possibility. Typically the exception system catches it if you do miss it.

The Objective-C model of nil messaging just returning nil or 0 was theoretically dangerous, but in practice incredibly useful. Crashing out in Javascript means I have to wrap everything with (x ? x.op() : null) to get the same effect, which might require a lot of temp vars.

Do type devotees actually believe in randomly-appearing errors, or that dynamic programmers just flail our limbs on a keyboard until something manages to pass tests, or do they just exaggerate a rare edge case they saw once, or are they completely fabricating this stuff to justify their waste of time/perversion?

Type systems are self-inflicted BDSM, and it is not self-evident that everyone wants to wear a gimp suit.

12 thoughts on “Bring Out the Type System”

  1. @mdhughes Sure. I've been using some R lately, and it's so frustrating that you have to deploy and run a test just to find a syntax error. IDEs should help, but R doesn't seem to have great support.

  2. @mdhughes Fair enough. I still prefer to specify the type, I think.

    Now, don’t get me started on the lack of a compiler in scripting languages. I think that’s a blog post I’ll soon be writing.

  3. @adiabatic I'm a C, not a C++, how does any resolve method dispatch? Or do you just have a giant if typeof/cast tree after pulling something out? somelist.pop().quack() plus or minus some null checking works in dynamic langs…

  4. @devilgate Or: You tied yourself up so you can only wiggle around enough to put a string in that list, and that's getting you off. And it's dom/sub is when the language designer does it to you. Bjarne has a lotta subs.

  5. @mdhughes The thing with BDSM, though, is that there’s always someone dominating and someone submitting. I don’t see myself being dominated by generics: I’m using them to enforce my will. This Collection can only have Strings in it, or it’s going to be inserious trouble.

  6. @devilgate Java's a little BDSM with Generics, but there are much more dominating and abusive languages now, where it's all but impossible to express free thought and just shove objects in a collection.

  7. @devilgate Well, specifically Eiffel, since that's the linked article. But Swift also bans nulls from normal use (! ? punctuation to do various "wrong" things).

    Dynamic objects have a class, but a reference or expression doesn't need to know it, which is what a "type system" is.

  8. @mdhughes You seem to be conflating two things. Having a type system doesnt automatically prevent null references. I mean, some languages may work like that, and that would be great. But to take Java, for example, since it’s he one I know best: checking for null values is depressingly the norm.

    That said, I find the idea of setting a variable without specifying — or maybe even knowing — its type, to be... worrying, let’s say.

Comments are closed.

To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. (Find out more about Webmentions.)