Advanced Compiler Design and Implementation
Steven Muchnick
I bought this book to help with a compiler I'm writing for personal use. I've had introductory compiler courses, and I was looking for a text to expand my knowledge. I read this book from front to back and learned a lot. However, there were a lot of areas that didn't make sense on first reading. I figured they would become clearer after a re-read. They didn't. Each time I reach a point in my compiler development where I need additional explanation, I return to this book and find that what didn't make sense on a first read doesn't make much more sense the second time around. Or the third.
The problem with this book is that some parts are nearly indecipherable without prior knowledge. They are missing bits of detail that an advanced compiler designer might just "know", but without these details the rest is gibberish for the advanced beginner. For example, the section on iterated dominance frontiers didn't make sense after three readings. I finally pulled up the original paper on the subject, and all was clear. Muchnick had skipped a step in the algorithm.
Another example of missing detail is in the chapter on code generation. Muchnik uses the "=>" symbol without explaining its meaning. Without this detail, much of the section is meaningless. I pulled up a bunch of papers on the subject to try to find what I missed, and now it's clear.
Yet another example - Muchnick uses three kinds of intermediate language/representation (IR) - high-, medium-, and low-level IR. It's pretty obvious what's different between high- and medium-level IR, but his explanation of the difference between medium- and low-level IR is sorely lacking. More examples would have been helpful.
He uses his own programming language for describing the algorithms. This didn't bother me much after I understood the language. But his example code is a confusing mix of verbose and terse. His terse variable and function names make it difficult to grasp what the code is doing without already understanding the algorithm.
The good thing about this book is that it covers a lot of ground. It introduces most of the topics an advanced compiler designer needs to know. But to really grasp all the ideas in this book, you need access to a good computer science library. The bibliography is very good; you can learn a lot from reading the references. I signed up for the ACM Digital Library for just this purpose. If you're a student, you can get access to the ACM Digital Library for less than the price of this book - that's a real bargain.
My recommendation is to buy this book, and be prepared to do additional research to overcome its shortcomings.
Ссылка удалена правообладателем
----
The book removed at the request of the copyright holder.