Pascal

I came to know Pascal in college after I had learned how to write a compiler. I read the source for Wirth's self-hosted CDC 6000 compiler early on and was struck by its simplicity and expert use of language features to express a full-featured software tool.

Purdue's home-brew operating system was enough different from Wirth's that the post-mortem variable dumps wouldn't print. I fixed that. I especially liked that only live variables would print, there wouldn't be many, and they would be formatted based on available type information.

Pascal's quirky type checking made it hard to pass around an array of strings but easy to construct a tree of characters. I became good a wielding such structures.

Pascal at that time allocated sequentially from a single free space and could dangerously reset the free space pointer. This worked amazingly well when synchronized with hierarchically organized dynamic behavior such as that of the compiler itself.

I wrote a translator for an integrated circuit description language with scope rules (inconveniently) inspired by Pascal. The CAD group at Tektronix was having trouble writing a yacc grammar for the language. I was asked to consult. I fixed the grammar and wrote a runtime in C that modeled the same use of trees that had become my norm in Pascal. The translation inverted the relationship of nodes to elements which meant the whole structured description had to be memory resident. I defined a struct that was essentially a cons cell and ran the whole translation without freeing any dynamic allocation.

My first home computer with a disk drive ran the UCSD p-code implementation of Pascal. I developed a style of coding with deeply nested definitions such that all function bodies would show cleanly on the machine's 24 x 80 character display. I wrote a grading calculator/database for my wife who was teaching undergraduate computer science at the time.