2341 lines
55 KiB
Plaintext
2341 lines
55 KiB
Plaintext
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Random Poetry and Other Losses
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
(C) Copyright 1978 by Guy L. Steele Jr. All rights reserved.
|
||
|
||
Any similarity of anything in this document to anything in the
|
||
real world, except for a satiric purpose, is purely coincidental.
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
BBN Superlisp
|
||
|
||
[to be sung to the tune of
|
||
Jesus Christ Superstar]
|
||
|
||
|
||
Every time I look at you I don't understand
|
||
Why you think "Do What I Mean" is so cool and grand;
|
||
You'd have managed better if you'd thought it through,
|
||
Why'd you pick such an awkward way your bugs to undo?
|
||
Your hairy feature will not be the last revolution,
|
||
It's clear "Mean What I Do" is the ultimate solution!
|
||
|
||
Don't you get me wrong,
|
||
Don't you get me wrong,
|
||
Don't you get me wrong, now,
|
||
Don't you get me wrong,
|
||
I only want to hack,
|
||
I only want to hack,
|
||
I only want to hack,
|
||
I only want to hack.
|
||
|
||
BBN! BBN! Some people think you're the living end!
|
||
BBN! BBN! Some people think you're the living end!
|
||
BBN! SuperLISP! Can "Do What I Mean" measure up to this?
|
||
BBN! SuperLISP! Can "Do What I Mean" measure up to this?
|
||
|
||
Tell us what you think about your friends at the top,
|
||
Who d'you think besides yourself's the pick of the crop?
|
||
Is LISP 1.5 where it's at? Is it where you are?
|
||
Does Stanford's LISP have features too or is that just PR?
|
||
Do you have the breakpoint scheme that MACLISP is known for,
|
||
Or is that just the kind of kludge the user's on his own for?
|
||
|
||
Don't you get me wrong,
|
||
Don't you get me wrong,
|
||
Don't you get me wrong, now,
|
||
Don't you get me wrong,
|
||
I only want to hack,
|
||
I only want to hack,
|
||
I only want to hack,
|
||
I only want to hack.
|
||
|
||
BBN! BBN! Some people think you're the living end!
|
||
BBN! BBN! Some people think you're the living end!
|
||
BBN! SuperLISP! Can "Do What I Mean" measure up to this?
|
||
BBN! SuperLISP! Can "Do What I Mean" measure up to this?
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Rice and Webber)
|
||
|
||
(C) Copyright 1973 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
The Great Quux page 1
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Both Ways, Now
|
||
|
||
[to be sung to the tune of
|
||
Both Sides, Now]
|
||
|
||
|
||
Decimal digits in a row,
|
||
Just set the dials and let 'er go.
|
||
The ENIAC was grossly slow --
|
||
I used to code that way,
|
||
But then this Fortran came along;
|
||
I danced and sang a happy song:
|
||
So natural -- what could go wrong?
|
||
I little knew, that day!
|
||
I've looked at Fortran both ways, now,
|
||
At II and IV, and still somehow,
|
||
It's rows of numbers I recall;
|
||
I really don't know Fortran at all.
|
||
|
||
Fortran IV is real good stuff,
|
||
But business hackers have it tough;
|
||
For them this Fortran's not enough --
|
||
Then Cobol saved the day!
|
||
But now I sing a sad refrain;
|
||
This Cobol loss is no one's gain,
|
||
And writing programs is a pain
|
||
(I get writer's cramp that way!)
|
||
I've looked at Cobol both ways, now,
|
||
I code in it, and still somehow,
|
||
It's FORMAT statements I recall;
|
||
I really don't know Cobol at all.
|
||
|
||
Cobol will for business do;
|
||
Accounts and payroll make it through
|
||
(And bills for zero dollars too --
|
||
I get them every day!)
|
||
But those who hack symbolic frobs
|
||
Cannot make do with Cobol jobs,
|
||
And now I sing through anguished sobs,
|
||
But Lisp is here to stay.
|
||
I've looked at Lisp code both ways, now,
|
||
At lambda forms, and still somehow,
|
||
It's Cobol statements I recall;
|
||
I really don't know Lisp at all.
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Joni Mitchell)
|
||
|
||
|
||
(C) Copyright 1974 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
The Great Quux page 3
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
A Time for DWIM
|
||
|
||
[to be sung to the tune of
|
||
A Time for Us
|
||
(theme song from Romeo and Juliet)]
|
||
|
||
|
||
A time for DWIM
|
||
There'll never be;
|
||
No clever code
|
||
This losing mode
|
||
Can UNDO for me.
|
||
|
||
This "golden hope"
|
||
(To be denied)
|
||
Could never
|
||
Correctly fix the bugs my programs hide.
|
||
|
||
A way for bugs
|
||
There'll never be
|
||
To fix with generality.
|
||
|
||
So to this DWIM
|
||
Let's say farewell;
|
||
The crocks therein
|
||
Prove it can't win
|
||
And ring its knell:
|
||
|
||
Do What I Mean
|
||
Is just a ruse --
|
||
It really
|
||
Means only: Fix How Teitelman doth Lose!
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Rota, Kusik, and Snyder)
|
||
|
||
(C) Copyright 1973 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 4
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
The Sound of FORTRAN
|
||
|
||
[to be sung to the tune of
|
||
The Sound of Music]
|
||
|
||
|
||
My programming day has come to an end, I know,
|
||
But one minor bug still restrains me, though,
|
||
So back to me desk I stumble,
|
||
More coffee I pour in my mug,
|
||
And I drink, and I think, and I program
|
||
Just one more hack, just one more hairy kludge
|
||
To remove that bug.
|
||
|
||
Machines are alive with the sound of FORTRAN,
|
||
With numbers they've crunched for a thousand hours;
|
||
They add and subtract to the sound of FORTRAN,
|
||
And raise fractions to unheard of powers.
|
||
|
||
My code's full of REAL statements, INTEGER and COMPLEX too,
|
||
duplicated thrice oe'r,
|
||
And so intermixed with the WRITEs and READs
|
||
to cause errors galore;
|
||
Arrays are declared of dimension six, but indexed minus two;
|
||
Computed GO TOs are last in the range of a DO!
|
||
|
||
I now recompile my corrected programs;
|
||
I know I will get what compiled before --
|
||
My code will be blessed with the sound of FORTRAN,
|
||
And I'll lose once more.
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Rodgers and Hammerstein)
|
||
|
||
(C) Copyright 1973 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 5
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
The HACTRN
|
||
|
||
|
||
Once before a console dreary, while I programmed, weak and weary,
|
||
Over many a curious program which did TECO's buffer fill, --
|
||
While I pondered, nearly sleeping, suddenly there came a feeping,
|
||
As of something gently beeping, beeping with my console's bell.
|
||
"'Tis my DDT," I muttered, "feeping on my console's bell:
|
||
Once it feeped, and now is still."
|
||
|
||
Ah, distinctly I remember that dark night in bleak December,
|
||
And each separate glowing symbol danced before me, bright and chill.
|
||
Eagerly I wished the morrow; vainly I had sought to borrow
|
||
From my HACTRN aid for sorrow -- sorrow for the bugs which fill --
|
||
For the strange unknown and nameless bugs which ever all my programs f
|
||
Bugs which now I searched for still.
|
||
|
||
And the coughing, whirring, gritty fan I heard inside my TTY
|
||
Made me with fantastic terrors never known before to thrill;
|
||
So that now, to still the beating of my heart I stood repeating,
|
||
"'Tis some interrupt entreating DDT to signal me --
|
||
Some strange interrupt entreating DDT to signal me --
|
||
Its importance surely nil."
|
||
|
||
Presently my soul grew stronger: hesitating then no longer
|
||
I decided that I would respond to this strange program's call;
|
||
TECO, which I then attended, to my soul more strength extended;
|
||
With ^Z I ascended, going to my DDT --
|
||
V I typed, and answered soon my DDT --
|
||
TECO there, and that was all!
|
||
|
||
Dumbly at my console peering, as I sat there, wondering, fearing,
|
||
Doubting now that any interrupt was ever there to call;
|
||
But the silence was unbroken, and my HACTRN gave no token,
|
||
And the only sound there spoken from my TTY's whirring fan --
|
||
The low and rough and distant sound came from my TTY's whirring fan --
|
||
TECO there, and that was all.
|
||
|
||
Back into my TECO going, with my pounding heart now slowing,
|
||
Soon again I heard a feeping, somewhat louder than before.
|
||
"Surely," said I, "surely this is some strange bug of RMS's
|
||
Which an interrupt professes, though I have no other job;
|
||
Let me then ask DDT if it thinks there's another job --
|
||
'Tis a bug, and nothing more!"
|
||
|
||
Again I went up to my HACTRN while cold shivers up my back ran
|
||
V I typed, my jobs now once more to display.
|
||
Only TECO was there listed; though my trembling heart resisted
|
||
Yet I willed my hand, insisted, J to quickly type --
|
||
To answer this bold query DDT did hesitantly type
|
||
A ghostly "FOOBARJ".
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 6
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
From V protected, now, this phantom job, selected
|
||
Gave no clue to why it had invoked that former beeping shrill.
|
||
"Though," I said, "you're no inferior, I shall act as your superior
|
||
And examine your interior, this strange matter to explore."
|
||
Then I typed a 0/ this matter further to explore --
|
||
Quoth the HACTRN, ":KILL".
|
||
|
||
Much I worried -- this outrageous bug might prove to be contagious,
|
||
Though thus far it had not seemed to do my TECO any ill:
|
||
For we cannot help concurring such a bug would cause a stirring,
|
||
Feeping on a console whirring, disappearing then from sight --
|
||
An evanescent mystery subjob disappearing then from sight
|
||
With no clue but ":KILL"!
|
||
|
||
But my HACTRN, swapping, running, gave no further sign of cunning
|
||
By this unknown phantom, which was in a thirty second sleep;
|
||
None of this I comprehended; to my TECO I descended,
|
||
And in terror I pretended that the bug had gone away --
|
||
I pretended that for good the mystery bug had gone away --
|
||
When my console gave a feep.
|
||
|
||
Now I quickly, hoping, praying, started up a PEEK displaying
|
||
All the the jobs and subjobs there which did the system fill:
|
||
What I found was quite unpleasant, for there was no FOOBAR present:
|
||
Only TECO was there present, underneath my DDT;
|
||
I quit the PEEK, and "FOOBARJ" typed out my DDT --
|
||
Then quoth the HACTRN, ":KILL".
|
||
|
||
But -- this FOOBAR now beguiling all my sad soul into smiling --
|
||
I tightly grinned, determined that this glitch should cause nobody ill
|
||
Now, into my armchair sinking, I betook myself to linking
|
||
Fancy unto fancy, thinking why this unknown phantom job --
|
||
Why this grim, ungainly, ghastly, gaunt, and unknown phantom job
|
||
Feeped and did a ":KILL".
|
||
|
||
This I sat engaged in guessing, but conceived no thought expressing
|
||
How a phantom job could sound those strange and ghostly beeps;
|
||
This and more I sat divining, with my head at ease reclining,
|
||
With the symbols coldly shining at me from the CRT,
|
||
With the bright, sharp symbols coldly shining on the CRT --
|
||
Which suddenly gave seven feeps!
|
||
|
||
Then methought the air grew denser, filled with clouds which grew immenser,
|
||
As when under darkened daylight thick and stormy weather brews;
|
||
With some bit of hesitation stemming from my trepidation
|
||
Again I typed that incantation finding out how much I'd lose --
|
||
V I typed again to find how much I'd lose --
|
||
TECO there, and seven FOOs!
|
||
|
||
"Job!" said I, "with ghostly manner! -- subjob still, if LISP or PLANNER!
|
||
Whether accident, or feeping as another hacker wills!
|
||
Tell me now why I am losing, why my HACTRN you're abusing,
|
||
Which no doubt is of your choosing: echo truly on my screen!"
|
||
Then DDT as if in answer echoed quickly on my screen,
|
||
Typing seven ":KILLs".
|
||
|
||
The Great Quux page 7
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
"Job!" said I, "with ghostly manner! -- subjob still, if LISP or PLANNER!
|
||
By the ITS above us which the DSKDMP doth fulfill,
|
||
I shall be the system's saviour: I shall mend your crude behaviour,
|
||
I shall halt your strange behaviour, and thee from the system lock!"
|
||
Madly, wildly laughing I made DDT invoke a LOCK,
|
||
And quickly typed thereat -- "5KILL"!
|
||
|
||
"Be this now our sign of parting, phantom job!" I shrieked, upstarting
|
||
As my HACTRN now informed me ITS was going down in 5:00.
|
||
"You have run your last instruction and performed your final function!
|
||
But, refuting this deduction HACTRN then my TTY grabbed --
|
||
To type out yet another message HACTRN now my TTY grabbed --
|
||
Quoth the HACTRN, "ITS REVIVED!"
|
||
|
||
And the FOOBAR, never sleeping, still is beeping, still is beeping
|
||
On the glaring console out from which I cannot even log!
|
||
And other happenings yet stranger indicate inherent danger
|
||
When bugs too easily derange or mung the programs of machines;
|
||
When programs too "intelligent" start taking over the machines:
|
||
Is this the end of AutoProg?
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Edgar Allan Poe)
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Notes for those not familar with the terms in this poem:
|
||
|
||
TTY ("titty") = any terminal, not necessarily a teletype (in this
|
||
case, a CRT); in particular, a terminal associated with and in
|
||
control of a job tree (see "DDT" below). The terminal may be
|
||
passed up and down the job tree; at any point in time only one
|
||
job in the tree may use the tree's TTY. When ^Z is typed on
|
||
the TTY, the system intervenes, stopping the job which has the
|
||
TTY, and interrupts that job''s superior in the tree, which
|
||
may then grab the TTY from the inferior job.
|
||
|
||
|
||
DDT ("dee dee tee") = HACTRN ("hack-tran") = top level debugging and
|
||
job controlling procedure, capable of controlling up to eight
|
||
simultaneous jobs (which may themselves be DDTs!) and
|
||
performing other miscellaneous functions. HACTRN specifically
|
||
denotes a DDT at the top of a job tree, while DDT is the more
|
||
general term. The two terms refer to the same job in the
|
||
poem, and are thus treated as synonymous. Note that DDT
|
||
requires its subjobs to have unique names for obvious reasons;
|
||
hence the concern over seven jobs all named FOO.
|
||
|
||
|
||
|
||
|
||
The Great Quux page 8
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
PEEK = a program similar to the SYSTAT of certain PDP-10 monitor
|
||
systems of dubious quality. PEEK is actually much more
|
||
versatile, giving information in any of some dozen modes, such
|
||
a job status, DECtape status, Arpanet sockets, terminal
|
||
status, and scheduler variables and statistics. It also has
|
||
provisions for maintaining a continuously updated display on a
|
||
CRT, and for line printer usage.
|
||
|
||
|
||
TECO ("teeko") = text editor and corrector (that is, the good version
|
||
of several versions of TECO which are floating around).
|
||
|
||
|
||
:KILL ("colon kill") = message typed out by DDT whenever it kills a
|
||
subjob. Note that subjobs, if running, may request DDT to
|
||
kill themselves. If the job does not have the TTY when it
|
||
makes such a request, DDT merely rings the TTY's bell (which
|
||
on the CRT in the poem above is a particularly obnoxious
|
||
flavor of "beep"), and prints nothing until you ascend to DDT,
|
||
and perhaps type J (see below).
|
||
|
||
|
||
LOCK = utility program, which interprets the particular command
|
||
"nKILL" to mean "please bring the time-sharing system down in
|
||
n minutes" (where it is required that n5). The system will
|
||
then go down at the prescribed time unless the request is
|
||
countermanded with a "REVIVE" request.
|
||
|
||
|
||
ITS = Incompatible Timesharing System, the good timesharing system for
|
||
the PDP-10.
|
||
|
||
|
||
DSKDMP ("disk dump") = program used to, among other things, bootstrap
|
||
ITS into a running state.
|
||
|
||
|
||
= "altmode"; read it as such to preserve the meter.
|
||
|
||
|
||
V = command to DDT, requesting it to print out the names of all its
|
||
subjobs.
|
||
|
||
|
||
J = command to DDT, asking that it select the job which has requested
|
||
attention so that it may be dealt with. DDT responds
|
||
"jobnameJ" so that you will know which job it was.
|
||
|
||
|
||
^Z ("control zee") = command to ITS to stop the job which currently
|
||
has the TTY, and interrupt the next higher job in the job
|
||
tree. Ordinarily this has the effect of returning to DDT.
|
||
|
||
|
||
|
||
|
||
The Great Quux page 9
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
0/ ("zero slash") = command to DDT, asking it to print out the
|
||
contents of location zero of the selected subjob. This
|
||
operation is theoretically transparent to the subjob itself.
|
||
|
||
RMS = Richard M. Stallman, who does an admirable job of keeping DDT,
|
||
as well as many other programs, relatively bug-free.
|
||
|
||
(C) Copyright 1973, 1974 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 10
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
A Collection of Nursery Rhymes and Other Random Losses
|
||
by The Great Quux, RMS, and Anonymous
|
||
|
||
|
||
A monitor system named DOS
|
||
Became superseded by OS.
|
||
It's not hard to guess
|
||
Why the consequent mess
|
||
Caused programmers all to scream "S.O.S."
|
||
|
||
-- TGQ May 1973
|
||
|
||
IBM had a PL/I,
|
||
Its syntax worse than JOSS;
|
||
And everywhere this language went,
|
||
It was a total loss.
|
||
|
||
-- TGQ June 1973
|
||
|
||
System/3! System/3!
|
||
See how it runs! See how it runs!
|
||
Its monitor loses so totally!
|
||
It runs all its programs in RPG!
|
||
It's made by our favorite monopoly!
|
||
System/3!
|
||
|
||
-- TGQ October 1973
|
||
|
||
RRR of x
|
||
always equals 1.
|
||
R is dimension, RR, rank.
|
||
APL is fun!
|
||
|
||
-- RMS December 1973
|
||
|
||
RRRboat
|
||
gentlystream
|
||
4 7R"merrily"
|
||
life
|
||
value error
|
||
life
|
||
)
|
||
|
||
-- Anon January 1974
|
||
|
||
Hey, diddle, diddle the overflow pdl
|
||
To get a little more stack;
|
||
If that's not enough then you lose it all
|
||
And have to pop all the way back.
|
||
|
||
-- TGQ January 1974
|
||
|
||
(C) Copyright 1974 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
The Great Quux page 11
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
It may surprise some people to know that the
|
||
PDP-10 instruction set, far from being innovative, was
|
||
developed strictly along classical lines. Many of the
|
||
operation codes, for example, come from the Latin. Two
|
||
fifth-declension nouns (declinable only in the
|
||
singular) are as follows:
|
||
|
||
Nominative: moves hrres
|
||
Genitive: movei hrrei
|
||
Dative: movei hrrei
|
||
Accusative: movem hrrem
|
||
Ablative: move hrre
|
||
|
||
|
||
There are, of course, also hlres, hrles, and
|
||
hlles. These all derive from the corresponding verbs
|
||
hrro, hrlo, etc. (second conjugation, semi-deponent.)
|
||
Thus when playing chess with MacHack one might say,
|
||
"movem hrro," that is, "I am hurrying a move."
|
||
|
||
Similarly, the code jffo ("i am jffing") comes
|
||
from a defective Latin verb dating from an era when
|
||
ancient computers marked time by periodically pushing
|
||
counters onto a wire. The number of empty spaces left
|
||
on the wire could easily be counted by an instruction
|
||
very like jffo, from which could be calculated the
|
||
number of "jiffies" (clock ticks; 1 jiffy = 40 seconds)
|
||
which had passed; hence the name.
|
||
|
||
Teutonic languages have also lent several words
|
||
to the PDP-10: rot ("red") derives from the pieces of
|
||
decayed redwood traditionally used as temporary markers
|
||
in older German manual shift registers; while ash was
|
||
commonly the result when an older German got disgusted
|
||
and threw his shift register in the fire.
|
||
|
||
|
||
--- The Great Quux
|
||
(with apologies to no one)
|
||
|
||
(C) Copyright 1973 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 12
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
PLIate's Dream
|
||
|
||
[to be sung to the tune of
|
||
Pilate's Dream
|
||
from Jesus Christ Superstar]
|
||
|
||
|
||
I dreamed I was a brand new language,
|
||
The ultimate in speed;
|
||
I handled strings as fast as RPG,
|
||
And twice as easily.
|
||
|
||
I crunched numbers like COBOL,
|
||
Trees like APL,
|
||
And FORTRAN loaned its FORMATs and GO TOs,
|
||
The cause of many screws.
|
||
|
||
And then a man said, "Now we'll write a monitor,
|
||
With Multics what it's for.
|
||
Our project is begun;
|
||
We'll code in PL/I."
|
||
|
||
Then I saw thousands of coders
|
||
Searching for their bugs,
|
||
And then I heard them mentioning my name
|
||
And leaving me the blame.
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Rice and Webber)
|
||
|
||
(C) Copyright 1973 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 13
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
As I was passing Project MAC,
|
||
I met a Quux with seven hacks.
|
||
Every hack had seven bugs;
|
||
Every bug had seven manifestations;
|
||
Every manifestation had seven symptoms.
|
||
Symptoms, manifestations, bugs, and hacks,
|
||
How many losses at Project MAC?
|
||
|
||
-- TGQ April 27, 1974
|
||
|
||
|
||
|
||
(c) Copyright 1974 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 14
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Reclaimer, spare that tree!
|
||
Take not a single bit!
|
||
It used to point to me,
|
||
Now I'm protecting it.
|
||
It was the reader's CONS
|
||
That made it, paired by dot;
|
||
Now, GC, for the nonce,
|
||
Thou shalt reclaim it not.
|
||
|
||
That old familiar tree,
|
||
Whose CDRs and whose CARs
|
||
Are spread, o'er memory --
|
||
And wouldst thou it unparse?
|
||
GC, cease and desist!
|
||
In it no freelist store;
|
||
Oh spare that moby list
|
||
Now pointing throughout core!
|
||
|
||
It was my parent tree
|
||
When it was circular;
|
||
It pointed then to me:
|
||
I was its CADADR.
|
||
My CDR was a list,
|
||
My CAR a dotted pair --
|
||
That tree will sore be missed
|
||
If it remains not there.
|
||
|
||
And now I to thee point,
|
||
A saving root, old friend!
|
||
Thou shalt remain disjoint
|
||
From freelists to the end.
|
||
Old tree! The sweep still brave!
|
||
And, GC, mark this well:
|
||
While I exist to save,
|
||
Thou shan't reclaim one cell.
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
George Pope Morris)
|
||
|
||
(C) Copyright 1973 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 15
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
I Could Have Tooled All Night
|
||
|
||
[to be sung to the tune of
|
||
I Could Have Danced All Night
|
||
from My Fair Lady]
|
||
|
||
|
||
Tool! Tool! I feel like such a fool!
|
||
All term I goofed off; I can't catch up now!
|
||
Sleep! Sleep! I've got to get some sleep!
|
||
Tooling wouldn't help me anyhow!
|
||
|
||
I could have tooled all night,
|
||
I could have tooled all night,
|
||
and still have tooled some more;
|
||
I could have been absurd,
|
||
Learned all my Latin verbs,
|
||
It wouldn't raise my score.
|
||
I can't remember all those theorems,
|
||
And all those facts from my mind flee --
|
||
I only know exams,
|
||
Are why one usually crams,
|
||
But tooling never could help me!
|
||
|
||
I could have tooled all night,
|
||
I could have tooled all night,
|
||
And memorized each book;
|
||
I only now regret,
|
||
My sections never met,
|
||
And lectures I forsook.
|
||
I cross my fingers now in terror,
|
||
I only hope some luck's with me --
|
||
But had I tooled or not,
|
||
I'd still be on the spot,
|
||
My goofing off deserves the E!
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Lerner and Loewe)
|
||
|
||
(C) Copyright 1974 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 16
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
I think that I shall never see
|
||
A matrix lovely as a tree.
|
||
Trees are fifty times as fun
|
||
As structures a la PL/I
|
||
(Which Dijkstra claims are too baroque).
|
||
And SNOBOL's strings just can't compare
|
||
With all the leaves a tree may bear.
|
||
And COMIT strings are just a joke.
|
||
Vectors, tuples too, are nice,
|
||
But haven't the impressive flair
|
||
Of trees to which a LISP is heir.
|
||
A LISPer's life is paradise!
|
||
|
||
Many people think that JOSS
|
||
And others, too, are strictly boss;
|
||
And there are many BASIC fans
|
||
Who think their favorite language spans
|
||
All that would a user please.
|
||
Compared to LISP they're all a loss,
|
||
For none of them gives all the ease
|
||
With which a LISP builds moby trees.
|
||
|
||
RPG is just a nurd
|
||
(As you no doubt have often heard);
|
||
The record layouts are absurd,
|
||
And numbers packed in decimal form
|
||
Will never fit a base-two word
|
||
Without a veritable storm
|
||
Of gross conversions fro and to
|
||
With them arithmetic to do.
|
||
And one must allocate the field
|
||
Correct arithmetic to yield,
|
||
And decimal places represent
|
||
Truncation loss to circumvent:
|
||
Thus RPG is second-rate.
|
||
In LISP one needn't allocate
|
||
(That boon alone is heaven-sent!)
|
||
The scheme is sheer simplicity:
|
||
A number's just another tree.
|
||
When numbers threaten overflow
|
||
LISP makes the number tree to grow,
|
||
Extending its significance
|
||
With classic treelike elegance.
|
||
A LISP can generate reports,
|
||
Create a file, do chains and sorts;
|
||
But one thing you will never see
|
||
Is moby trees in RPG.
|
||
|
||
One thing the average language lacks
|
||
Is programmed use of push-down stacks.
|
||
But LISP provides this feature free:
|
||
A stack - you guessed it - is a tree.
|
||
An empty stack is simply NIL.
|
||
In order, then, the stack to fill
|
||
|
||
|
||
The Great Quux page 17
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
A CONS will push things on the top;
|
||
To empty it, a CDR will
|
||
Behave exactly like a pop.
|
||
A simple CAR will get you back
|
||
The last thing you pushed on the stack;
|
||
An empty stack's detectable
|
||
By testing with the function NULL.
|
||
Thus even should a LISPer lose
|
||
With PROGs and GOs, RETURNs and DOs,
|
||
He need his mind not overtax
|
||
To implement recursive hacks:
|
||
He'll utilize this clever ruse
|
||
Of using trees as moby stacks.
|
||
Some claim this method is too slow
|
||
Because it uses CONS so much
|
||
And thus requires the GC touch;
|
||
It has one big advantage, though:
|
||
You needn't fear for overflow.
|
||
Since LISP allows its trees to grow,
|
||
Stacks can to any limits go.
|
||
|
||
COBOL input is a shame:
|
||
The implementors play a game
|
||
That no two versions are the same.
|
||
And rocky is the FORTRAN road
|
||
One's alpha input to decode:
|
||
The FORMAT statement is to blame,
|
||
But on the user falls the load.
|
||
And FOCAL input's just a farce;
|
||
But all LISP input comes pre-parsed!
|
||
(The input reader gets its fame
|
||
By getting storage for each node
|
||
From lists of free words scattered sparse.
|
||
It parses all the input strings
|
||
With aid of mystic mutterings;
|
||
From dots and strange parentheses,
|
||
From zeros, sevens, A's and Z's,
|
||
Constructs, with magic reckonings,
|
||
The pointers needed for its trees.
|
||
It builds the trees with complex code
|
||
With rubout processing bestowed;
|
||
When typing errors do forebode
|
||
The rubout makes recovery tame,
|
||
And losers then will oft exclaim
|
||
Their sanity to LISP is owed -
|
||
To help these losers is LISP's aim.)
|
||
|
||
The flow-control of APL
|
||
And OS data sets as well
|
||
Are best described as tortured hell.
|
||
For LISPers everything's a breeze;
|
||
They neatly output all their trees
|
||
With format-free parentheses
|
||
And see their program logic best
|
||
|
||
|
||
The Great Quux page 18
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
By how their lovely parens nest.
|
||
While others are by GOs possessed,
|
||
And WHILE-DO, CASE, and all the rest,
|
||
The LISPing hackers will prefer
|
||
With COND their programs to invest
|
||
And let their functions all recur
|
||
When searching trees in maddened quest.
|
||
|
||
Expanding records of fixed size
|
||
Will quickly programs paralyze.
|
||
Though ISAM claims to be so wise
|
||
In allocating overflow,
|
||
Its data handling is too slow
|
||
And finding it takes many tries.
|
||
But any fool can plainly see
|
||
Inherent flexibility
|
||
In data structured as a tree.
|
||
When all their efforts have gone sour
|
||
To swell fixed records, losers glower.
|
||
But list reclaimers hour by hour
|
||
By setting all the garbage free
|
||
Yield CONSequent capacity:
|
||
Thus trees indefinitely flower.
|
||
(And trees run on atomic power!)
|
||
|
||
To men of sensibility
|
||
The lesson here is plain to see:
|
||
Arrays are used by clods like me,
|
||
But only LISP can make a tree.
|
||
|
||
|
||
- The Great Quux
|
||
(with apologies to
|
||
Joyce Kilmer)
|
||
|
||
|
||
(C) Copyright 1973 Guy L. Steele Jr.
|
||
All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 19
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Alphabetical Order
|
||
|
||
|
||
MACLISP Ben PDP-6 (may its core increase!)
|
||
Awoke one jiffy from a deep dream of trees
|
||
And saw, by parsing out a TTY: .FILE. (DIR)
|
||
Scanning all the jobs, within the system here,
|
||
A PEEK, displaying on a CRT of gold;
|
||
A low USRTIM made the MACLISP bold:
|
||
And to the PEEK by CLI: a message sent,
|
||
"What displayest thou?" The message to it quickly went,
|
||
And the PEEK through CLA: a message did transduce,
|
||
And answer'd "The names of programs of practical use."
|
||
"And is mine one?" sent MACLISP. "Nay, not so,"
|
||
Replied the PEEK. MACLISP ran more slow
|
||
But swapping still. "I pray thee then," it sent,
|
||
"Display me as one that helps to systems implement."
|
||
The PEEK :KILLed and vanished. The next time
|
||
It ran again, in a display mode sublime,
|
||
It showed the names the Grim File Reaper had blessed,
|
||
And lo! MACLISP's name was thirty-seventh.
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Leigh Hunt)
|
||
|
||
(C) Copyright 1973 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 20
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Lambda Bound
|
||
|
||
[to be sung to the tune of
|
||
Homeward Bound]
|
||
|
||
|
||
I'm just a little value cell,
|
||
And I play my special role so well --
|
||
Hmmm --
|
||
Serving as a global switch
|
||
To predicate some system glitch;
|
||
But some strange value -- who knows which? --
|
||
Could cause me functions to bewitch!
|
||
Lambda bound!
|
||
I wish I was
|
||
Lambda bound!
|
||
Bound, so no SETQ's get me;
|
||
Bound, so quits will reset me;
|
||
Bound, where I can forget my
|
||
Top-level value.
|
||
|
||
It's hard to catch those system screws:
|
||
'Most any value causes me to lose --
|
||
Hmmm --
|
||
Each atom looks the same to me,
|
||
Whose interned name I cannot see,
|
||
And every NIL and every T
|
||
Reminds me that I long to be
|
||
Lambda bound!
|
||
I wish I was
|
||
Lambda bound!
|
||
Bound, so no SETQ's get me;
|
||
Bound, so quits will reset me;
|
||
Bound, where I can forget my
|
||
Top-level value.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 21
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Next time I'll have a MAR break set
|
||
And try to catch each clobber threat --
|
||
Hmmm, mmmm --
|
||
The next covert attempt to mung
|
||
Will cause the MAR break to be sprung,
|
||
But then the poor LISP will be hung
|
||
Because I'm not as I have sung:
|
||
Lambda bound!
|
||
I wish I was
|
||
Lambda bound!
|
||
Bound, so no SETQ's get me;
|
||
Bound, so quits will reset me;
|
||
Bound, where I can forget my
|
||
Top-level value.
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Paul Simon)
|
||
|
||
(C) Copyright 1974 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 22
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Song of the Certified Data Processor
|
||
|
||
[to be sung to the tune of
|
||
When I Was a Lad
|
||
from H.M.S. Pinafore]
|
||
|
||
|
||
When I was a lad I served a term
|
||
As office boy to a computing firm.
|
||
I polished the handle of the big front door
|
||
And swept up all the card chips from the keypunch floor.
|
||
He swept up all the card chips from the keypunch floor.
|
||
I swept that chad so carefullee
|
||
That now I am officially a CDP.
|
||
He swept that chad so carefullee
|
||
That now he is officially a CDP.
|
||
|
||
My office job was a heavy load,
|
||
So I went to night school and learned to code.
|
||
I was soon coding payroll in RPG
|
||
And compiled all my programs on a System/3.
|
||
He compiled all his programs on a System/3.
|
||
I compiled my code so gay and free
|
||
That now I am officially a CDP.
|
||
He compiled his code so gay and free
|
||
That now he is officially a CDP.
|
||
|
||
I wrote efficient code each day,
|
||
But I missed the benefits of higher pay.
|
||
I asked for a raise, but my boss said, "See,
|
||
Youse ain't good enuf because youse ain't a CDP."
|
||
"He ain't good enuf because he ain't a CDP."
|
||
So I vowed that someday I would see
|
||
Myself become officially a CDP.
|
||
So he vowed that someday he would see
|
||
Himself become officially a CDP.
|
||
|
||
For nineteen weeks I worked to cram
|
||
All the textbooks for the CDP exam.
|
||
Then I took the exam and was shocked to see
|
||
That the questions didn't seem to mean a thing to me.
|
||
All the questions didn't seem to mean a thing to him.
|
||
So I wrote down some answers randomly,
|
||
But I gave up all my hopes to be a CDP.
|
||
So he wrote down some answers randomly,
|
||
But he gave up all his hopes to be a CDP.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 23
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Well, those random answers worked out fine;
|
||
They scored my results at the top of the line.
|
||
Now I am a consultant here,
|
||
And I make at least a hundred thousand bucks each year.
|
||
And he makes at least a hundred thousand bucks each year.
|
||
But I only command such a salary
|
||
Because I am officially a CDP.
|
||
But he only commands such a salary
|
||
Because he is officially a CDP.
|
||
|
||
Now, office boys, whoever you may be,
|
||
If you want to rise to the top of the tree,
|
||
Just go and take the CDP exam,
|
||
And no matter what you answer they won't give a D--n!
|
||
And no matter what you answer they won't give a D--n!
|
||
Just answer it all as random as you please
|
||
And you will all officially be CDPs.
|
||
Just answer it all as random as you please
|
||
And you will all officially be CDPs.
|
||
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Gilbert and Sullivan)
|
||
|
||
(C) Copyright 1974 by Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 24
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
A pile of stuff written in April, 1976
|
||
|
||
|
||
April 1, 1976
|
||
|
||
|
||
[1] Notes taken in 6.015 (Signals and Systems)
|
||
|
||
On Matched Filters:
|
||
|
||
The ancients used potions, their love schemes to hatch;
|
||
They knew the right philtre encouraged a match.
|
||
When a lad made a wink at a comely young lass,
|
||
The philtre she used was designed for a pass.
|
||
The signals to use were determined by philtre;
|
||
The two peaked as one, for the lad could not jilt her.
|
||
The two thus entwined, so that noise did not bother
|
||
(Excepting that made by the groom's in-law mother...)
|
||
|
||
On Time Division Multiplexing:
|
||
|
||
To get the most use from your broadcasting medium:
|
||
Activity is, strangely, relieved by the TDM.
|
||
|
||
|
||
[2] Notes taken in 6.893 (Machine Perception and Manipulation)
|
||
|
||
|
||
"... and so the line connecting the points Ga and Gb in gradient
|
||
space, which correspond to the planes A and B in image space, is the
|
||
set of points representing positions of a plane see-sawing around the
|
||
line of intersection between A and B..."
|
||
|
||
Now I see; then I saw;
|
||
The planes of a cube have a linear law.
|
||
The endpoints of lines in the gradient space
|
||
Show where the see-sawing planes fall into place.
|
||
|
||
Macrakis, sitting beside me, half-asleep: "COFFEE!"
|
||
|
||
Caffeine doesn't help me composing this verse.
|
||
It only awakes me; my thoughts all disperse.
|
||
One thinks better dozing, collapsed in a heap;
|
||
Why else are most students in classes asleep?
|
||
|
||
"... the lines in gradient space are perpendicular to the lines in
|
||
image space. This doesn't provide enough constraints, however.
|
||
Additional equations may be derived from the intensity information.
|
||
One can get one or more solutions for a trihedral vertex. If the
|
||
vertex has more than three planes, then there are more constraints
|
||
than necessary, and one may have to resort to least squares..."
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 25
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Alone, the geometry isn't enough:
|
||
You also require intensity stuff.
|
||
We get enough data if points are tri-planed,
|
||
While four leave the gradients over-constrained.
|
||
|
||
|
||
[3] Some Higgledy-Piggledies
|
||
|
||
|
||
For those not familiar with this verse form: A Higgledy-Piggledy has
|
||
eight lines. All but the fourth and eighth lines are double dactyls,
|
||
while the fourth and eighth are a dactyl plus an upbeat. The first
|
||
line is nonsense; the second, a name; the sixth must be a single six-
|
||
syllable word; and the fourth and eighth must rhyme. It is
|
||
permissible for the first line to make sense, or for the fifth line
|
||
instead of the sixth to be all one word. If too many rules are bent,
|
||
the verse is just called a double-dactyl verse, rather than a
|
||
Higgledy-Piggledy.
|
||
[a] If you write (DO ((X NIL X) ...) ...) instead of the
|
||
usual (DO ((X NIL) ...) ...), i.e. you explicitly step
|
||
a variable by its own value, NCOMPLR (the MacLISP compiler)
|
||
may get confused, and in any case generates inessential code.
|
||
|
||
Higgledy piggledy,
|
||
Project MAC NCOMPLR
|
||
Still is committing its
|
||
DO-stepping sins:
|
||
Though it may seem somewhat
|
||
Counterintuitive,
|
||
FOO stepped by FOO screws; de-
|
||
Faulting it wins.
|
||
|
||
[b] You can't do EQ on numbers and hope to win. Recall also
|
||
the famous test in which NCOMPLR produced better numerical
|
||
code than the DEC FORTRAN compiler (Fateman 1973).
|
||
|
||
Quaxity quuxity,
|
||
MacLISP and NCOMPLR
|
||
Have a convention that
|
||
Makes losers freak:
|
||
Integers allocate
|
||
Hyperefficiently,
|
||
Bettering FORTRAN, but
|
||
Screwing up EQ.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 26
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
[c] As usual, taking a DWIM view of InterLISP.
|
||
|
||
Quaxity quuxity,
|
||
Teitelman's InterLISP
|
||
Has a DWIM feature that's
|
||
Really a screw;
|
||
MacLISP has evident
|
||
Superiority,
|
||
Letting its customer
|
||
Mean what he do.
|
||
|
||
|
||
April 2, 1976
|
||
|
||
Though NEWIO has been around for many months,
|
||
few people use it. I wonder why?
|
||
|
||
Quaxity quuxity,
|
||
TGQ's NEWIO
|
||
Has many functions that
|
||
No one can grok:
|
||
Documentation is
|
||
Incomprehensible;
|
||
GLS will explain it, but
|
||
Still it's a crock.
|
||
|
||
|
||
April 3, 1976
|
||
|
||
[a] NIL leads a double life in LISP.
|
||
|
||
Quaxity quuxity,
|
||
NIL the atomic one
|
||
Acts like a wavicle,
|
||
Seemingly twin:
|
||
Not just the inverse of
|
||
Verisimilitude;
|
||
Also the inverse of
|
||
Where lists begin.
|
||
|
||
[b] I am getting weary of bicentennial parading by industry.
|
||
"Bicentennial Minutes" now appear not only on television,
|
||
but on milk cartons and beer cans.
|
||
|
||
Quaxity quuxy, A-
|
||
Merican businessmen
|
||
Use bicentennial,
|
||
Profit to gain.
|
||
Hope by the time we reach
|
||
Quadricentennial
|
||
They'll not so plague me -- ad-
|
||
Vertisements pain!
|
||
|
||
|
||
|
||
|
||
The Great Quux page 27
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
[c] For SF fans: see Asimov's article on the "peace bomb"
|
||
(contained in his collection "Opus 100").
|
||
|
||
Quaxity quuxity,
|
||
Young Isaac Asimov
|
||
Strange thiotimoline's
|
||
Secret unfurled.
|
||
Cascaded series of
|
||
Endochronometers
|
||
Brought paradoxical
|
||
Floods on the world.
|
||
|
||
[d] More SF, this time in memory of James Blish:
|
||
|
||
Quaxity quuxity,
|
||
Blish used philosophy
|
||
When he was writing "The
|
||
Quincunx of Time."
|
||
Beeps of Dirac used to
|
||
Chronocommunicate
|
||
Fostered determinate
|
||
Free will sublime.
|
||
|
||
[e] DJL, computer science type undergraduate, has decided to
|
||
go to MIT grad school in Materials Science.
|
||
|
||
Quaxity quuxity,
|
||
David J. Littleboy
|
||
(MIT graduate)
|
||
Makes his plans plain.
|
||
Leaving the study of
|
||
Data-technology,
|
||
He prefers seeking ma-
|
||
Terial gain.
|
||
|
||
[f] I once read that space has three dimensions because orbits
|
||
aren't stable in 4-space.
|
||
|
||
I often have wondered in
|
||
What kind of orbit a
|
||
Planet proceeds in a
|
||
Tesseract space?
|
||
Multidimensional,
|
||
Hyperelliptical,
|
||
Dizzying spacemen in
|
||
Trans-solar chase.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 28
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
[g] Finally, let's hear it for quantum mechanics, who service
|
||
small automobiles for today's nuclear family.
|
||
|
||
Pauli and Heisenberg
|
||
Offer two rules for con-
|
||
Fused aristocracies,
|
||
Quantum domains:
|
||
"Egalitarian
|
||
Nonexclusivity
|
||
Must be forbidden"; "Un-
|
||
Certainty reigns."
|
||
|
||
|
||
April 4, 1976
|
||
|
||
[a] When in Canada, do as the Canadans do...
|
||
|
||
Quaxiti quuxiti, Quaxity quuxity,
|
||
Remus et Romulus Remus and Romulus,
|
||
Gemini fratres a Wolf-nourished brothers, were
|
||
Lupa aluntur. Twins, so they say.
|
||
Romulus inquit: non Romulus patiently
|
||
Aedificabitur Founded a city; as
|
||
Paucis diebus, sed He said, "Rome will not be
|
||
Roma nascetur. Built in a day."
|
||
|
||
[b] Apples grow on trees, but no trees in APLs.
|
||
|
||
Quaxity quuxity,
|
||
Kenneth E. Iverson
|
||
Made APL, matrix
|
||
Hackers to please,
|
||
Not only famous for
|
||
Arithmeticity;
|
||
Also for characters.
|
||
(Wish it had trees!)
|
||
|
||
[c] Sussman built a hacker for a Ph.D. thesis. When will someone
|
||
for a thesis build a hacker that builds a hacker?
|
||
|
||
Quaxity quuxity,
|
||
Gerald J. Sussman made
|
||
HACKER so famous for
|
||
Loopholes it plugs.
|
||
Armed with its knowledge of
|
||
Entomological
|
||
Manifestations, it
|
||
Ferrets out bugs.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 29
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
[d] It doesn't take truth to destroy a reputation, but only
|
||
a rumor. Yet sometimes the nastiest rumor is the truth.
|
||
Consider the one which says EQUIV causes true values (1-bits)
|
||
to complement bits of the other argument...
|
||
|
||
Quaxity quuxity,
|
||
XOR's more famous than
|
||
Brother EQUIV, though they've
|
||
Similar use.
|
||
Uncomplementary
|
||
Verisimilitude,
|
||
Rumor undoubtedly
|
||
Cooked EQUIV's goose.
|
||
|
||
[e] And why did Napoleon clutch his stomach? (Mail $1000 and a
|
||
self-addressed, stamped envelope, and we'll send you a jingle
|
||
in 25 words or less.)
|
||
|
||
Quaxity quuxy, Na-
|
||
Poleon Bonaparte
|
||
Conquered all Europe, but
|
||
What was the use?
|
||
Some say the problem was
|
||
Megalomania;
|
||
Others, he lacked modern
|
||
High-platform shoes.
|
||
|
||
[f] People got excited about BNF, and used it to drive parser
|
||
generators. But you still can't really tell how to write
|
||
programs in the language.
|
||
|
||
Quaxity quuxity,
|
||
Backus's BNF
|
||
Drives a preprocessor,
|
||
Generates code.
|
||
Parsing is specified
|
||
Metasyntactically;
|
||
Writing it's easy, but
|
||
reading, I'm snowed.
|
||
|
||
(c) Copyright 1976 by Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 30
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
My Favorite Hacks
|
||
[to be sung to the tune of
|
||
My Favorite Things
|
||
from The Sound of Music]
|
||
|
||
|
||
Circular MAPCAR and ANDCA'd negation,
|
||
Indirect JMP auto-incrementation,
|
||
Tangled spaghetti embroidered in stacks:
|
||
These are a few of my favorite hacks.
|
||
|
||
Mismatched DEFINE-TERMIN pairs with .QUOTEing,
|
||
Misbalanced brackets for macroed remoting,
|
||
PDP-6's with chess tourney plaques:
|
||
These are a few of my favorite hacks.
|
||
|
||
LAMBDAs as GO TOs and spooling on TPLs,
|
||
Flip-flops and bit drops and TRCE's in triples,
|
||
Crufty heuristics that prune minimax:
|
||
These are a few of my favorite hacks.
|
||
|
||
When the bugs strike,
|
||
When the disks crash,
|
||
When I read this verse,
|
||
I simply remember my favorite hacks
|
||
And then I feel even worse!
|
||
|
||
-- The Great Quux
|
||
(with apologies to
|
||
Rodgers and Hammerstein)
|
||
|
||
(c) Copyright 1976 by Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 31
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
NOTES
|
||
|
||
|
||
|
||
Circular MAPCAR
|
||
|
||
|
||
A constant or periodic series of arguments can be given to a
|
||
mapped function in LISP by supplying a circular list to MAPCAR. For
|
||
example:
|
||
|
||
((LAMBDA (C3)
|
||
(RPLACD C3 C3)
|
||
(MAPCAR 'CONS C3 THE-LIST))
|
||
(LIST 3))
|
||
|
||
conses a 3 onto every element of THE-LIST. Another way to use this
|
||
hack is to use MAP, which allows the mapped function to splice new
|
||
things into the circular list on the fly.
|
||
|
||
|
||
|
||
ANDCA'd negation
|
||
|
||
|
||
The sequence of PDP-10 instructions
|
||
|
||
MOVN A,NUMBER
|
||
ANDCA A,NUMBER
|
||
JUMPE A,FOO
|
||
|
||
|
||
jumps to FOO iff NUMBER is an exact power of two.
|
||
|
||
|
||
|
||
Indirect JMP auto-incrementation:
|
||
|
||
|
||
On the PDP-11, the instruction JMP @(R4)+ can be used as a
|
||
combined subroutine call and subroutine return, using the technique of
|
||
threaded code.
|
||
|
||
|
||
|
||
Tangled spaghetti
|
||
|
||
|
||
Spaghetti stacks, as described by Bobrow and Wegbreit.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 32
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
|
||
Mismatched DEFINE-TERMIN
|
||
|
||
|
||
Bizarre effects can be obtained in the MIDAS assembly language
|
||
for the PDP-10 by using .QUOTE to get in mismatched DEFINE-TERMIN
|
||
pairs. For example:
|
||
|
||
DEFINE DEFSYM X/
|
||
IRPS Z,,[X]
|
||
IFNDEF Z,X
|
||
.ELSE [
|
||
$$TEM1==Z
|
||
X
|
||
IFN Z-$$TEM1,.ERR Z MULTIPLY .QUOTE`.QUOTE/DEFINED/`
|
||
]
|
||
.ISTOP
|
||
TERMIN TERMIN
|
||
|
||
|
||
The multiple .QUOTEs allow used of the word DEFINED in the error
|
||
message.
|
||
|
||
|
||
|
||
Misbalanced brackets
|
||
|
||
|
||
A standard MIDAS hack for accumulating text in a macro to be
|
||
assembled at a remote location is:
|
||
|
||
;initialization:
|
||
DEFINE BNKBLK OP
|
||
OP
|
||
TERMIN ;BNKBLK accumulates text.
|
||
|
||
DEFINE BLCODE NEWCFT
|
||
BNKBLK [DEFINE BNKBLK OP
|
||
OP]NEWCFT
|
||
TERMIN
|
||
TERMIN ;BLCODE adds its arg to the end of BNK
|
||
|
||
;add some text:
|
||
BLCODE [FOO] ;add FOO.
|
||
BLCODE [BAR] ;add BAR (note BLCODE inserts CRLF's,
|
||
|
||
;assemble what has been accumulated:
|
||
BNKBLK ;which expands into ...
|
||
; FOO
|
||
; BAR
|
||
|
||
|
||
This hack depends on the misbalancing of the brackets in BLCODE with
|
||
respect to the DEFINE-TERMIN pairs.
|
||
|
||
|
||
The Great Quux page 33
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
PDP-6's
|
||
|
||
The MIT AI Lab PDP-6 has won chess trophies and plaques
|
||
running Greenblatt's MacHac program.
|
||
|
||
|
||
LAMBDAs as GO TOs
|
||
|
||
LAMBDA expressions of no arguments can be used to simulate
|
||
GO TO statements in a straightforward manner. (See LAMBDA: The
|
||
Ultimate Imperative, Gerald Jay Sussman and Guy L. Steele., M.I.T.
|
||
A.I. Lab Memo.)
|
||
|
||
|
||
Flip-flops and bit drops
|
||
|
||
If you don't know about these, forget it.
|
||
|
||
|
||
TRCE's in triples
|
||
|
||
The sequence of PDP-10 instructions:
|
||
|
||
TRCE A,42
|
||
TRCE A,42
|
||
TRCE A,42
|
||
|
||
exchanges the 40 bit and the 2 bit in accumulator A.
|
||
|
||
|
||
Crufty heuristics
|
||
|
||
The alpha-beta technique, the gamma heuristic (described by
|
||
Newborn in his book "Computer Chess"), and others, are used to prune
|
||
minimax game trees.
|
||
|
||
|
||
Notes (c) Copyright 1976 by Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 34
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
:PDUMP
|
||
|
||
|
||
99 blocks of crud on the disk,
|
||
99 blocks of crud!
|
||
You patch a bug, and dump it again:
|
||
100 blocks of crud on the disk!
|
||
|
||
100 blocks of crud on the disk,
|
||
100 blocks of crud!
|
||
You patch a bug, and dump it again:
|
||
101 blocks of crud on the disk!
|
||
|
||
(Repeat ad nauseam...)
|
||
|
||
|
||
-- The Great Quux 2 December 1976
|
||
|
||
|
||
(c) Copyright 1976 by Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 35
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
ZOOM Poems
|
||
|
||
|
||
|
||
This sequence of verses was written at a time when a party
|
||
game called "Zoom, Schwartz, Profigliano" had become popular around
|
||
the AI Lab (as a result of a trip to Talbot House in January, 1977).
|
||
For some reason Marilyn Matz didn't like the game, and her standard
|
||
response to "Zoom!" was "Bitch!". Most of these verses were jokes
|
||
sent to Marilyn and other interested parties. They all contain
|
||
acrostics.
|
||
|
||
|
||
Zebras slinking in the night
|
||
On twinkling hooves betray their flight.
|
||
Oh, would that tigers, burning bright
|
||
Might eat them, get them out of sight!
|
||
-- 13 May 1977 14:55
|
||
|
||
Zealous though a hacker be,
|
||
Obnoxious bugs cavort with glee.
|
||
One poor, defeated hacker shrugs:
|
||
May be no way to kill dem bugs!
|
||
-- 13 May 1977 16:47
|
||
Stupid the furor which AI detractors
|
||
Collectively raise over Weizenbaum's book.
|
||
Hackers will always, I think, remain hackers, and
|
||
Weizenbaum's slander has REAL hackers shook.
|
||
All the real hackers know hacking's a hobby;
|
||
Randoms are those whom computing consumes.
|
||
Terribly artful the well-hacked-up frobbie, but
|
||
Zany the work of thee fools Joe assumes!
|
||
-- 13 May 1977 17:00
|
||
|
||
[A lighthearted reference to the chapter on compulsive hacking in
|
||
Prof. Joseph Weizenbaum's interesting book "Computer Power and Human
|
||
reason".]
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 36
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Perhaps the best way to explain my position
|
||
Relies on the beauty of LISP.
|
||
Orthogonal issues, obscured by the syntax,
|
||
Frightfully kludgy (I say with derision),
|
||
Ignore, but usee parens, so crisp.
|
||
Green giants (I'm rooting for bagels, you see --
|
||
Lox, perhaps also, particularly)
|
||
I think, are the greatest of users.
|
||
A tiny compiler has no chance of winning;
|
||
No smarts, it's a bag-biter from the beginning,
|
||
One of the greatest of losers!
|
||
-- 13 May 1977 17:11
|
||
|
||
[There are some involved puns in this last one. Note particularly
|
||
that "green giant" is an inside term means an NCOMPLR (MacLISP
|
||
compiler) running interpretively, and also the pun on "green giant
|
||
rutabagas", a favorite phrase around the lab.]
|
||
|
||
[Sent to Marilyn:]
|
||
Before you complain,
|
||
I Humbly maintain
|
||
That poetry's loss is yet hackerdom's gain.
|
||
Clearly these verses are versus your pleasure; I
|
||
Hope you'll feel free to respond in full measure!
|
||
-- 13 May 1977 17:20
|
||
|
||
Tightly zipped her garish pantsuit,
|
||
Hurried on, electric, royal,
|
||
Eating of a rancid orangefruit,
|
||
Grasping Mars' own rapier foil
|
||
Runs Sabrina, young, inchoate,
|
||
Eager child, to stop Giganto.
|
||
Anger hers, now under loquat
|
||
Trees waits, silent, incognito.
|
||
Quiet, armed she now springs ambush;
|
||
Ugly runs the monstrous nebbish.
|
||
Ugly trash this awful onrush --
|
||
Xebecs, Zebras read no rubbish!
|
||
-- 13 May 1977 20:16
|
||
|
||
[Allow me to draw your attention to the initial letters of the first,
|
||
second, penultimate, and last words on each line; they form four
|
||
acrostics. The last two lines are a meta-comment on the verse
|
||
itself.]
|
||
|
||
(C) Copyright 1977 by Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 37
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Some Random Verses
|
||
|
||
|
||
|
||
|
||
There was in ITS an escape code (whose name was DQOT) used internally
|
||
in the character streams for terminal output which was undocumented
|
||
for some reason. A call went out for jingles in 25 words or less.
|
||
|
||
DQOT'S myster-
|
||
ious and very weir-
|
||
d; it quotes another char-
|
||
acter, as noted where?
|
||
-- 1 September 1977
|
||
|
||
|
||
Es schneit, es schneit
|
||
With all its might!
|
||
I say, der Schnee
|
||
has come today!
|
||
-- 5 December 1977
|
||
|
||
(C) Copyright 1977 by Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 38
|
||
Random Poetry and Other Losses printed April 17, 1979
|
||
|
||
|
||
Written in a Recitation (8.321 Quantum Mechanics I)
|
||
at MIT, 11:30 AM 30 September 1977
|
||
|
||
|
||
October Eve's
|
||
September morn
|
||
Is warm and dry
|
||
And I, forlorn:
|
||
Alone I sit
|
||
Amidst my friends
|
||
In heat of day
|
||
That never ends.
|
||
The heat I do not mind
|
||
So much;
|
||
It's countered by
|
||
The wind's soft touch --
|
||
The dryness, though,
|
||
Is more severe;
|
||
It parches throat,
|
||
And eye, and ear.
|
||
The heat is Nature's way
|
||
Of keeping
|
||
Man to frequent
|
||
Fall-asleeping;
|
||
But never desert wind
|
||
So dry
|
||
As chalkboard dust
|
||
(Square root of pi
|
||
Times sigma [i from
|
||
One to N]
|
||
Of alpha-eigenket,
|
||
And then...)
|
||
For when the sun
|
||
Beats down its worst
|
||
A little water
|
||
Quenches thirst.
|
||
But Man's devised
|
||
The dryest yet:
|
||
A dryness
|
||
Nothing real can wet,
|
||
For heat with weather
|
||
Correlates,
|
||
But dryness --
|
||
When we recitates!
|
||
|
||
-- The Great Quux
|
||
|
||
(c) 1977 Guy L. Steele Jr. All rights reserved.
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
The Great Quux page 39
|
||
|