Post by erik quanstromPost by l***@proxima.alt.za1 and 3 are not really that different, so you're down to two examples.
C is OK for newer embedded systems (microcontrollers), older ones are
what they are and ASM may well be the way to go. But even there, ASM
is often just the lazy way rather than the more economical way.
perhaps you haven't programmed many microcontrollers. usually the
volumes are high and the per unit cost is very important so you end up
with very simple parts with very little ram/flash. the one i worked on
earlier this year had low speed usb interface, 2 gp registers, 256 bytes of ram
and 4k of flash.
Well, I look at the AVR and all I see is a form of "bloat" I could
have sold my mother-in-law (had I had one) for a few years back. It
may not be the paragon of design forsyth would beg for, but it sure is
cheap and vast. How much more it would cost than what you chose
instead is difficult to determine. To me, it seems PIC users are the
masochists.
Post by erik quanstromi found it easy enough to program in assembly, but i don't think you'd
get very far with c. i just don't think you could fit things into memory.
Oh, well, I recall a C compiler for the 8051... Are you sure you
could drive a USB port in assembler? It sounds ridiculously difficult
in C, to my mind. And, for the record, I do enjoy the challenge of
tight assembler coding, but more like I enjoy running a middle
distance than as a means to an end.
Post by erik quanstromPost by l***@proxima.alt.zaI have a feeling brucee will point out that the gain in efficiency in
using ASM is insufficient to justify the additional costs in
complexity and error potential.
i don't understand the assumption that the only reason to use assembly is
cycle efficiency.
also, could you explain why this is "lazy"? or why assembly is more
complicated?
Because it's very thin. You have thousands of instructions to keep
track of, some of which are not exactly the ones you ought to have
used. Because inverting a test is sometimes not as obvious as you
think (not everyone knows the instruction set backwards) and, most
importantly, because all the "clever" optimisations you added are
utterly incomprehensible to the poor sod that comes along to debug or
alter your code. I was tought a long time ago that the most important
feature of good programming is readability and assembler certainly has
none of that built into it.
Post by erik quanstromclearly, an assembly is more difficult to wield than c. but you don't
use them for the same thing.
Well, many would disagree. It has been stated with good cause that C
is a portable assembly language. If you believe as I do that Unix's
great step forward was coding the kernel in C almost entirely (I
learnt assembler on the Univac 1100 series, the OS was entirely
written in assembler and so were the few compilers it came with), then
the role assembly plays is bound to be restricted to the few features
that cannot be expressed directly in C.
Post by erik quanstromthis absolutist argument that c is teh bomb. asm suks is silly. it's like
arguing bicycles and ferraris. which one you need (and which one gets
you there faster) depends on what you're doing.
Nah, you read us all wrong. Assembler is what the engineers chose for
us to use. I found the Intel x86 assembler totally frustrating
because I had cut my teeth on the Univac. I eventually became
familiar with it (thank you IBM for publishing the BIOS code for the
PX/XT), but there's no way I could have or would have followed Intel
into the i386 and later instructions set. I do know that what Plan 9
does in splitting the compiler and loader differently from the
"obvious" boundary of C code and assembly code is very sensible and
far better suited to a programmer. Certainly, the loader now needs to
contain a lot of savvy about the target architecture (curse those
engineers once again!), but it's a specialised location for it and
only a few boffins need to get involved in it.
What we are all talking across each other about is that our benchmarks
have grown bloated, specially software in common use. GCC leading the
pack, we have enormous "packages" to perform tasks that would be
better done with a handful of minute tools instead. But the obsession
with combining and controlling everything within one place is blinding
us to the fact that we are creating complexity purely out of habit.
That's the "lazy" I mentioned earlier, it is easier to do it with that
tiny, sharp scalpel, than to sharpen the chisel first that would save
you effort in innumerable future operations. When the scalpel is an
existing assembler and the chisel is GCC, I sympathise entirely, but
that does not make assembly code superior to C.
Etc. I could go on and perhaps I ought to, but it's too easy for me
to get lost in a topic.
++L