On 2012.5.20 4:40 AM, Peter da Silva wrote:
> Smalltalk was also not low level enough to be used as an alternative to C.
> It wouldn't even fit in the PDP-11 they started with.

Never claimed it was.


>> The list was done evaluating C as a language we use and are heavily 
>> influenced
>> by in 2012.
> 
> And why is that? Why hasn't anything that's _genuinely_ better caught on?

Just because something is the default, or even a category killer, doesn't mean
it doesn't have some glaring faults.  We should particularly look our defaults
straight in the eye and ask if we're using it because its great or because its
what we know.  Understanding your tools flaws is as important as understanding
its strengths.

I'll have a go though.

The first is "the enemy of the best is good enough" and C was good enough...
for a time.  It solved a problem (portable machine programming) better and
faster than its contemporaries and even much later languages.

The second is longevity.  It's only been in the last ten years that hardware
has become so cheap and powerful that we no longer have to be concerned with
performance at every level (alternatively, that CPU and memory are no longer
the bottleneck).  Thirty years is a long time to get entrenched and have the
entire industry wrap itself around a technology.

The third is distraction.  For some reason every language which started out to
replace C gets distracted by dreams of being an application language.  I'm
thinking Java (was originally supposed to run on set top boxes), Objective-C
and C++  It is particularly curious that we haven't had a serious attempt in
thirty years.  There's something about writing a pure system programming
language that invites distraction.

The fourth is that for 99% of developers, C is not an issue.  They've "solved"
the problem of C by writing in higher level languages and leaving it to a
handful of others to worry about writing their language or tool in C.  There's
no great drive to fix the problem, for most folks it isn't a problem.  This
isn't necessarily the most healthy way to manage your technical development,
see also IPv6.

Fifth, I think there's a broad overlap between "people who want to write at
the system level" and "people who want to be really close to the hardware", C
fits this mentality.  The longer the two are wielded together, the more the
system programming community will think in C.

This is a personal observation, folks to code C like details of bits and
registers and hardware details and such.  They like to feel in total control
(even if an advanced compiler means they're not).  If your system language
tries to abstract this, a lot of systems people won't touch it.  Myself?  I'd
like to be able to work my languages and operating systems and databases
without having to care about hardware.  But C won't let me do that, so I
ignore system programming.

Finally, C has a TOTAL lock on the subject.  Application programming has
always been multilingual, and ready to accept new languages, but systems
programming is nothing but C.  None of the disruptive technologies which have
created new niches for application languages (mobile, web, desktops, cheap
RAM, cheap CPU, Unicode, new operating systems, multiple CPUs, corporate power
plays) seem to be creating the new niches at the system level.  Maybe they
just don't have as big an impact.  Maybe system programmers are used to their
language being kinda clunky.  Maybe C is just very adaptable because their
standard features and libraries are so slim.  Probably a bit from all that.
It's very difficult to get a break in a decades old monoculture.


-- 
s7ank: i want to be one of those guys that types "s/j&jd//.^$ueu*///djsls/sm."
       and it's a perl script that turns dog crap into gold.

Reply via email to