[Clem and TUHS dropped from CC]
Hi Paul,
At 2023-06-12T19:04:31-0400, Paul Winalski wrote:
I don't think this remark was intended to
denigrate Fortran in any
way. I took it as a wryly humorous way to make the observation that C
and Fortran have different program startup semantics, and that there
is other stuff that has to be done when firing up a program written
wholly or partially in Fortran beyond what is needed to start up a C
application.
It was really just a fart joke--you know, "breaking wind" and all that.
libcrt0.s -> libfrt0.s ...
But you're getting at an actual problem I had when trying to learn
linking and loading on Unix beyond the level of recipes keyed in by
rote. (My upbringing was on systems with the most minimal conceivable
object file formats, and your runtime support was in either in ROM or
you provided it yourself.) Being of a certain age, 'crt0' (a name
preserved by the GNU C compiler) looked to me for all the world like it
must have had to do with driving a CRT. This made little sense to me,
especially when the darn thing got shoved into computation-only programs
that performed no I/O at all. I could find no documentation, nor at
that time any local experts who could tell me what the heck "crt" was
_for_. (The BSD advocates I knew back in the day suggested that this
was my fault for not locating and apprenticing myself to such a master;
the guild mentality was, and in some ways still is, powerful there.)
I am probably not the only person who was sent down an incorrect chain
of deductions by this "economical" naming convention; furthermore, one
employed for the sake of a file name that almost no one ever typed
anyway.
To bang an old drum of mine, while Unix culture pats itself on the back
for economizing keystrokes with an ad hoc compression scheme for every
name in sight, it too often overlooks what discarded in pursuit of this
form of minimality: clarity, lack of ambiguity, and ease of acquisition
by newcomers.
I get that Teletypes were hard to type on and baud rates were
punitively low. But when Bell Labs got the Blit, the limitations that
motivated the original terseness were not only not discarded, but
retained and doubled down on. "We're going multi-architecture for Plan
9, so let's allocate every machine architecture we'll ever be presented
with an identifier from a single-character alphanumeric namespace."
Madness.[1]
Decades after tcsh brought tab-completion to the shell-using masses, and
just as many decades after this feature was cloned by every Unix shell
that wasn't moribund, the defenders of keystroke minimality aren't
content to cultivate their own private name space of single-letter shell
functions, scripts, or aliases--instead they rebut the above by
complaining that GNU-style architecture triples are way too long. Way
too long for what? To type out in full? Sure. Too long to tell you
what ABI the objects produced are going to use? No.
At least APL chose sigils that were tough to confuse with other things.
Most operating system ABIs, Unix included, don't
have a formalized
mechanism for dealing with the differences between startup semantics
of various programming languages. They deal with the problem in an
ad-hack fashion. The one exception that I know of is VMS (now
OpenVMS). Tom Hastings was the architect who designed the original
VAX/VMS ABI. He was aware from the get-go that several programming
languages had to be supported and he made sure that his design was
general enough to allow programmers to write routines in the most
suitable language for them, to mix and match modules written in
different languages in the same program, and to easily make calls from
one language to another. It was a stroke of genius and I haven't seen
its like in any other OS (several times I've wished it was there,
though).
Thanks for mentioning this. I think you had pointed this out some
months ago, but I had difficulty remembering the details of "who had
solved the ABI problem the right way a long time ago", but could not
remember enough of it to dredge it up even with repeated searches.
Unfortunately Google remains stymied even by the quite explicit terms
"tom hastings" vax vms abi
...do you have a link to a white paper I could read?
I have an ecosystem in mind that might be receptive to the concept.
Regards,
Branden
[1]
NAME
0c, 1c, 2c, 5c, 6c, 7c, 8c, kc, qc, vc - C compilers
[...]
DESCRIPTION
These commands compile the named C files into object files for the
corresponding architecture. If there are multiple C files, the
compilers will attempt to keep $NPROC compilations running con
currently. Associated with each compiler is a string objtype, for
example
0c spim little-endian MIPS 3000 family
1c 68000 Motorola MC68000
2c 68020 Motorola MC68020
5c arm little-endian ARM
6c amd64 AMD64 and compatibles (e.g., Intel EM64T)
7c alpha Digital Alpha APX
8c 386 Intel i386, i486, Pentium, etc.
kc sparc Sun SPARC
qc power Power PC
vc mips big-endian MIPS 3000 family