Essentials of Programming Languages
eopl3.com
eopl3.com
I wonder how much of C that was just "that is how it happened to turn out".
E.g. C vs Lisp vs Smalltalk vs APL vs ML/Haskell vs COBOL vs FORTH vs PROLOG
Concrete example from personal experience:
All objects in Ruby have a unique ID. The standard implementation of Ruby added a function to go from the ID to the object. This was easy on the standard implementation of Ruby, because the ID is just the pointer, so you can just cast it. It's a nightmare on more sophisticated implementations of Ruby where an object may not have a single canonical address that you can use as an ID, and you need to store a huge separate mapping.
[0]: https://github.com/cksystemsteaching/selfie [1]: https://vimeopro.com/user12798068/university-of-salzburg-int...
I would be partial to any course that uses Appel's "Modern Compiler Implementation in ML", though that book is getting pretty old now.
https://dirkjan.ochtman.nl/writing/2012/07/21/compilers-on-c...
http://openclassroom.stanford.edu/MainFolder/DocumentPage.ph...
https://thorstenball.com/books/ seems like a good star, and if you don't know Go it shouldn't take too long to get acquainted with it.
#lang eopl
(require eopl1)It's a great exercise to implement[0] the languages from EOPL. I think it fits a lot better in a statically typed language like Haskell (the parsing can be done with parser combinators), since they essentially have to re-create ADTs with macros in Scheme, when they could be easily embedded into the host language. The effectful interpreters could have their effects encapsulated in a monad transformer stack.
Edit: Visiting MIT Press and searching finds this[1], and I also cannot find a single digital option for this book.
1 - https://mitpress.mit.edu/books/essentials-programming-langua...
What would you recommend for someone to start with regarding this particular book? (I haven't gone through the book yet.) Is there a technical reason why material was changed so drastically, or is it more along the lines of streamlining things for a university course? Are the things left out in the subsequent editions interesting but not useful or are they interesting and useful but not conducive to fitting into a one or two semester course sequence?
I don't think the first is 'better', but as examples of how it was more fun there's the compiler chapter and an OOP chapter with a small OO language organized around metaclasses instead of what I remember as a more tedious development of Java-style OO in a later edition. I'd still expect the latest edition has the most to learn from if you're picking just one.
This book has been waiting on me to go through it. It's on the list with finishing SICP and also PLAI.