Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Path: utzoo!mnetor!seismo!mcvax!guido From: guido@mcvax.uucp (Guido van Rossum) Newsgroups: comp.unix.wizards Subject: Re: brk's zero-fill behavior on VAXen (useful undefined checks) Message-ID: <7144@boring.mcvax.UUCP> Date: Thu, 13-Nov-86 16:19:40 EST Article-I.D.: boring.7144 Posted: Thu Nov 13 16:19:40 1986 Date-Received: Fri, 14-Nov-86 02:02:43 EST References: <7208@elsie.UUCP> <5142@brl-smoke.ARPA> <2447@hcr.UUCP> <363@yabbie.rmit.oz> <7315@utzoo.UUCP> Reply-To: guido@boring.uucp (Guido van Rossum) Organization: "Stamp Out BASIC" Committee, CWI, Amsterdam Lines: 23 Summary: more CDC trivia Apparently-To: rnews@mcvax In article <7315@utzoo.UUCP> henry@utzoo.UUCP (Henry Spencer) writes: >Yet another similar trick: in the Algol 68 implementation for the Cyber, >from CDC Netherlands I think it was, the garbage collector uses the extra ^Yes >bits in the pointers as mark bits, thereby using zero extra storage! Well, I wouldn't call using 60 bits for an 18-bit quantity (really 17, since user address spaces were limited to 2**17) "using zero extra storage". But I believe they did more than just using it for mark bits: pointers on the heap would have a special bit pattern in the top 12 bits which would make them an illegal and impossible floating point number, so that they could do a linear scan of the heap and find all references! (The FP unit would help in recognizing these words because it had an instruction for testing whether any particular value was OK to use.) This worked because there were no 'packed' structures, ints were supposed to be limited to 48 bits (as indeed they are on the Cyber if you want to do multiplies or divides), and the densest packing of characters had only 4 12-bit characters in a word. Guido van Rossum, CWI, Amsterdam In a different world, we would all be doing our systems programming in Algol-68 instead of C.