<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>
Date   : Mon, 14 Jan 1985 02:32:00 EST
From   : "John C. Klensin" <Klensin@MIT-MULTICS.ARPA>
Subject: Re: an old idea whose time has come

Let me add two things to this discussion, which may or may not be
helpful:

The *equat feature of the 1130 linker also appeared in an early version
of the OS/360 "linkage editor", with the keyword CHANGE (If I recall)
and a slightly different syntax.  This feature has been carried forward
into subsequent versions of the related operating systems, so it was not
an idea that appeared and disappeared because almost no one found it
interesting.  Note, however, that as soon as one generalizes the
characters that can appear in some places and not in others, that the
linker (or whatever) needs special syntax, like quoting characters, to
delimit strings that might otherwise not be acceptable to it [either].

Although sharing some sympathy for the linker plan, I see it more as a
useful mechanism for patching things up at the last possible moment than
as a good solution.  A better solution involves seeing it as just
another case of binding the semantics of a name in a program (e.g.,
something that obeys the C (or whatever) naming rules to that name,
where the "external" form, whether longer or of a different case or
symbol structure, is just part of the semantics.  A near variation of
the problem that illustrates the point appears when you think, not of
"how to get a $ into a name", but about inter-language procedure calls
(or external (global) variable references of other sorts) where two or
more statically compiled languages have different rules about the naming
of such variables.

ANSI X3J1 (PL/I) had a long series of discussions on this one a year or
two ago in the context of languages that supported case sensitivity in
identifiers and operating systems that did not, languages that didn't
and operatings systems that did, and languages that had "everything goes
to upper" mapping rules and those that preserved case sensitivity.  The
conclusion was that, while it was probably a good idea to have some
name-changing and mapping linker facilities also (whatever that might
mean in a host independent way), it should be possible, for a number of
reasons, to make these bindings at compile time also.  Unless the
committee changes its mind (very unlikely, but I am obligated to say
things like that), the next version of the PL/I standard will go out for
public comment with an optional extension to the syntax for external
names, in the form of
    EXTERNAL (...)
 s.t., in a particularly bizzare case, you might write
    dcl sub1 external("avery_long$name_with_all_sorts#@%^&of NONSENSEinIT");
 what goes between the parens is, clearly, an implementation-dependent
and otherwise unrestricted character string.  It can even be a character
variable, as long as its value is known at transation time.

  It is also pretty easy to implement, even if only by preparing, and
passing along, a few instructions to the linker as part of the
translator's output.

  Note also that this type of approach permits either name (or, if the
capability is otherwise available, both names) to be made available in
the symbol table, since the translator has all the information available
when the symbol table is constructed.
<< Previous Message Main Index Next Message >>
<< Previous Message in Thread This Month Next Message in Thread >>