I mean, at the end of the day, if you really understand your language of choice, you know that it is jusf a bunch of fancy libraries and compiler tricks of top of C. So in my mind, I’m a fully evolved programmer in a language, when I could write anything I can write in that language in C instead.
Or, rather, most compiled languages are just syntactic sugar on top of assembly, and that’s especially true with C. (Oh, you can use curly brances and stuff for blocks? That’s sure easier to read than the label mess you get with assembly.)
It’s not what you can use that language to do - all general purpose languages are Turing Complete, so what you can do with them is exactly equal. It is about what the language will do for you. Rust compiler will stop you from writing memory unsafe code, C compiler cannot do that.
But how does the Rust compiler do that? What does it actually check? Could I write a compiler in C that does this check on a piece of Rust code?
C is so simplictic, that if I can write a piece of functionality in C, I must understand its inner workings fully. Not just how to use the feature, but how the feature works under the hood.
It is often pointless to actually implement the feature in C, since the feature already has a good implementation (see the Rust compiler for the memory safety). But understanding these features, and being able to mentally think about what it takes in C to implement them, is still helpfull for gaining an understanding of the feature.
Could I write a compiler in C that does this check on a piece of Rust code?
Well yes, but that code has to be written in Rust. The human has to follow rules to give the compiler a chance to check things.
C is so simplictic, that if I can write a piece of functionality in C, I must understand its inner workings fully. Not just how to use the feature, but how the feature works under the hood.
I don’t think that’s particularly more true of C than Rust or even Golang. In C you are frequently making function calls anyway for the real fun stuff. If you ever compile a “simplistic” chunk of C code that you think is obvious how it would compile to assembly and you open up the assembly output, you are likely to be very surprised with what the compiler chose to do. I’ve seen some professional C developers that never actually had a reason to fully understand how the stack works, since C abstracts that away and the implications of the stack don’t matter until you exceed some limitations.
Labelling the crab as C is sure to ruffle some exoskeletons…
As at least one nautically themed childrens’ book surely has it: C is for crab.
Coming at programming sideways feels more like a Haskell or Prolog thing, though.
Apple is for ADA
Ball is for BASH
Crab is for C
Dog is for D
Elephant is for Ecsmascript
Fox is for F#
Goat is for Go
House is for Haskell
Igloo is for
…okay I got stuck there.
Igloo is for Idris
Jigsaw is for Java
King is for Kotlin
Lion is for LUA
Monkey is for …
Monkey is for MoonScript
N is for Node.js
O is for Objective-C
P is for Pascal
Q is for QBasic
R is for R
S is for Swift
T is for TypeScript
U is for …
Umbrella is for UnrealScript
Van is for VimScript
Water is for Webassembly
Xylophone is for Xod
Yacht is for YASS
Zulu is for Zig
Okay, I had to consult Wikipedia’s list of programming languages for some of those.
I mean, at the end of the day, if you really understand your language of choice, you know that it is jusf a bunch of fancy libraries and compiler tricks of top of C. So in my mind, I’m a fully evolved programmer in a language, when I could write anything I can write in that language in C instead.
only true if your language compiles to c. fortran peeps are safe.
I’m an 80’s/90’s BASIC bitch, so I’m still irrelevant!
I thought it compiles to LLVM intermediate representation and then to the machine code of the requested platform arch. Am I missing something?
only if you design it using llvm. llvm is pretty new.
Ah ok I was referring to Rust specifically. Thanks!
yeah but rednax wasn’t.
Or, rather, most compiled languages are just syntactic sugar on top of assembly, and that’s especially true with C. (Oh, you can use curly brances and stuff for blocks? That’s sure easier to read than the label mess you get with assembly.)
It’s not what you can use that language to do - all general purpose languages are Turing Complete, so what you can do with them is exactly equal. It is about what the language will do for you. Rust compiler will stop you from writing memory unsafe code, C compiler cannot do that.
But they’re only equal in the Turing complete sense, which (iirc) says nothing about performance or timing.
But how does the Rust compiler do that? What does it actually check? Could I write a compiler in C that does this check on a piece of Rust code?
C is so simplictic, that if I can write a piece of functionality in C, I must understand its inner workings fully. Not just how to use the feature, but how the feature works under the hood.
It is often pointless to actually implement the feature in C, since the feature already has a good implementation (see the Rust compiler for the memory safety). But understanding these features, and being able to mentally think about what it takes in C to implement them, is still helpfull for gaining an understanding of the feature.
Well yes, but that code has to be written in Rust. The human has to follow rules to give the compiler a chance to check things.
I don’t think that’s particularly more true of C than Rust or even Golang. In C you are frequently making function calls anyway for the real fun stuff. If you ever compile a “simplistic” chunk of C code that you think is obvious how it would compile to assembly and you open up the assembly output, you are likely to be very surprised with what the compiler chose to do. I’ve seen some professional C developers that never actually had a reason to fully understand how the stack works, since C abstracts that away and the implications of the stack don’t matter until you exceed some limitations.
I assume you’re joking but just in case you’re not.
That is extremely not the case.
Only those who lack a sense of humor.