Another question at the intersection of the Internet-History and TUHS
lists...
I was wondering about the early history of BIND. I started off wondering
about the relative ages of JEEVES (the original PDP10 DNS server) and
BIND. Judging by the dates on RFCs 881 - 883, the DARPA contract
commissioning BIND, and the Berkeley tech reports, it seems there wasn't
much time when the DNS was without BIND.
But I was struck by the resolver API set out on page 8 of Berkeley tech
report UCB/CSD-84-182: it looks nothing like the familiar API that ended
up in 4.3BSD.
https://www2.eecs.berkeley.edu/Pubs/TechRpts/1984/5957.htmlhttps://minnie.tuhs.org/cgi-bin/utree.pl?file=4.3BSD/usr/src/lib/libc/net/n…
So I'm wondering if there's anything out there recording the history
between the 1984 tech reports and the 4.3BSD release in 1986.
(It's also noteworthy that early BIND supported incremental DNS updates
and zone transfers, which didn't reappear in standard form until RFC 2136
(1997) and RFC 1995 (1996)...)
Tony.
--
f.anthony.n.finch <dot(a)dotat.at> http://dotat.at/
public services of the highest quality
Doug,
“In fact Dennis's compiler did not use AID instructions for that purpose.”
Whilst local variables are indeed accessed as an offset from the base pointer, I’m not sure that the above statement is correct. In the V6 compiler (-sp) was certainly used to push arguments to the stack, and when the register allocation overflowed, the interim results were pushed to the stack as well with (-sp).
See c10.c, the case CALL in rcexpr(), the function comarg() and sptab (which is right at the end of table.s)
Links:
https://www.tuhs.org/cgi-bin/utree.pl?file=V6/usr/source/c/c10.chttps://www.tuhs.org/cgi-bin/utree.pl?file=V6/usr/source/c/table.s
For interim result pushing/popping I refer to the FS and SS macro’s. Dennis discusses these in his “A tour of the C compiler” paper.
https://www.jslite.net/cgi-bin/9995/doc/tip/doc/old-ctour.pdf
Of course this is all implementational detail, not a core design aspect - as Richard Miller showed in his port to the Interdata architecture (including a port of the Ritchie C compiler). Maybe the sentence should have read: "In fact Dennis's compiler did not rely on having AID instructions for that purpose."
Paul
@Warren: at moments like these I really like having the line highlight feature that we discussed before Summer.
> From: John Cowan
> That's always true on the PDP-11 and Vax ... because the processor
> architecture (which has pre-increment and post-decrement instructions,
> but not their counterparts)
After Doug's message, I carefull re-read this, and I'm not sure it's correct?
The PDP-11 has pre-decrement and post-increment, not the other way around (as
above) - unless I'm misunderstanding what you meant by those terms?
That's why:
*p++ = 0;
turns (if p is in R2) into
CLR (R2)+
R2 is used, and then incremented after it has been used.
Noel
> That's always true on the PDP-11 and Vax, no matter what the OS,
> because the processor architecture (which has pre-increment and
> post-decrement instructions, but not their counterparts) makes
> anything but a downward-growing stack unmanageable.
I hadn't heard this urban legend before. A stack is certainly
manageable without auto-increment/decrement (AID) instructions. In
fact Dennis's compiler did not use AID instructions for that purpose.
AID instructions are nice for a LIFO stack, in which a stacked
item disappears as soon as it's used--as do intermediate
results in expression evaluation. But when the stack contains
local variables that are accessed multiple times, the accesses
are offset from the stack pointer. If AID instructions set the
pointer, then the offset of a particular local varies throughout
the code. The compiler can cope with that (I once wrote a
compiler that did so), but a debugger will have a devil of a
time doing a backtrace when the offset of the return address
in each stack frame depends on the location counter.
AID instructions are fine for sequentially accessing arrays, and
in principle Ken's ++ and -- operators can exploit them. Yet
idiomatic C typically wants post-increment and pre-decrement
instructions--the opposite of what DEC offered. Examples:
char a[N], b[N];
char *ap = a;
char *bp = b;
int i;
for(i=0; i<N; i++)
*ap++ = *bp++;
int a[N], b[N];
int i = N;
while(--i >= 0)
a[i] = b[i];
Doug
Hi,
I have a project to revive the C compiler from V7/V10.
I wanted to check if anyone here knows about the memory management in
the compiler (c0 only for now). I am trying to migrate the memory
management to malloc/free but I am struggling to understand exactly
how memory is being managed.
Thanks and Regards
Dibyendu
I am fairly sure the interdata port from Wollongong used the v6 c compiler, and this lived on in the “official” v7 port from perkin elmer, it still used the v6 compiler.
i remember the pain of the global namespace for structure members.
-Steve
> >> Even high-school employees could make lasting contributions. I am
> >> indebted to Steve for a technique he conceived during his first summer
> >> assignment: using macro definitions as if they were units of associative
> >> memory. This view of macros stimulated previously undreamed-of uses.
>
> > Can you give some examples of what this looked like?
>
See attached for an answer to Arnold's question
Doug
> Did the non-Unix people also pull pranks like the watertower?
One of my favorites was by John Kelly, a Texas original,
who refused the department-head perk of a rug so he
could stamp his cigarettes out on the vinyl floor.
John came from Visual and Acoustics Research, where
digital signal processing pressed the frontiers of
computing. Among his publications was the completely
synthetic recording of "Daisy, Daisy" released
circa 1963.
Kelly electrified the computer center with a
blockbuster prank a year or two before that. As
was typical of many machine rooms, a loudspeaker
hooked to the low-order bit of the accumulator
played gentle white noise in the background. The
noise would turn into a shriek when the computer
got into a tight loop, calling the operators to
put the program out of its misery.
Out of the blue one day, the loudspeaker called
for help more articulately: "Help, I'm caught in
a loop. Help, I'm caught in a loop. ..." it
intoned in a slow Texas drawl. News of the talking
computer spread instantly and folks croweded into
the machine room to marvel before the operators
freed the poor prisoner.
Doug
Dan Cross:
I'll confess I haven't looked _that_ closely, but I rather imagine that the
V10 compiler is a descendant of PCC rather than Dennis's V6/V7 PDP-11
compiler.
====
Correct. From 8/e to the end of official Research UNIX,
cc was pcc2 with a few research-specific hacks.
As Dan says, lcc was there too, but not used a lot.
I'm not sure which version of lcc it was; probably it
was already out-of-date.
In my private half-backed 10/e descendant system, which
runs only on MicroVAXes in my basement, cc is an lcc
descendant instead. I took the lcc on which the book
was based and re-ported it to the VAX to get an ISO-
compliant C compiler, and made small changes to libc
and /usr/include to afford ISO-C compliance there too.
The hardest but most-interesting part was optimizing.
lcc does a lot of optimization work by itself, and
initially I'd hoped to dispense with a separate c2
pass entirely, but that turns out not to be feasible
on machines like the VAX or the PDP-11: internally
lcc separates something like
c = *p++;
into two operations
c = *p;
p++;
and makes two distinct calls to the code generator.
To sew them back together from
cvtbl (p),c
incl p
to
cvtbl (p)+,c
requires external help; lcc just can't see that
what it thinks of as two distinct expressions
can be combined.
It's more than 15 years since I last looked at any
of this stuff, but I vaguely remember that lcc has
its own interesting (but ISO/POSIX-compatible)
memory-allocation setup. It allows several nested
contexts' worth of allocation, freeing an inner
context when there's no longer any need for it.
For example, once the compiler has finished with
a function and has no further need for its local
symbols, it frees the associated memory.
See the lcc book for details. Read the book anyway;
it's the one case I know of in which the authors
followed strict Literate Programming rules and made
a big success of it. Not only is the compiler well-
documented, but the result is a wonderful tour
through the construction and design decisions of a
large program that does real work.
Norman Wilson
Toronto ON