by neiesc on 4/13/15, 4:41 PM with 63 comments
by picks_at_nits on 4/14/15, 1:31 AM
The paper gives laziness as an example. It’s made possible by idempotency. Which is made possible by the removal (or careful management) of side-effects. Which then allows certain otherwise impossible ways to express infinite data structures.
by kmicklas on 4/14/15, 2:17 AM
by efaref on 4/14/15, 9:14 AM
The way "goto" is used in modern C (named breaks and defined function escape routes) is perfectly acceptable. Newer languages include these features in the language, in much the same way that C encoded structured "goto"s as "while" loops and "if" statements.
Dijkstra was complaining about unstructured programming compared to structured programming.
by mden on 4/14/15, 1:46 AM
Also a lot of the things he lists are not at all as clearly harmful as he makes them out to be.
GOTO: Used in some of the cleanest code bases. For example the lua programming language, redis db, and linux kernel OS. Yes the use is limited, but it's there not because of mistakes but rather because it is sometimes the most clean way.
Numbers: I don't understand this one. In the very least having different types of numbers seems to be a necessity for anything performance oriented such as graphics. JS not having them (they seem to have been added for WebGL as an extension, no?) is not a good reason for all new languages to do the same.
Mutations: I am personally of the view that mutation often simplifies the informal reasoning complexity of a program. There's a reason functional programming hasn't caught on and it likely never will. A hybrid approach of having both immutability and mutability like Rust seems most sensible.
Reference equality (Referential transparency?): If you have immutability do you not get this for free? How can you be sure about getting rid of mutations but not be sure you want objects to be equal based on data?
Each language has it's own quirks that make it special and that's part of the reason programming is fun. There's never a single right way.
by ruricolist on 4/14/15, 12:15 AM
by hacknat on 4/14/15, 12:18 AM
* Golang does away with inheritance and exceptions.
* Rust does away with mutability, or at least makes it explicit.
I wonder if a convenient language with all of these taken out could exist. I'm skeptical about a single number-type.
Also, wouldn't reference equality simply be gone if you take away pointers?
Also, his point about interfaces is pretty narrow, not every interface's manipulation can be characterized by one or one set of manipulations. I think Golang is a fantastic example of a language that forces a role-based interface pattern.
by thomasfoster96 on 4/14/15, 1:20 AM
by StefanKarpinski on 4/14/15, 3:05 AM
by sacado2 on 4/14/15, 8:37 AM
More generally, I'm still waiting for a massively successful piece of software made in a language that would involve no mutation, no null pointers, only one numeric type, etc. Even John Carmack has not yet delivered a revolutionary game engine programmed in Haskell.
by Grue3 on 4/14/15, 1:16 PM
by aikah on 4/14/15, 5:31 AM
Sure, but maybe the reason is the people that choose to use F# and Caml like languages are a bit smarter that the regular coder. Or maybe F# projects have a different nature and people don't write "enterprise applications" in F#.
by andrept on 4/14/15, 9:39 AM
by kragen on 4/16/15, 7:27 PM
by kephra on 4/14/15, 10:01 AM
Does he want to forbid factoring? His feature looks more like a deficit of the linker to me.
by digitalzombie on 4/14/15, 7:56 AM
Not sure about Cyclic dependencies and I don't think it have Reflection unless I'm wrong.
by ticking on 4/14/15, 9:24 AM