Elixir release

0.11.0

Change breakdown

Organization at a glance

Detailed changelog

Enhancement

37 changes

Tool: Elixir Module: Code

Eval now returns variables from other contexts

Tool: Elixir Module: Dict

Document and enforce all dicts use the match operator (===) when checking for keys

Tool: Elixir Module: Enum

Add Enum.slice/2 with a range

Tool: Elixir Module: Enum

Document and enforce Enum.member?/2 to use the match operator (===)

Tool: Elixir Module: IEx

Split IEx.Evaluator from IEx.Server to allow custom evaluators

Tool: Elixir Module: IEx

Add support for IEx.pry which halts a given process for inspection

Tool: Elixir Module: IO

Add specs and allow some IO APIs to receive any data that implements String.Chars

Tool: Elixir Module: Kernel

Improve stacktraces on command line interfaces

Tool: Elixir Module: Kernel

Sigils can now handle balanced tokens as in %s(f(o)o)

Tool: Elixir Module: Kernel

Emit warnings when an alias is not used

Tool: Elixir Module: Macro

Add Macro.pipe/3 and Macro.unpipe/1 for building pipelines

Tool: Elixir Module: Mix

Allow umbrella children to share dependencies between them

Tool: Elixir Module: Mix

Allow mix to be escriptize'd

Tool: Elixir Module: Mix

Speed mix projects compilation by relying on more manifests information

Tool: Elixir Module: Protocol

Protocols now provide impl_for/1 and impl_for!/1 functions which receive a structure and returns its respective implementation, otherwise returns nil or an error

Tool: Elixir Module: Set

Document and enforce all sets use the match operator (===) when checking for keys

Tool: Elixir Module: String

Update to Unicode 6.3.0

Tool: Elixir Module: String

Add String.slice/2 with a range

Tool: Elixir Module: Exception

Ensure defexception fields can be set dynamically

Tool: Elixir Module: Kernel

Guarantee aliases hygiene is respected when the current module name is not known upfront

Tool: Elixir Module: Kernel

Kernel.access/2 no longer flattens lists

Tool: Elixir Module: Mix

Ensure cyclic dependencies are properly handled

Tool: Elixir Module: String

Implement the extended grapheme cluster algorithm for String operations

Tool: Elixir Module: Kernel

pid_to_list/1, list_to_pid/1, binary_to_atom/2, binary_to_existing_atom/2 and atom_to_binary/2 are deprecated in favor of their counterparts in the :erlang module

Tool: Elixir Module: Kernel

insert_elem/3 and delete_elem/2 are deprecated in favor of Tuple.insert_at/3 and Tuple.delete_at/2

Tool: Elixir Module: Kernel

Use of in inside matches (as in x in [1,2,3] -> x) is deprecated in favor of the guard syntax (x when x in [1,2,3])

Tool: Elixir Module: Macro

Macro.expand_all/2 is deprecated

Tool: Elixir Module: Protocol

@only and @except in protocols are now deprecated

Tool: Elixir Module: Protocol

Protocols no longer fallback to Any out of the box (this functionality needs to be explicitly enabled by setting @fallback_to_any to true)

Tool: Elixir Module: String

String.to_integer/1 and String.to_float/1 are deprecated in favor of Integer.parse/1 and Float.parse/1

Tool: Elixir Module: CLI

Reading .elixirrc has been dropped in favor of setting env vars

Tool: Elixir Module: Kernel

Kernel.access/2 now expects the second argument to be a compile time list

Tool: Elixir Module: Kernel

fn -> end quoted expression is no longer wrapped in a do keyword

Tool: Elixir Module: Kernel

Quoted variables from the same module must be explicitly shared. Previously, if a function returned quote do: a = 1, another function from the same module could access it as quote do: a. This has been fixed and the variables must be explicitly shared with var!(a, __MODULE__)

Tool: Elixir Module: Mix

Umbrella apps now treat children apps as dependencies. This means all dependencies will be checked out in the umbrela deps directory. On upgrade, child apps need to point to the umbrella project by setting deps_path: "../../deps_path", lockfile: "../../mix.lock" in their project config

Tool: Elixir Module: Process

Process.group_leader/2 args have been reversed so the "subject" comes first

Tool: Elixir Module: Protocol

Protocol no longer dispatches to Number, but to Integer and Float