just brew it! wrote:CPUs have gotten fast enough, and compilers good enough, that there is rarely a need to do anything in assembly language any more. C is used pretty much everywhere that assembly language would've been used "back in the day" -- OS kernels, device drivers, embedded systems, real-time.
The rare exceptions where assembly is still used are things like the optimized strncpy() I mentioned a few posts back. A frequently used library function like that can have a big effect on application performance, so it is worthwhile to provide code paths which are hand-optimized for specific instruction sets.
In hindsight, the secret to its continued success is the fact that it provides enough abstraction to be portable across architectures (if you code carefully), but still allows direct access to the hardware. In effect, it is almost a "high level assembly language".
Yeah in general use you don't and there is no basic need for masses of programmers to know the details (they sure could all use better practices though) but those edge cases are a bitch. Anything big and important had better have at least 1 guy with a clue and some clout to make changes when the usual giant blob of slop has a design problem. Low level design rears its ugly little head in the worst way sometimes, kinda like our cpu fun right now.
I can tell you a solid 6-figure legitimate career (bonus: not getting sucked into the management chain) that is not going away unlike most valley buzzword-bingo-revolutions with just two words: assembly + malware. The downside (mostly for the employer) is for every 100 people that claim to be capable, maybe 1 actually is. Plenty of illegitimate work too, with different risks of course. The legitimacy also depends on where you live and who you work for.