A lot of the HPC code running on large Linux clusters is written in Fortran. Partly for historical reasons, and partly because HPC type code runs fast without much optimisation effort. Updates have done a lot to make the new code look less like spaghetti, so its a much better language to write in than it used to be.
Yeah, not sure what makes people frown upon Ada.
Unfortunately in the 1990s C also fell into the trap of trying to be both a low level and an application level language. Either choice would have been OK, but the result is a mess. Hence we have Java and Python taking over the application domains, and C becoming too complex for low level stuff.
But I also believe that a hidden element associated with those libraries is that FORTRAN is designed with a native complex number type.
Apparently the compilers of C that I have seen don't implement the full language. I haven't looked at gcc.
Yeah, not sure what makes people frown upon Ada.To me, the biggest thing is GNAT being the only open source compiler, and a lot of people saying the commercial ones are way better.
Apparently the compilers of C that I have seen don't implement the full language. I haven't looked at gcc.
To: [email protected]
Subject: What is an Object in C Terms?
Date: Wed, 26 Sep 2001 16:52:10 +0100
From: Nick Maclaren <[email protected]>
The actual incompatibility is that C defines all parallelism and 'real'
or external signal handling to be undefined behaviour, as it is outside
C's mode, and that POSIX leaves all language issues to C, as it is
mainly a library interface. Therefore such things may be well-defined
in POSIX terms, but have undefined effects on the program which uses the
POSIX facilities! The incompatibility is therefore of the form that
POSIX relies on C to define behaviour that is explicitly undefined!
Obviously, the solution is for POSIX to define the language aspects that
it needs, but the problem is that doing so is very tricky.
It was pretty complex in C90, but C99 has complicated this area very
considerably, and the problems are going to cause major difficulty over
the next decade....
...
The vast majority of commercial implementors and important users are not
members of SC22/WG14 or even any national body affiliated with it, and
work solely from the standard. As they should, because ISO rules (and
all normal commercial practice) specify that the standard is the
official document, and records of its development should be used for at
most clarification.
I can witness that this area has caused major headaches ever since C90
was developed, and that many implementors are very seriously unhappy
about C99. They simply do not know what most of it implies and, as is
generally agreed, the subtleties in this area are critical for both
optimisation and the development of robust applications. Most of the
ones that I have contacts with had severe problems deciding exactly
what optimisations were allowed in C90, and often went through several
iterations before and industry consensus emerged.
...
C99 introduced the concept of effective type (6.5 paragraph 6), but it
has had the effect of making a confusing situation totally baffling.
This is because it has introduced a new category of types, it has
invented new terminology without defining it, its precise intent is most
unclear, and it has not specified its effect on the library. The first
aspect was mentioned above.
...
In this section, the question being asked is how large the array object
that corresponds to a pointer value is. Please ignore any assumptions
that can be used by the fact that two constructions are in the same
compilation unit, as they could easily be separated. For the purposes
of these examples, let us assume no padding and that all structures have
the same alignment.
(code omitted for brevity)
Now, which of the first five calls are conforming? There are obviously
plausible interpretations of the standard that allow all of them, all of
them except THREE, or only ONE and FIVE. But consider TWO: exactly
WHICH construction breaks any wording in the standard? There is clearly
nothing in either ONE or TWO on their own that is not conforming, and
the standard has no explicit concept of a value having a 'history' that
affects its semantics. And is the intent REALLY to distinguish FOUR and
FIVE?

I won't bother to note that in the late 90s (and presumably later) compiler writers were having considerable difficulties understanding the C/C++ standards w.r.t. how all the different bits interacted.
That is how it should be for a language with sufficient history: you don't develop the standard text first, then try to implement it; you implement various things, let them compete, and extend the language when a consensus appears or users agree.
I won't bother to note that in the late 90s (and presumably later) compiler writers were having considerable difficulties understanding the C/C++ standards w.r.t. how all the different bits interacted.That's why C11 went completely off the rockers, adding things only implemented by a single vendor (who didn't even have a native C compiler, only a C++ one that supported a subset of C).
C99 and C23 standardized things that have been found to work in practice first. That is how it should be for a language with sufficient history: you don't develop the standard text first, then try to implement it; you implement various things, let them compete, and extend the language when a consensus appears or users agree.
In other words, if you try to further develop a language with as wide existing code base and history as C standard-first, hoping/demanding compiler implementers will follow it, you're doing it wrong. Only if you extend it carefully, with implementations tested and verified to work for the vast majority of the user base, makes it sense to codify it into the standard.
It is different when the language itself is still being developed, still looking for its niche. Then, it does need strict focus and careful planning, so that it does not fall into the everything-for-everyone trap. White papers and exact specifications for languages are excellent. But there comes a point when any radical change should be ruled out (and instead create a new language, not just a new version), and further development of the language limited to extensions, practice first, what users find most useful, without breaking the existing code base. Consider Python 2 vs 3 as an example, and all the pain and extra work that created.
From the emboldened statement, can we presume that C and C++ are not "still being developed"?
From the emboldened statement, can we presume that C and C++ are not "still being developed"?Human languages are vague, and I'm not very proficient in English phraseology. Choosing proper words with the correct associations is hard.

Analogy: construction scaffolding used to be made from wood, and bamboo is still used in developing countries. Just because it can and is used for large constructions, doesn't mean that it wouldn't be better to use steel scaffolding. Large C programs are like this:
Analogy: construction scaffolding used to be made from wood, and bamboo is still used in developing countries. Just because it can and is used for large constructions, doesn't mean that it wouldn't be better to use steel scaffolding. Large C programs are like this:That's a bad analogy. Wooden scaffold is a bit iffy, but developed places, like Hong Kong, still use bamboo almost exclusively. In the hands of competent people its quick and cheap to install, and does the job well. The people working with it love it, as its so light and easy to handle. If you actually get the job done, and the scaffold removed before materials start to degrade, its fine. China banned bamboo in favour of steel, largely to divert attention for the kind of ham fisted, unskilled people who were doing the work, and how long many half completed structures remained like that with a scaffold in place until the materials degraded.
For example, C could easily "fix" right-shifting negative values for two's complement types (intN_t, int_fastN_t, int_leastN_t) by standardizing it the way all compilers that don't produce garbage do it (which is right shifting the storage bit pattern, duplicating the sign bit). This is the right approach, because it has been shown in practice to work –– C99, C23, Fortran 95, Fortran 2003 for example.
Analogies are always dangerous. People concentrate on the analogy rather than the original topic.
BASIC programs are a bit iffy, but developed places, like Hong Kong, still use BASIC almost exclusively. In the hands of competent people its quick and cheap to install, and does the job well. The people working with it love it, as its so quick and simple to use. If you actually get the job done, and the program does its job before maintenance start to degrade it, its fine.
