|
|
Darren New <dne### [at] sanrrcom> wrote:
> Warp wrote:
> > Because C allows many types of low-level optimization that are very
> > difficult, if not even outright impossible, in higher-level languages.
> > For example, you know how a C struct will map onto memory locations,
> > on every possible platform which your kernel can be compiled for.
> Not in a portable way. You don't know what kinds of padding happen, or what
> order the integers are in.
Yes, you do. Maybe you didn't understand the "on every possible platform
which your kernel can be compiled for" part?
Ok, maybe I expressed myself poorly and it should have written "on every
possible platform your kernel has been ported to".
> > You know
> > exactly what assigning one struct instance to another entails as machine
> > code.
> That's true of lots of low-level languages too. FORTH and Ada both spring to
> mind, for example. Lots of languages of the same ilk have instructions for
> laying out structures at a per-byte level. (Erlang? Modula-whatever?)
The difference is probably that neither FORTH nor Ada have the same amount
of libraries, platform support or optimizing compilers, nor are they nearly
as popular.
> > If you need a pointer which should point to a raw memory address,
> > you can create one.
> Not in C. Only in some language that looks like C but invoked undefined
> behavior.
Of course in C. And "undefined behavior" can also mean "works as desired
in this platform". When you know what the compiler is doing, and you are
writing platform-specific code, C allows you to do a whole lot of things
you can't do with other languages.
Most DOS demos written in C used raw pointers (eg. to the VGA memory
buffer). They worked just fine on that platform.
> > And of course C allows for programmatical optimizations which can often
> > be difficult in higher-level languages. Memory usage optimization would be
> > the main example.
> I'm not sure what that means. If I have an array of 12-bit values in C,
> that's a PITA to implement compared to a lot of other languages (including C++).
It means that many if not most of the "high-level" languages pay zero
attention to memory usage. They freely and carelessly allocate memory like
it was candy because, you know, all computers have gigazillions bytes of
RAM and any program written in that language will be run alone, so it
doesn't have to worry about other programs which might also want some of
the memory.
--
- Warp
Post a reply to this message
|
|