Post by Tim RentschIt's been amusing reading a discussion of which languages are or are
not high level, without anyone offering a definition of what the
term means.
That is an important point.
Post by Tim RentschWikipedia says, roughly, that a high-level language is
one that doesn't provide machine-level access (and IMO that is a
reasonable characterization).
No, that's not what Wikipedia says. To get the full picture, read the
links:
<https://en.wikipedia.org/wiki/Low-level_programming_language>
<https://en.wikipedia.org/wiki/High-level_programming_language>
Roughly speaking, they define a "high-level language" as one with a
strong abstraction from the underlying machine, while a "low-level
language" has little or no abstraction.
Wikipedia classifies C as a high-level language that also supports a
degree of low-level programming, which I think is a fair assessment.
Post by Tim RentschOf course no distinction along these
lines is black and white - almost all languages have a loophole or
two - but I expect there is general agreement about which languages
clearly fail that test.
Agreed - trying to make such binary classifications is usually a bad idea.
Post by Tim RentschIn particular, any language that offers
easy access to raw memory addresses (and both C and C++ certainly
do), is not a high-level language in the Wikipedia sense.
That is simply incorrect, based on the Wikipedia articles.
I think it is perhaps better to first talk about low-level and
high-level coding or functionality, rather than the language.
High-level coding deals with abstractions, defined by their
specifications rather than the hardware (or virtual machine) running the
code. Low-level coding is tightly tied to the hardware - access to
arbitrary memory (subject to OS or hardware restrictions), features
based on the instruction set of the computer, and so on.
C clearly supports high-level programming - you can write very portable
code that is independent from the underlying hardware. (Most C
/programs/ require a least a small amount of implementation-dependent
behaviour or external library code, but a lot of C /code/ does not.) It
also clearly supports low-level programming.
Whether a programming language is considered "high level" or "low level"
is, IME, determined by one question - is the language mainly defined in
terms of abstract specifications or by the hardware implementing it? C
does have implementation-specific behaviour, and is thus not "pure"
high-level language, but there can be no doubt that it is primarily
defined as a high-level language.
Both C and C++ also /support/ a limited (but very useful in practice)
subset of low-level programming. That does not make them low-level
programming languages, any more than C++ is a functional programming
language just because it has lambdas. And even if one were to classify
them as low-level languages, it would not stop them /also/ being
high-level languages.
And note that Wikipedia classifies it as a high-level language, and
lists it along with other high-level languages. (I don't consider
Wikipedia to be authoritative, but it's usually a reasonable and
objective source for many purposes.)
Post by Tim RentschThird amusement: any language that has not yet become popular
has already failed to become popular.
Or it could be a new language that is gaining traction.