17 ms·
Introduction to Compilers and Language Design (2021)
- deleted 4y ago[deleted]
- isaacfrond 4y agoGreat initiative. More professors should do this; write your own material suitable to teach a course, and make it freely available. What I also like is that if you find errata, you have a place to send them, with a reasonable expectation that they will be picked up in a new version.
- dunefox 4y agoA shame that it uses C though, imo, instead of being language agnostic.
- episode0x01 4y agoI mean isn't C ubiquitous enough that it is essentially language agnostic? Or is your suggestion that is should be purely pseudocode?
- dunefox 4y agoWith C you need to pay attention to things like manual memory management which aren't necessary with other languages or to understand the material.
- programmer_dude 4y agoManual memory management is optional. IIRC some version of the D compiler was written assuming an infinite virtual address space (basically they just did not bother calling free() ever)!
- melony 4y agoIs that why D is so prevalent among (some) quant shops?
- duped 4y agoThere's a chapter in the book dedicated to memory layout of programs that discusses program segments, paging, implementation of malloc/free, etc that is more or less required before getting to the assembler and codegen stages. Even if you can write a compiler assuming infinite memory that generates programs that also assume it, it would be a disservice to readers to ignore that for brevity. It's an important part of understanding how programs are created.
- s_dev 4y agoAye but these lads are building a compiler. Probably shouldn't hide things like 'memory management' at the introduction stage as use of memory is inherent to all computing and programming.
- dunefox 4y agoSure, that makes sense, but you can write a compiler in languages that don't require it themselves. That's what I meant.
- arinlen 4y ago> Sure, that makes sense, but you can write a compiler in languages that don't require it themselves. I don't follow your rationale. With C the developer manages heap memory by basically calling malloc and free. This means that once you have the memory model set, all you need to do to roll your compiler is to implement the interface. A language that "don't require it themselves" is a language which provides only high level constructs and dumps all the memory management logic to the compiler/runtime, from object allocation/deallocation to lifetime management. How is that simpler to pull off by a compiler writer?
- Koshkin 4y agoThe target language generally has nothing to do with the language of the compiler, where automatic memory management is just as useful (and also helps to minimize the amount of unrelated technical detail) as anywhere else.
- programmer_dude 4y agoPseudocode can be easy to understand but you (also) need a real language to cement your understanding of the subject.
- dunefox 4y ago> you (also) need a real language to cement your understanding of the subject. That's why I'd like to use a language that I already know instead of learning a new one while also learning new material.
- programmer_dude 4y agoBasic C is not that hard. Probably one of the easiest languages to get into.
- Koshkin 4y agoSure, but it’s a hard language to write good code in.
- d_tr 4y agoWell you can. If you understand the algorithm you can write it in any language you know. Additionally, C is at basic level just loops, conditionals and function calls so it will be easy to translate from it if you need to. And then there are other books using other languages out there and people can choose.
- Koshkin 4y agoIt is also manual memory management, lack of generics, of polymorphism, and what not else. Even C++ would be a better choice.
- Koshkin 4y agoYes. Pseudocode is better for teaching than C. Plus, translating pseudocode into a language of choice is a good exercise. Another good idea is to write a compiler in the target language.
- lelanthran 4y ago> A shame that it uses C though, imo, instead of being language agnostic. What did you have in mind?
- dunefox 4y agoHonestly, I think I'd prefer pseudocode that I can read to understand the idea and then work in my language of choice rather than C.
- ethanwillis 4y agoPsuedocode means ambiguity which means misunderstandings. As soon as you remove all ambiguity any Pseudocode just becomes a language.
- dunefox 4y agoGood point, although I think it should be doable when describing input and output well enough.
- setr 4y agoThat's been delegated to the diagrams and algebra -- and there's also the usual english-psuedocode interspersed throughout the chapters (presumably more so on the theoretical chapters e.g. chapter 4)
- arinlen 4y ago> Honestly, I think I'd prefer pseudocode that I can read to understand the idea and then work in my language of choice rather than C. What stops you from understanding the idea by reading C? It's a tried-and-true language whose K&R version fits entirely in an easy to read ~180pg book which has real world applications, unlike pseudocode.
- Koshkin 4y agoC code is usually rife with unrelated technical detail like manual memory management. It also lacks ways to build useful abstractions that exist in other languages.
- metalloid 4y agoIn the introduction (1.4. What language should I use?) - the author explains why he used C. Please read it.
- chrisseaton 4y agoI think C is basically language agnostic, isn't it? Approximately everyone working at the level of a course on compilers knows C.
- dunefox 4y agoI don't know C and have no intention of learning it, so I'd prefer pseudocode that I can read without already knowing C or investing time into learning C just for this book.
- chrisseaton 4y agoI really struggle how someone can be ready to learn about compilers without already having enough context where they know C. If you know enough to be doing compilers, you can pick up C in 15 mins.
- dunefox 4y agoI don't know how this is difficult to imagine. I have no need for C and am interested in interpreters and compilers.
- chrisseaton 4y ago> have no need for C and am interested in interpreters and compilers But you do have a need for it, because it’s the lingua franca of conversations about compilers and interpreters… as you’ve just found out with this course. Like saying you want to work in the Vatican but you have no need for Latin.
- dunefox 4y ago> because it’s the lingua franca of conversations about compilers and interpreters There are many materials, compilers, and interpreters that use ocaml and haskell, for example. C isn't the only one. That's why I'd prefer pseudo code instead of C, so that I could use this book without learning a specific language only for it.
- globuous 4y agoAgreed! I would have used ML faminly languages. Of course, that implies learning ML before reading the book whereas C is definitely known by more developers as it’s been in all of our courses
- dunefox 4y agoSure, then it would be the same thing just with ML (which I pers. would prefer to C, but yeah). Pseudocode to explain the idea would be ideal, then you can work through the book in a familiar language. C is fine, it's just not ideal for me to learn C which I have no use for and learn a new skill at the same time.
- capitalsigma 4y agoML-like pseudocode would be much different from C-like or python-like pseudocode (e.g. heavy use of ADTs)
- deleted 4y ago[deleted]
- dake1 4y ago
- ki_ 4y agowhen clicking the link, first though was "introduction to web-design" ^_^ looks interesting though. Thanks.
- ketralnis 4y agoI couldn't disagree more. Everything about this site is perfect. Sorry it doesn't use enough frameworks or wizbang scroll-hijacking flyovers or email-harvesting popups, but it conveys everything I want to know quickly and efficiently and distraction-free. In recent memory this is the fastest I've found a "download PDF" button. By far.
- EricE 4y ago>In recent memory this is the fastest I've found a "download PDF" button. By far. That leapt out at me too. Pretty sad it's so rare that it stood out so starkly to both of us.
- IIAOPSW 4y agoYou know how if you walked into a mechanics shop and it looked like an Apple store something would be amiss. If the mechanic were any good the shop should be covered in grease, adorned with the sort of decor that you wouldn't care about getting covered in grease, and staffed by the sort of people that aren't averse to getting covered in grease. It should be awash in the unintentional indicators of a working class establishment, very much the opposite of a conventionally "well designed" store. A mechanic shop that looks like an Apple store suggests an establishment is trying to sell you on style rather than substance. The indicator of quality for a mechanic shop is an aesthetic that is the opposite of quality. Same thing applies to certain types of website. A CS professor and textbook author that has the time / interest to make their website "well designed" isn't covered in grease. The 90s DIY HTML adds to the credibility.
- dismantlethesun 4y agoThe front end of all mechanics shops I have been in for the past decade look just like the waiting room of a doctors office. In reality, mechanics do book keeping, track inventory, take order, organize excel files, and ask customers to sign contracts just like any other business. Thus their front ends look just like any other. > A CS professor and textbook author that has the time / interest to make their website "well designed" isn't covered in grease. They could just drop it in a well designed template. Also the idea that aesthetics and engineering cannot be conjoined is disproved in both Ferraris and 3D graphic programming.
- deleted 4y ago[deleted]
- deleted 4y ago[deleted]
- deleted 4y ago[deleted]
- nhatcher 4y agoOh wow! Great resource. I think it strikes the right balance between lexing/parsing vs code generation/optimization. I see that not even in modern books things like PEG parser or Pratt parsing make the cut. Which is a pity IMHO. As an aside I am yet to find a great book/resource of garbage collectors that I can understand. It is such a fascinating subject! If you want to dive into compiler/interpreters but do not want to go straight into the computer science of it I wholeheartedly recommend: https://compilerbook.com https://compilerbook.com and https://interpreterbook.com https://interpreterbook.com And, of course, the incomparable book by Robert Nystrom "Crafting Interpreters"" https://craftinginterpreters.com/ https://craftinginterpreters.com/
- nils-m-holm 4y agoIf you like books that are light on theory, I might add: Practical Compiler Construction (http://t3x.org/reload/index.html http://t3x.org/reload/index.html) Write your own Compiler (http://t3x.org/t3x/book.html http://t3x.org/t3x/book.html) Both written by me.
- ModernMech 4y agoI’ll be bookmarking this for use in the future. I teach a programming languages course so I’ve looked at a number of these texts, and this seems like a good new one but I have to say I don’t see much that differentiates it from other recent texts out there. It seems well written and organized, but what’s new? I would say the best part about this book is the author made it freely available. But if I had to choose a newish compilers book I’d choose Crafting Interpreters, which is also available for free. One thing that I don’t like so much is the word “design” in the title, as there’s really not much content in the book on how to design a language; most of it is devoted to implementing an already designed language. I’m not sure anyone who learns from this book would be able to design a language unlike C.
- duped 4y agoI just read through a couple of the chapters, imho the sections on codegen/assembly/memory layout are very useful. CI doesn't get into that, and it's necessary for modern language implementations from scratch (it seems everything is a JIT these days)
- emoII 4y agoOut of curiosty, could anyone explain to me the reason they think programming languages and the parts that combine into making them work are interesting? I feel like I have an interest in it, but I'm having a hard time figuring out _why_ I find it so appealing. I know the why doesn't matter as long as I enjoy it, but I'm curious what others think.
- aphyt 4y agoI like to know "why" things work even when I can mostly get away with knowing "how" they work.
- musicale 4y agoPersonally I find it kind of exciting to be able to design and build a microprocessor and a compiler for it, magically turning logic gates and silicon (or your preferred implementation tech) into a usable system. It's also nice to be able to understand a system from the device physics level up to the user interface (and maybe beyond into networked/distributed as well as sociotechnical systems.)
- skybrian 4y agoMaybe it’s the illusion of power that comes from rethinking fundamentals? (In practice, it’s often a path to obscurity.)
- carapace 4y agoFor me, part of it is a simple fondness for understanding things and a separate but closely related joy in making things that "go", things that act "on their own" as it were. I always kind of assumed it was an innate propensity, a kind of natural monkey curiosity. I was always taking things apart as a little kid. They say I disassembled the clothes dryer one time, but I don't remember it. I like it when something goes from being mysterious magic to a familiar tool. (Like compilers.) And it's even more fun when you can use your tools and knowledge to create some new useful or beautiful (or both) thing with them.
- setr 4y ago