We try to keep our books accurate, but sometimes mistakes creep in. This page lists the errors submitted by our astute readers. If you've found a new error, please submit it.

The latest version of the book is B9.0, released 22 days ago. If you've bought a PDF of the book and would like to upgrade it to this version (for free), visit your home page.

Key: Typo Tech. Error Suggestion Not a problem Next edition

By default this page displays the errata for the latest version of the book. If you have a previous version, select it here:  

(To find out what version you have, look at the copyright page, a few pages in from the front of the book. If it says (say) 'Second Printing', then here it'll be P2.0. If there are interim PDF releases in that printing, they'll be 2.1, 2.2, and so on.)

PDF Paper Description Found in Fixed in
#52991: "In 1989 I started ..." A nod to Grace Hopper might not be out of place; she was pushing concurrency way before 1989. I'd also like to...more...
#76549: Could you put lock numbers on the hand-over-hand diagram? This might make the concept of lock over the next one more clear. Also, is there a r...more...
Paul Butcher says: Hmm - won't the lock numbers just be the index of the node in the list? Am I missing something? As for why didn't I start at the head node, I guess I didn't really think about it particularly carefully - I just started a couple of steps before the point where I was going to end up inserting the new node :-) How confusing did your reading group find this?
#76550: Should the "stop eating" code be removed from the think() method and put at the end of the eat() method? (Or be moved to its own method?). Cur...more...
Paul Butcher says: Whether it violates the SRP depends on how you think of the "stop eating" code. Each philosopher is a very simple state machine with two states. If you think of the code that you describe as "stop eating" as "start thinking", then the SRP holds :-) I'm slightly wary of moving this code into eat(), as that method then gets rather long. And I'm slightly wary of creating another method as it's already (thanks to Java's crazily verbose syntax) rather longer than I'd prefer. And f I move "stop eating" into its own method, I probably also need to move "start eating" into its own method, making things even more verbose...
#76551: Suggestion to add to the self-study: what would happen if there are multiple conditions in your code that signal out of order? (Trying to get ...more...
Paul Butcher says: I'm not 100% sure I understand what you're getting at here, David - could you elaborate?
#58803: “As is often the case with code running on the ​JVM​, we have to run more than once” You may want to use or mention the generally-approved ...more...
Paul Butcher says: Thanks. I'm a big fan of Criterium, but wanted to keep things simple for the reader here. I'll discuss this with Jackie (my editor) and see what she thinks. Thanks again.

#76686: (defprotocol CollReduce
(coll-reduce [coll f] [coll f init]))

should be

(defprotocol CollReduce
(coll-reduce [coll f] [coll init f]))--Siva