3 ms·
How do you expect to use sum types in assembly? Remember where C came from and why it was designed the way it was.
by lelanthran 4mo ago
How 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.
- lelanthran 4mo agoYou're missing the point - give me a Rust compiler that can run and compile in 64KB memory, then you'll understand that the language C was constrained not just by what the output is running on, but by what the machines of the time could actually handle during compilation.
- Parodper 4mo agoBorland's PASCAL did it on the IBM PC. And which modern C compiler fits into 64KB? Even TCC needs 100KB. But that's beside the point. No machine of the last 36 (I'll push my chances, 40) years needs to fit a compiler in 64KB.
- atherton94027 4mo agoPascal had pointers? They could be `nil` too https://www.freepascal.org/docs-html/ref/refse15.html https://www.freepascal.org/docs-html/ref/refse15.html
- Parodper 4mo agoThe thread talked about sum types, which apparently appeared on ALGOL; although I don't know how much memory did an ALGOL compiler need.
- lelanthran 4mo ago> Borland's PASCAL did it on the IBM PC. That's famously a single-pass compiler. Rust is famously unable to compile in a single pass. It is not possible to make a borrow-checking language that compiles in a single pass. > No machine of the last 36 (I'll push my chances, 40) years needs to fit a compiler in 64KB. Exactly - that's why C is what it is: it wasn't a mistake, they were working under the constraints of the time. My original comment (that you appeared to disagree with) said specifically "Remember where C came from and why it was designed the way it was." Let me ELI5 it for you: It was specifically designed to emit assembly in a single pass because of the constraints of the time. WTF does "Hur Dur Rust Goodest!" comments mean in this context?
- imtringued 4mo agoA naive sum type is just a tag plus a payload. There is no problem here. If you have enums you could have had sum types. The historical argument and appeal to assembly is illogical here. The only real argument is that niche value optimization is too complex or too clever for the time so even if sum types were in C, nullable pointers would still exist either way.