On Wed, 22 Aug 2018 11:29:40 -0400 Paul Winalski
<paul.winalski(a)gmail.com> wrote:
On 8/22/18, Perry E. Metzger
<perry(a)piermont.com> wrote:
To my knowledge, object file formats still don't have information
about type signatures, and linkers still don't care about types.
This is actually a problem. It would probably prevent a lot of
errors if those things changed.
For a linker to enforce (or warn about) type and call signature
matching, it would have to know the type and call semantics of each
particular language,
Not necessarily. One could produce a language-independent way of
signaling what the type signatures are (perhaps with normalized
language-dependent strings) and the linker could just check that they
match.
I've seen several languages (like OCaml) hack around the lack of this
by providing an auxiliary file for a pre-link phase to check off
of. It would be nicer if the linker could just handle that.
And, as I noted, this would doubtless prevent a _lot_ of bugs.
One could simply decorate the symbols with a
(language, semi-opaque "type string") pair, and the linker could just
verify that they matched without understanding semantics.
Not impossible, but a difficult and cumbersome
problem, particularly
as language and compiler implementation semantics vary over time.
As I noted, there are ways to get around that.
C++ and other strongly-typed languages typically hack
around the
problem using name decoration. Not elegant, but effective.
Name mangling for C++ is needed for another reason, too, which is that
a single "name" foo might be multiple different concrete functions
depending on what type it is invoked on.
Has anyone experimented with building Unix using C++,
to take
advantage of strong typing? My guess is no--it would be a Herculean
task likely to introduce more bugs than it would fix.
C++ doesn't have strong typing in the modern sense. It also has some
small incompatibilities with C's syntax and semantics, sufficient that
you can't just (say) compile the Linux kernel with a C++ compiler and
have it work.
Perry
--
Perry E. Metzger perry(a)piermont.com