OK my turn. C is easily converted into assembly language. Not one to one, but easily. That's really the whole point of the language. Pointers are in fact indirect addressing. Strings are null terminated which is something you might do in assembler. I think there were some instructions like increment and test. The entire set of variable constructs are very close to how you might access them directly in assembler.
Before C it might have been difficult to find byte arrays and pointers. The "cool stuff" comes from the libraries because they are written in C and C generally produces tight code. The compiler is generally written in C, so it's easy to "cross compile" programs.
Try that with BASIC, ALGOL, FORTRAN, APL, LISP, SNOBOL, COBOL, PL/1 all of which I had some experience.
I'm not sure about JAVA, Modula/2, FORTH and PASCAL. PASCAL, I have worked with. The others, no.
What really slows C down is not operating natively. What I mean is if the target has byte instructions and byte addressing and the compiler uses them, great, but if the machine only offers say 32 bit word addressing, then there will be more overhead.
Before C it might have been difficult to find byte arrays and pointers. The "cool stuff" comes from the libraries because they are written in C and C generally produces tight code. The compiler is generally written in C, so it's easy to "cross compile" programs.
Try that with BASIC, ALGOL, FORTRAN, APL, LISP, SNOBOL, COBOL, PL/1 all of which I had some experience.
I'm not sure about JAVA, Modula/2, FORTH and PASCAL. PASCAL, I have worked with. The others, no.
What really slows C down is not operating natively. What I mean is if the target has byte instructions and byte addressing and the compiler uses them, great, but if the machine only offers say 32 bit word addressing, then there will be more overhead.
Last edited: