Disclaimer: Pardon my French :) I have bought "Virtual Machine Design and Implementation in C++" by Bill Blunden. This book has very positive reviews (see slashdot or amazon.com). It seems to impress people by the apparent width of covered topics. Most of it is off topic. The book gives to the moderately knowledgeable reader no insight about virtual machines or even about language compilation.
No architectural clues. Absolutely nothing about tight run loops, copy on write, compiling , optimizing code (SSA, tail calls, continuation passing style) or jitting code. The remarks about memory management are laughable. The book present a trivial VM and make no attempt to compare the features of existing VMs. The author has the chutzpah, pedantry or naiveté to compare himself to Knuth: "If I had money, I could offer an award like Don Knuth (pronounced Ka-Nooth)". But it is unclear that the book has been thru any reviewing or editorial process before publishing. I don't say there are obvious typos or so many factual errors. The book is just vain and vacuous. It is difficult to make a review because the book has about no substance concerning its stated subject: virtual machines. The author takes tangent after tangent and gives his opinion about almost anything concerning the computer industry, cramming irrelevant knowledge and speaking of all the "wars" he has waged. He usually states in one paragraph one can be said in one sentence. Most of code in the book has no interest whatsoever, like gigantic switches or declaration of symbolic constants. Visually disturbing notes are plain rants or state the obvious: "virtual machines are run-time systems, but not all run-time systems are virtual machines" (boy! I was thinking that was VMs all the way down). One note even propagates the old urban myth about TCP/IP: "[the DoD] was originally interested in designing a command and control network that could survive a nuclear war". In Chapter 1, "History and Goal", the author conveys the idea that coding on top of a virtual machine is a good protection about obsolescence of the real architectures. But the book will hardly convince you about the relevance of the presented VM according to this criteria because it apparently only runs on x86. The author states his goals about the VM he presents: 1/ portability 2/ simplicity 3/ Performance. Modulo order, these properties are true of any sensical software project. This does not give a clue about what is the purpose of the VM. He cites Java, so the purpose may be to run such a language. But after reading the book, I had no further clue. Chapter 2, 5 and 7 is about the presentation of his assembler. Don't ask me about the logic or the interest of the presentation. Almost nothing is specific about VM. So why bother to say more? Chapter 3 talks about a debugger. Chapter 6 is about virtual interrupts. The author seems to have used DOS as a model and is clearly limiting his discussion about x86. So much about portability. Chapter 8 called "advanced topics" explains the software industry progression toward increased abstractions going from binary to high level languages. There is a comparaison between Linux and Windows. Go figure. The anemic index is 6 pages and reflects the book, almost none of the entries are specific to VM. Each chapter is followed by a reference with a book list and an explanation of what they cover. Certainly better that the gratuitous show off list of academic papers. The choice of listed books is usually pretty good but often the comments show the cluelessness of the author. I enjoyed this one concerning the Tanenbaum book about OSes: "People don't often realize that it was Minix that led to the development of Linux. I don't think people give Andrew enough credit. His ideas on modularity are very contemporary". The back cover says "covers in detail features such as memory management, TCP/IP networking (...) everything expected from a commercial system. In fact the author decides that real garbage collection is too slow and too complex, does not even consider reference counting and decides to roll his own malloc. I don't know what TCP/IP has to do with VM... The book certainly does not fulfill the the back cover promises. It seems to me that the described VM is to VMs what a "hello world" is to real C programs. I did not bother to see the content of the bundled CD-ROM. -- stef