4 ms·
Sum types, of course.
by pdimitar 4mo ago
Sum types, of course.
- atherton94027 4mo agoHow are you going to build sum types in a way where you can interact with assembly or machine code? The CPU doesn't know about that stuff
- pdimitar 4mo agoOCaml / Rust / Haskell. Apparently they found a way to have the CPU know... about "this stuff".
- imtringued 4mo agoSum types map down to reading a tag and doing a comparison against fixed values. I don't know what to tell you, but you're clearly not cut out to be a software developer in either machine code, assembly or C or any other language if you don't understand something this basic.
- bigstrat2003 4mo agoThat's unnecessarily rude, and untrue in any case. Everyone has to learn stuff sometime, and most people won't naturally run into the implementation details of how higher level languages get translated into machine code.
- pdimitar 4mo agoI agree his tone was not productive but the comment he responded to seemed like a disingenuous argument as well. "The CPU doesn't know about that stuff" is not true -- or it's arguing in bad faith. I mean, hello, tagged unions, all of us with some experience can write a C program that works with those. It's 100% false to say what he said.
- atherton94027 4mo agoPlease check your tone down, I'm arguing politely with you but apparently you're so wrapped up in this that you're resorting to ad hominems. Sum types aren't the be all end all to all issues, for example you can not representer pointer values efficiently with sum types. Even rust does not wrap up pointers with sum types. Now try to go back 37 years to C89 and ask yourself if they were going to require compilers to have stringent checks like the rust compiler does.
- pdimitar 4mo agoNobody claimed that "sum types are be all end all". I originally responded to "how would you handle cases where a value is unset without NULL" with "sum types" which are trivially presentable with bit masks if memory usage is of big concern (and nowadays in 99.9999% of the cases it genuinely is not). And, tagged unions are a thing and were a thing for a long time. Of course it's too late to change all this today; it would have been too late even 20 years ago. But outside of f.ex. Linux kernel and some other super hardcore C libraries, a lot can be done for the world to migrate to safer constructs and away from sentinel values. And that's what languages like Rust do. Super memory constrained environments have not been the mainstream programming work for decades and now remain limited to embedded / IoT. Not sure what the reservation against sum types is these days.
- atherton94027 4mo agoYeah and I was trying to explain that sum types don't work for pointers, without a significant performance hit. No one here is saying C is a great design, but in the context of 60 years ago, it worked out pretty well, and all the language which had additional runtime complexity (Pascal of course, but also Ada and FORTH) struggled because they didn't dial the right level of complexity
- deleted 4mo ago[deleted]
- steveklabnik 4mo ago[dead]
- lelanthran 4mo agoHow do you expect to use sum types in assembly? Remember where C came from and why it was designed the way it was.
- pdimitar 4mo agoI remember why C stayed what it is at least: elitism and gatekeeping. And YAGNI, repeated millions of times, of which only the first few were correct. You're telling me OCaml / Rust / Haskell compile to fairy pixie dust? Obviously their compilers figured it out and it works.
- lelanthran 4mo ago> I remember why C stayed what it is at least: elitism and gatekeeping. If that was the goal, it failed horribly - the gatekeeping didn't work because the popularity exploded. > You're telling me OCaml / Rust / Haskell compile to fairy pixie dust? Obviously their compilers figured it out and it works. I said nothing of the sort.
- pdimitar 4mo agoYou asked how sum types work in assembly. I'm telling you that at least 3 compilers figured that part out.
- lelanthran 4mo ago> You asked how sum types work in assembly. No, I didn't - I asked how sum types were supposed to work in an era of 64KB memory systems.
- imtringued 4mo agoThey don't need extra memory in Rust for the case of nullable pointers. The boring cases require an enum tag in C too. By bringing up the one thing that doesn't matter, your argument becomes purely ideological.