From: mosquito@MIT.EDU Date: Wed, 17 Jun 92 02:56:18 EDT To: marc@MIT.EDU, barry@MIT.EDU Subject: book of marc In the beginning, marc declared a pointer. Now the pointer was NULL and (void *), and garbage was on the face of the memory, and marc had /dev/kmem in his emacs. And marc said, "Let a=1;" and a was 1; and marc saw the value, that it was an int. And the compiler complained that he was mixing pointers and integers, and marc flamed at it. And marc distinguished the 1 from the 1., and the 1 he called int, and the 1. he called a float. And it was evening, and it was morning, and then marc slept. Then marc said, "Let there be a division in the midst of the data, and let it separate the data from the data." And marc made the division, and divided the data which was below the division, and the data which was above the division: and it was so. And marc called the division an Abstraction Barrier. And it was evening, and it was morning, and then marc slept. And marc said, "Let the procedures under the abstraction barrier be gathered in one place, and let understandable code appear:" and it was so. And marc called the understandable code neat; and the rest he called cruft. And marc saw that it was good. And marc said, "Let the procedures return values, each after its own declared type": and it was so. And the procedures returned values, after its own declared type: and marc saw that it was good. And it was evening, and it was morning, and marc slept, and then it was afternoon, and marc stumbled out of bed. And marc said, "Let there be break points in the code to divide the procedures from one another, and let them be for signs in the debugger: and let them be for programmer sanity:" and it was so. And it was evening, and it was morning, and marc slept, and then it was afternoon, and it was evening, and marc got woken up. And marc said, "Let the programs spawn off child processes, after their type, and fill all available memory." And marc programmed them, and they spawned off child processes, after their type, and filled all available memory. And marc said, "What do you MEAN not enough memory?!" and marc used his homedir. And marc blessed them, saying, Be fruitful, multiplly divide, and do trigonometric operations. And it was evening, and it was morming, and marc slept, and then it was afternoon, and it was evening, and Chad kicked him and said, "Get up, marc." And marc rolled over and Chad kicked him again and said, "Get up, marc." And marc said, "I'm up, Chad." And Chad said, "Free sun" and marc logged in. And marc said, Let us build perl, in our image, after our likeness: it shall do everything and be not the right tool for it. And marc called it a kludge. But he called it a spiffy kludge and it was so. So marc built perl in his image, vax and rt he built them. And marc blessed them, and marc said to them, "Be fruitful, multiply, divide, pattern-match and format: behold, I give you all the system programs, and you shall have dominion over them. You shall re-implement them all in your language:" and it was so. And marc saw everything he had made, and behold, it was very good. And it was evening and it was morning, and marc slept, and no one could wake him up, so on the seventh day marc rested from all his work.