[racket] Aging code -- Algol 68

From: Matthias Felleisen (matthias at ccs.neu.edu)
Date: Thu Jul 11 11:54:35 EDT 2013

What is a type=theoretical program verifier? How does it related to modern things such as Coq/HOL/friends? 

On Jul 10, 2013, at 8:26 PM, Hendrik Boom wrote:

> How can I resist this request to talk about ancient code?  Even if it 
> seems off-topic?
> My own long-lived examples are a type-theoretical program verifier, 
> and an Algol 68 compiler.
> In 1972 I started an Algol 68 conpiler, worked on it for a few years at 
> the University of Alberta, decided to abandon the project when it went 
> over two and a half years (I had planned ono two) and my PDF expired, 
> went on to work at the Mathematical Centre in Amsterdam , where 
> against my better judgement I was persuaded to resue work on it.  The 
> facilities there were much worse than the ones I had had in Alberta.
> When that time came to a close I had a compier that handles about half 
> of a very demanding test suite.
> But that meant it was probably about 90% complete, but you really  
> needed closer to 99% to make the thing useful.
> I backed it up on magnetic tape, left one copy in a friend's sock 
> drawer and took teh other with me.
> Over the years the one I had got copied a few times, because 
> reel-to-reel 9-track tape drives were getting scarce.
> Unfortunately, one time that copy was not done correctly, although it 
> appeared to have been done correctly.
> Then a few years ago I found that someone on the other side of the 
> world had written an Algol W compiler (the language in which I had 
> written my compiler), and I tried to use it to resurrect my Algol 68 
> compiler.  When I discovered the bit rot I felt sick.
> But my friend in Amsterdm had contacts within IBM, and someone there 
> took it on as a personal project.  It turned out he was working on 
> long-term data archiving, and he thought it was just *great* that he 
> gos a 30-year-old magnetic tape to try to recover data from.  For all I 
> know that tape might have been mentioned in some archiving conference 
> proceedings.
> Anyway, I got the enntire compiler and a bunch of other data sent to me 
> in 8-bit EBCDIC code and proceeded to decode it.
> I ended up with the source code to the compiler.  It was really fun to 
> be looking through it again.
> Most of hte deficiencies I find looking at it are caused by
>  (1) It wasn't finished
>  (2) the limitations of Algol W.  Algol W was a pretty good tool for the 
> time, with garbage collection and data structures, but its limitations
> were severe.  No decent modern modules and separate compilation 
> mechanisms (although procedures could be separately compiled if they 
> didnt need any global variables) and limita on the size of procedures, 
> on the number of blocks in a compilation, and on the number of 
> different record types that could be used in a complete program (16 of 
> them).  There limitations rather warped the program from its  original 
> design.
>  I'd love to do the whole thing over, except that it might take a few 
> more years, and I don't think anyone would be interested in the 
> resultt.
>  Nevertheless, I go back to work on it every now and then in 
> one-or-two-month spurts of energy.  Doingg this is kind of like playing 
> a video game of extreme complexity.  Each new test case passed is line 
> beating a boss.
> A lot of code in the code generator got tossed or commented out, 
> because that class of machine just isn't around any more.  But I do 
> keep the old commented-out code around until I'm ready to ocmmit to the 
> new.
> If anyone is interested in looking at the code, it's available from 
> the monotone repository at http://mtn-host.prjek.net/.  The algol W 
> compiler in that repository has bugs; it's *not* the version I'm 
> using, and I'm currently wondering how it's related to the one I *am* 
> using.
> Every now and then I wake up in the middle of the night having 
> figured out once again how I should have approached the whole 
> project.
> They vary a lot in detail, but the common threads are:
> (1) I should have started with a simplified, significantly unoptimizing 
> code generator, then wrote test cases for it.
> (2) I should have also started implementing a sublanguage -- a  
> sublanguage that contained only the features I really needed for 
> writing the compiler.
> Actually, it wouldn't really have been a sublanguage -- it would have 
> had a subset of the semantics, but drastically simplified syntax, and 
> almost no implicit type conversions.  Kind of a compromise betwen a 
> programming language and a test generator for the code generator.
> (3) write the real compiler in the sublanguage, extending the 
> sublanguage whenever implementing a feature was faster than coding 
> around its absence.
> The history of the verifier is a tale for another day.
> -- hendrik
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 4373 bytes
Desc: not available
URL: <http://lists.racket-lang.org/users/archive/attachments/20130711/efaccf26/attachment.p7s>

Posted on the users mailing list.