From: ercm20@festival.ed.ac.uk (Sam Wilson)
Newsgroups: alt.folklore.computers
Subject: Re: That darn Bug story
Date: 28 Sep 92 17:49:52 GMT

dik@cwi.nl (Dik T. Winter) writes:
> In article <1992Sep25.200621.8837@news.columbia.edu> lasner@watsun.cc.columbia.edu (Charles Lasner) writes:
>   ...  But this was of
>   course on the CDC Cyber series that had an extremely fast and excellent
>   linking loader.  What other systems are there where you would keep your
>   binaries in unlinked relocatable form because you did not notice that
>   linking was also done in the load step (including linking against
>   libraries)? 

Edinburgh's EMAS (1972 - 1992, R.I.P.) did something like this.  All
references were indirect via a table built at load-and-run time.  This
made all code inherently sharable with no statically linked library
routines.  The loader didn't modify code it just searched libraries and
filled in entries in tables. 

EMAS also had a wonderful VM system - there was no paging or swapping
area because all file access was memory mapped (and all memory except
that for low level resident stuff was allocated file space).  The
combination of that and the first point meant that there was only ever
one copy of any program or library routine in memory at once unless
people did bizarre things to statically link code.  That of course made
it exceedingly efficient at using memory and providing a timesharing
service.  Unfortunately, since it was unique and not Unix it had to go. 
:-(

Oh, yes, and it was almost entirely written in a high level,
Algol-60-like language called IMP.  During its life it ran on IBM
360/370 type architecture (English Electric, later ICL 4/75, which was
really an RCA Spectra, I gather), ICL 2900 (completely different,
dedicated register machine) and back on IBM 370/3090 (Amdahl 470 and NAS
VL/80 which later became the HDS EX40, I think). 

Compared to all the languages I've seen discussed recently IMP seems to
suffer from the problems of almost none of them with the exception of
being a little verbose to type.  I could have dome with more, possibly
extensible data types (one of the things I really started to like in
Pascal until I discovered the hassles you had to go through to output,
say, the value of an enumerated type) - it had various integers and
reals, pointer types and records and proper strings.  The best thing
that I've never seen anywhere else was the 'string resolution operator'
- you could say

    fred -> joe.(".").bert

which if fred started out as "first.rest.last" would put "first" in joe
and "rest.last" in bert.  That looks slightly trivial but you could also
use it in loops and conditionals

    %while fred -> (" ").fred %cycle; %repeat

(note the null statement)

    %if fred -> junk1.("ERROR").junk2 %then %start
        printstring ("Whoops!)
    %finish %else %start
        printstring ("OK")
    %finish

which made for some really nice constructs.

And if anyone tries to start a flame war about the % signs or other 'but
I could do that better in C/assembler/Modula-2/PL/1' I will simply not reply.

> ... When I first did use Unix on a Vax (BSD on
> a 780) I was apalled at the slowness of the linking process.  And still am
> in fact. 

I get appalled at the size of binaries on Unix and all those duplicated
copies of printf that lie around clogging up disks and memory! EMAS had
shared libraries in 1972... 

Sam
Newsgroups: alt.folklore.computers