16 October 2014 P1.0 (Printing)

First printing.

31 August 2014 Pre1.0

  • Ready for Elixir 1.0. Minor code changes,
    all errata fixed, and changes to the text to
    make it flow better.

03 August 2014 B15.0

  • Updated for Elixir 0.15
  • Octal numbers are now written 0o123.
  • \ddd is no longer used for octal escapes in strings and sigils.
  • Described the new logger, and added some logging to the issues app.
  • Now that hex.pm has traction, I’ve updated the issues app
    descriptions to use it.
  • The issues app now uses HTTPoison rather than HTTPotion. (The latter
    has a NSFW license.)
  • Updated the supervisors chapter to show dynamic supervision.
  • Reworked the live code reloading a little.
  • Fixed errata.

15 July 2014 B14.3a

  • I jumped the gun with the previous release number. It was for Elixir 0.14.2. This release is for 0.14.3.
  • `mix.escriptize` is now `mix escript.build`
  • Options for bitfields are now separated by hyphens, rather than being comma separated in brackets.
  • If you have multiple heads for a function that also has default parameters, you must now list those defaults in an empty head preceding the normal definitions.
  • The parameter to `exit` has been codified, and I’ve changed code accordingly.
  • Functions can be used to make `get_in` and `get_and_update_in` more dynamic.
  • Fixed known errata.

01 July 2014 B14.3.14.3

  • Gave the Organizing A Project chapter some TLC.
    • Updated to the new mix and project conventions.
    • Switched back to using the cannonical httpotion.
    • Added a section illustrating the use of project configuration.
  • `Kernel.size` has been removed. Use `byte_size` and `tuple_size`.
  • Switched back to using the `myfreeweb` version of `httpotion` now that it
    works with 0.14.
  • Added back 4 exercises that got lost in a content refactoring a while back.
  • Fixed pending errata.

17 June 2014 B14.0.14.0

  • Documented nested structure accessors (`get_in`, `put_in` etc)
  • Described the ability to `@derive Access` for structs
  • Removed `defrecord`
  • Removed the ability to have heredocs where there was additional code
    on the line that introduced the string.
  • Fix pending errata.

27 May 2014 B13.3.13.3

  • Updated the OTP chapters to use the new built-in OTP support (was GenX).
  • Added a new chapter on Tasks and Agents.
  • IEx configuration now done using `IEx.configure`.
  • Fix pending errata.

21 April 2014 B13.0.13.0

  • Updated for Elixir 0.13. This is a big change, as it adds a new basic data type, the Map, and a new derived type, the struct. It also downplays records. Protocols are now defined on structs.
  • Reorganized the chapters on lists and enumerables:
    • ListDict is deprecated in favor of Map.
    • The various Dict implementations are now created using Enum.into, instead of calling new with a collection.
    • Updated for the new list comprehension syntax (for).
  • GenFSM is deprecated.
  • is_range and is_regex are now Range.range? and Regex.regex?.
  • Changed the Issues project to use jsx rather than Jsonex.
  • Pending errata fixed

07 February 2014 B12.0.12.3

  • Default parameter values are now denoted using `\\` and not `//`.
  • Sigils are now introduced using `~` and not `%`. In addition, the set
    of characters that can be used as delimiters has been reduced.
  • iex now reads from `.iex.exs` and not `.iex` on startup.

16 January 2014 B12.0.12.2

  • The `pid <- msg` notation is deprecated in favor of `send(pid, msg)`.
  • Rewrote the section on Protocols and Records to reflect changes in 0.12 and
  • `Enum.first` and the `raw` option to `inspect` are deprecated.
  • Fix errata (more big thanks to Bernard Kaiflin).

17 December 2013 B12.0.12.0

  • Skipped a beta number to get in step with Elixir numbering.
  • Moved to Elixir 0.12.0. This release of Elixir reimplements the
    internals of streaming, but the change should not affect you unless
    you’ve written your own streaming types.
  • Update the section on streams to document `Stream.unfold` and
  • Changes to some sample code: `Enum.chunks` is now `Enum.chunk`;
    `Enum.zip` now stops when the shortest source is exhausted.
  • Fixed errata (thank you Bernard Kaiflin for a stunning list of

14 November 2013 B10.0.11.2

  • Moved to Elixir 0.11.2
  • Update the OTP Application and the Type Specifications chapters to use the the _build directory tree (where Elixir now stores all build products)
  • Use ExUnit.CaptureIO in the Project chapter to test the table formatter.
  • Document the new escript_main_module option. In future, this will be required whenever mix escriptize is used.

07 November 2013 B9.0.11.0

  • Moved to Elixir 0.11.1
  • Fixed errata
  • Many changes to standard library. In particular, what were once binaries are now (largely) strings.
  • Changes to the defaults of a new project (the addition of a default supervisor and an application entry point). As a result, the supervisor chapter is changed slightly, and the start of the OTP Applications chapter is changed extensively.
  • Removed @only and @except annotations from protocols, and document @fallback_to_any.

02 October 2013 B8.0.10.3

  • Updated to Elixir 0.10.3
  • Moved the `concat` function from `List` to `Enum`.
  • Fixed known errata.

07 September 2013 B7.0.10.2

  • Updated to Elixir 0.10.2
  • Fix ExUnit output to show new interleaved failures
  • Update example in Project chapter to handle extra element in tuple returned by `OptionParser.parse`.
  • Update Enum examples to use `min_by` (rather than `min/2`)
  • Change `IO.stream(dev)` to `IO.stream(dev, :line)`
  • `to_binary` is now `to_chars`, and the `Binary.Chars` protocol is
    now `String.Chars`.
  • Update `import` documentation to remove first optional
    parameter. Now pass `:functions` or `:macros` to `only:`.
  • `list_to_binary` is now `String.from_char_list!`
  • `Enum.reduce` now has a two-parameter form that takes the first
    element of the collection as the initial accumulator.
  • Show examples of `Enum.chunks` and `Enum.is_even`.
  • Document `String.ljust` and `rjust`.
  • `function/3` has been removed, and is replaced by `Module.function\3`.
  • Errata fixes.

03 August 2013 B6.0.10.1

  • Change to use the new &… function capture syntax.
  • Added a short chapter on gen_fsm.
  • A few new library functions, including `String.reverse` and `Enum.shuffle`.
  • Fix errata

16 July 2013 B5.0.10.0

  • Covers Elixir 0.10.0
  • Split the description of `Enum` out of the Lists chapter, and added the new `Stream` module for lazy enumerations.
  • Added `Enum.reject` and `Enum.with_index`
  • `Binary.Inspect` is now `Inspect`, and uses algebra documents (impress your friends).
  • Code updates to reflect the new stricter syntax for parentheses on function calls.
  • Updated iex output to show new pretty-printed results.
  • Discuss the optimization on expressions such as `&1+&2` (now maps to `Kernel.+/2`).
  • Removed the List and Enum API descriptions, and substituted some examples of the API in use
  • Fixed errata
  • Initial set of “Your Turn” solutions now online. This covers roughly the first half of the book. The rest will be added over the coming weeks.

24 June 2013 B4.0.9.3

  • Tidied the FizzBuzz example and the table_formatter code in the Projects chapter
  • Talk about the new `binding:` option to `quote`
  • Can now set attribute types directly in `defrecord`
  • Covers Elixir 0.9.3
  • Sigils now dispatch to `sigil_x` (instead of `x`)
  • `Code.string_to_ast/1` and `Macro.to_binary/1` have been
    deprecated in favor of `Code.string_to_quoted/1` and

20 June 2013 B3.0

  • Fixed errata
  • Added information of how to specify modifiers on heredoc sigils
  • New section on implementing your own sigils
  • New section on umbrella projects
  • New appendix on type specifications and type checking
  • Covers Elixir 0.9.2
    • Added Enum.fetch and fetch!, removed Enum.at! and Enum.equal?
    • Added String.contains?

27 May 2013 B2.0

  • New chapters on Protocols, Macros, and Metaprogramming
  • Note new elixir-lang-talk mailing list
  • Covers Elixir 0.9 (previous version was 0.8). * This now requires Erlang
    R16 to be installed *
    Change of Elixir module naming from Elixir-Xxx to
    Elixir.Xxx * Add String.starts_with? and .ends_with? * IEx customization
    with IEx.Options ** Replacement of Enum.Iterator with Enumerator

20 May 2013 B1.0

Initial beta release.