The Implementation of Functional Programming Languages (1987)
research.microsoft.com
research.microsoft.com
Would be more a history lesson of what eventually led to Haskell. IIRC Miranda might be a more apt comparison.
[1] https://www.doc.ic.ac.uk/~wl/icprojects/papers/reduceron08.p...
So a bit over 3 degrees?
That is old story. He has managed to do great things inside Microsoft and since the departure of Balmer, my opinion about Microsoft is a lot more balanced. The association seems an anachronism.
When a CS book is relevant this long, I feel like these kind of ruminations put me in the right headspace to receive it.
Side-note: I was listening to an interview with an EE who drafted textbooks at (I want to say, though I might be wrong) UC Berkeley during the 70s. He mentioned the reason why his original first few editions had no diagrams was because getting access to the resource (they only had one resource on staff for the dept for this purpose) to assist in typesetting was so hard, you'd have months, sometimes years of wait-time. I wish I still had contact with the greybeards who were publishing then of my fathers generation to ask them what the procedure was when they would submit papers for publication and/or press.
Edit: https://www.academia.edu/13067316/T1_Historical_Timeline_of_... So presumably that NSFnet timeline (~1986) is when you had academics gaining access to static routed internet, ARIN giving out netblock allocations, etc. I'd imagine post-docs and grad students fighting over VAX/VMS time like modern day post-docs battle over NMR access these days.
Just FYI, I know I was glad to have it linked to me when I asked a similar question a few months ago.
I work with partial evaluation, where intermediate representations during compilation can get quite large, and have seen stack overflows in the compiler for real.
It would be nice if stacks were arbitrarily large anyway.
Note that if the language supports macros, you can't eliminate recursion from compile time; macro expanders can express recursion. (The same remark applies though: if user-defined macros blow a generous stack that is many megabytes long, oh well!)
Then add in very deep inlining.
And as I say I've seen it for real, in a real compiler, with a real program, while doing a real job. I could send the author an email and tell him his program is silly, but I'd rather be able to compile it.
Sometimes linear constructs can appear nested in the handling of the syntax.
You want to avoid right recursion in an LR parser for list-like constructs, especially if they can be reasonably expected to grow large. These constructs appear "flat" to the programmer, but the parser will push tokens onto the stack and not reduce anything until the end of the construct is reached.
I've seen output from compilers to JavaScript that convert huge switches into if cascades which are in fact quite deep: think tens to hundreds of thousands of cases converted to an if cascade.
Or put another way, not all programs are written by programmers.