On Thursday, 4 February 2016 at 23:53:58 UTC, Ola Fosheim Grøstad
wrote:
On Thursday, 4 February 2016 at 23:35:46 UTC, tsbockman wrote:
Just because *sometimes* the source code of the other module
must be compiled independently, is a poor excuse to skip
obvious, useful safety checks *all* the time.
The context is a compilation system for building big software
on very slow CPUs with kilobytes of RAM.
C was designed for always compiling independently and compiling
source files that are bigger than what can be held in RAM, and
also for building executables that can fill most of system RAM.
So the compilation system was designed for using external
memory (disk) and that affects C a lot. The forerunner for C,
BCPL was a bootstrap language for writing compilers. So C is
minimal by design.
OK. That's a good reason for C's original design.
But it's 2016 and my PC has 32GiB of RAM. Why should a C compiler
running on such a system skip safety checks just because they
would be too expensive to run on some *other* computer?
This isn't even a particularly expensive (in compile-time costs)
check to perform anyway; all that is necessary is to store a
temporary table of symbol signatures somewhere (it doesn't need
to be in RAM), and check that any duplicate entries are
consistent with each other before linking.
This is already a solved problem in most other programming
languages; there is no fundamental reason that the solutions used
in D, C++, or Java could not be applied to C - without even
changing any of the language semantics.