4 ms·
Isn't "C Runtime" inaccurate? Wouldn't it be the static or dynamic linked libraries for the particular program in question?
by ittan 3y ago
Isn't "C Runtime" inaccurate?
Wouldn't it be the static or dynamic linked libraries for the particular program in question?
- pjmlp 3y agoNope, what do you think calls into main(), does floating point emulation, handles signals on non UNIX platforms, provides threading support?
- dahfizz 3y agoThe term "runtime" is overloaded here. The C runtime is not what people usually mean when they say a language has a runtime. There is a crt.0 "C Runtime" object. This is code that is literally run "at runtime". When you execute a binary, the C runtime is the first thing executed to setup the stack and call main(). This is just a bit of assembly that runs before main(). It shares ~nothing in common with "runtime" languages like Python or Java where the runtime is alive during the whole program's execution. The C run time does not handle floats or threads or anything like that. Software floats are dealt with by the compiler and threading is implemented as its own library (either in userspace or built into the kernel).
- pjmlp 3y agoI guess you can educate Microsoft on that then. https://learn.microsoft.com/en-us/cpp/c-runtime-library/c-run-time-library-reference?view=msvc-170 https://learn.microsoft.com/en-us/cpp/c-runtime-library/c-ru... It doesn't matter what people think, rather the CS point of view of a language runtime is. That library is the runtime. C implementation without the respective runtime is what is called a freestanding implementation as per ISO C.
- lanstin 3y agoLibraries and crt0.o and the like. Libgcc_s ; but it isn’t a runtime in the sense that some magic is doing GC or scheduling for routines. ABI that describes what the assembly should be doing, it isn’t a thing doing stuff.
- pjmlp 3y agoRuntime is whatever a programming language needs to support its execution, as per CS compiler theory.
- dahfizz 3y agoThere is a code object called "C Runtime" (crt0.o)[1]. This was a good name at the time. Its a bit of code that gets executed literally "at runtime". When you run a program, this object gets invoked to setup the stack and call main(). Its just a bit of assembly. Then, decades later, languages like Java overloaded the term "runtime" to refer to their interpreter / vm. This causes confusion to this day, evidently. [1] https://en.wikipedia.org/wiki/Crt0 https://en.wikipedia.org/wiki/Crt0