Elixir release

0.10.0

Change breakdown

Organization at a glance

Detailed changelog

Enhancement

30 changes

Tool: Elixir Module: ExUnit

Support trace: true option which gives detailed reporting on test runs

Tool: Elixir Module: HashDict

Optimize HashDict to store pairs in a cons cell reducing storage per key by half

Tool: Elixir Module: Kernel

Add pretty printing support for inspect

Tool: Elixir Module: Kernel

Add document algebra library used as the foundation for pretty printing

Tool: Elixir Module: Kernel

Add defrecordp/3 that enables specifying the first element of the tuple

Tool: Elixir Module: Kernel

Add the Set API and a hash based implementation via HashSet

Tool: Elixir Module: Kernel

Add Stream as composable, lazy-enumerables

Tool: Elixir Module: Mix

mix archive now includes the version of the generated archive

Tool: Elixir Module: Mix

Mix now requires explicit dependency overriding to be given with override: true

Tool: Elixir Module: Mix

Projects can now define an :elixir key to outline supported Elixir versions

Tool: Elixir Module: Typespec

Improve error messages to contain file, line and the typespec itself

Tool: Elixir Module: CLI

Elixir can now run on Unix directories with : in its path

Tool: Elixir Module: Kernel

match?/2 does not leak variables to outer scope

Tool: Elixir Module: Kernel

Keep head|tail format when splicing at the tail

Tool: Elixir Module: Kernel

Ensure variables defined in the module body are not passed to callbacks

Tool: Elixir Module: Mix

On dependencies conflict, show from where each source is coming from

Tool: Elixir Module: Mix

Empty projects no longer leave empty ebin files on mix compile

Tool: Elixir Module: Module

Calling Module.register_attribute/3 no longer automatically changes it to persisted or accumulated

Tool: Elixir Module: Enum

Receiving the index of iteration in Enum.map/2 and Enum.each/2 is deprecated in favor of Stream.with_index/1

Tool: Elixir Module: File

File.iterator/1 and File.biniterator/1 are deprecated in favor of IO.stream/1 and IO.binstream/1

Tool: Elixir Module: File

File.iterator!/2 and File.biniterator!/2 are deprecated in favor of File.stream!/2 and File.binstream!/2

Tool: Elixir Module: Kernel

Deprecate recently added quote binding: ... in favor of the clearer quote bind_quoted: ...

Tool: Elixir Module: Kernel

Deprecate Kernel.float/1 in favor of a explicit conversion

Tool: Elixir Module: Mix

Deprecate mix run EXPR in favor of mix run -e EXPR

Tool: Elixir Module: Record

Record.__index__/2 deprecated in favor of Record.__record__(:index, key)

Tool: Elixir Module: Kernel

The Binary.Inspect protocol has been renamed to Inspect

Tool: Elixir Module: Kernel

Tighten up the grammar rules regarding parentheses omission, previously the examples below would compile but now they raise an error message:

Tool: Elixir Module: Module

Calling Module.register_attribute/3 no longer automatically changes it to persisted or accumulated

Tool: Elixir Module: Record

First element of a record via defrecordp is now the defrecordp name and no longer the current atom

Tool: Elixir Module: URI

Remove custom URI parsers in favor of URI.default_port/2