M. Edward (Ed) Borasky
6/9/2007 7:03:00 PM
Giles Bowkett wrote:
>> That is indeed cool. I remember when Jack Herrington's book on code
>> generation came out in 2003, also using Ruby for its examples --
>> definitely a nice way to raise Ruby awareness and demonstrate the
>> language's strengths.
>
> Can I just say that this is an absurdly under-rated book? Admittedly I
> skipped a lot of its parts, especially the Java stuff, which I think
> he only threw in because he had to, but it very much turned my brain
> sideways. My new theory, based on this book, is that Unix is Lisp with
> a compilation phase. Think about it - how many times have you written
> shell scripts to generate new shell scripts, or to generate new lists
> of shell commands? How many shell commands do you invoke with a list
> of files? Unix is all code generation and lists. It's Lisp in a
> different form.
>
> Anyway, long story short, "Code Generation in Action," awesome.
>
Hmmm ... well ... I came to Unix fairly late in its evolution, having
spent most of the previous time as an assembly language and FORTRAN
programmer and having used a range of operating systems dating back to
such primitive beasts as the IBM 7090 without disks to "modern" systems
like Xerox CP-V and VAX/VMS.
My first encounters with Unix were, coming from VAX/VMS, quite
unpleasant. The editors didn't make sense, the whole notion of shell
scripting rather than command files didn't seem useful, etc. I
essentially used FORTRAN as a scripting language.
What changed that was that the company I was working for, Floating Point
Systems, merged with another company, Celerity Computing, that was
making a Unix (4.3 BSD) product. Instantly I had colleagues who knew all
this fancy Unix stuff, could write C code as well as I could write
FORTRAN, etc. It was sink or swim so I learned to swim.
But I don't think Unix is as much about code generation and lists as it
is, at least initially, about text processing. The whole philosophy at
the time, before GUIs, etc., was that developers spent a lot of time
dealing with text files, whether they be code, numeric data, documents
or something else, so Unix should make that easy to automate.
IIRC spell checking was built into the very first versions of Unix, for
example. And I think the core idea of the Unix user interface is not
Lisp, lambda calculus, and AI so much as it is the notion of regular
expressions and the compiler-compiler. Again IIRC, lex and yacc were
also built into the first versions of Unix.
I guess I should get the book. ;)