small medium large xlarge

The latest version of the book is B3.0, released about 1 month ago. If you've bought a PDF of the book and would like to update it to this version (for free), visit your home page.

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

If you've found a new error, please submit it.

  • Typo
  • Tech. error
  • Suggestion
  • Maybe next edition
  • Not a problem
  • Reported in: B3.0 (09-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83880
PDF page: 9
> The Crystal standard library web server is itself very performant. In a recent test comparing web servers implemented in Node.js, Nim, Rust, and Sca...more...
  • Reported in: B3.0 (09-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83881
PDF page: 20
> You can see the variable types the compiler inferred—through type reflection—by testing with the typeof method. In Crystal docs typeof is called ...more...
  • Reported in: B3.0 (09-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83882
PDF page: 27

> You’ll use the index notation from arrays, where the key is now the index:

Maybe rephrase for clarity?--Vladislav Zarakovsky

  • Reported in: B3.0 (21-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83937
PDF page: 39
> Notice an important distinction between concurrent and parallel computing: > Concurrent means that a number of fibers are running in one thread, so...more...
  • Reported in: B3.0 (10-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83887
PDF page: 51

in listing curr_conv1.cr, in lines

while input = gets
❷ break unless input

the break seems redundant.--Dimagog

  • Reported in: B3.0 (08-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83872
PDF page: 129
> Try out and explain the following command to create a strong random password: crystal eval 'require "secure_random"; puts SecureRandom.hex(64)' ...more...
  • Reported in: B3.0 (08-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83873
PDF page: 143
> Next, you need to install the library and add it to the current project. Go to the root folder and do: $ crystal deps, or even shorter: $ shards. ...more...
  • Reported in: B3.0 (01-Dec-18)
  • Fixed: 14-Dec-18, awaiting book release
#84057
PDF page: 144
def to_csv "#{id},#{name},#{crystal_struct}" LOGGER.debug("to_csv method is called") end must be def to_csv LOGGER.debug("to_csv metho...more...
  • Reported in: B3.0 (08-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83874
PDF page: 147
> This proves our statement. However, if you consider memory efficiency, the inverse is true. This phrase looks weird me. I don't get the meaning. ...more...
  • Reported in: B3.0 (08-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83875
PDF page: 160
> For other external libraries, like for example the SDL library used in writing computer games, you need to use an attribute @[Link("")] that can pa...more...
  • Reported in: B3.0 (08-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83876
PDF page: 177
> You may want to add tools to deal with this. router_cr2 is a good minimal middleware for a Crystal web server, that currently outperforms3 all compe...more...
  • Reported in: B3.0 (08-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83877
PDF page: 191

> Crystal-clear42 implements Design by Contract using macros.

Seems misplaced under Deployment.--Vladislav Zarakovsky

  • Reported in: B3.0 (08-Nov-18)
  • Fixed: 14-Dec-18, awaiting book release
#83878
PDF page: 210
> When overflow occurs in integer calculations Ruby converts automatically from Fixnum to Bignum. Crystal on the other hand applies simple modular ari...more...
  • Reported in: B3.0 (03-Nov-18)
  • Fixed: 10-Nov-18, awaiting book release
#83853
PDF page: 217

Ruby "or" converts to Crystal "||" (probably got eaten by whatever you use to generate the book)

Simon St.Laurent says: We'll sort that out!