🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: comp.std.c
Article #287

Sidebar on name-hiding (was Reserved names in ANSI C)

#287
From: David Collier-Brown
Date: Tue, 04 Jul 1989 13:17
56 lines
3084 bytes
In article <321@mountn.dec.com> minow@mountn.UUCP (Martin Minow) writes:
| I continue to have difficulty writing transportable programs when
| well-meaning implementors use useful words (such as "line" in one
| vendor's Macintosh C library).

jeffrey@algor2.UUCP (Jeffrey Kegler) writes:
| We have a number of worthwhile but conflicting goals involved here.
| 1) All libraries should use nice, easy to remember names.
| 2) No libraries should use any name any application programmer might
| want to use.  (Presumably this includes all the nice, easy to remember
| ones.)
| 3) No library should use a name another library is likely to use.
[...]
| The only real solution to this problem is something like the renaming
| facility that was allowed in ADA. 

  Actually the renaming scheme predates Ada (and Unix!).  It was based
on the theory that you needed two things to manage the namespace
explosion/pollution problem.
	1) a set of search rules or search lists for the linker
	   (easy now, not so easy in the V6 era!)
	2) a facility to "bind" names in linkable files.

  The latter is non-obvious (indeed the sufficiency of the scheme isn't
obvious at first encounter, either).  
  A "binder" is a program which takes a list of .o files and the
names that they should export, and creates a new .o from that.

  In the simple case, it produces exactly the same effect as "cat"ing
all the source files together and declaring all non-interface function
static.
  Or one can write an interface which effectively renames the
functions and bind that to the existing .o.
  It can even be used (twice) to insert a new, identically-named
function in to replace say, "fwrite", while calling the real fwrite
invisibly down in its guts.

   Why don't we have such a thing?  Well, they can be hard to write,
because you have to know the .o format like the back of your hand.
(I've written exactly one, and it depended on a bug in the linker I was
targeted to, so all I had to do was delete SYMDEF records (:-)).

| The renaming could be implemented as a utility that mungs object files
| (semi-portable), or as an input file to the loader (completely
| unportable) or via pragmas (completely unportable).  

   They're partially portable, as they depend on the .o format, not the
actual format of the machine code. As long as someone has ported the
compiler & linker, the stock binder can be recompiled with a few -DXYZZY's

--dave (just guess where they came from!) c-b
-- 
David Collier-Brown,  | davecb@yunexus, ...!yunexus!davecb or
72 Abitibi Ave.,      | {toronto area...}lethe!dave 
Willowdale, Ontario,  | Joyce C-B:
CANADA. 223-8968      |    He's so smart he's dumb.
Technical Details
Message-ID: <2533@yunexus.UUCP>
Path: arc1-ca.pugleaf.net!utzoo!yunexus!davecb
References: <321@mountn.dec.com> <461@algor2.UUCP>

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!yunexus!davecb
From: davecb@yunexus.UUCP (David Collier-Brown)
Newsgroups: comp.std.c
Subject: Sidebar on name-hiding (was Reserved names in ANSI C)
Message-ID: <2533@yunexus.UUCP>
Date: 4 Jul 89 13:17:10 GMT
Article-I.D.: yunexus.2533
References: <321@mountn.dec.com> <461@algor2.UUCP>
Organization: York U. Computing Services
Lines: 56