v0.11.0
Pre-release
Pre-release
Enhancements
- [Code] Eval now returns variables from other contexts
- [Dict] Document and enforce all dicts use the match operator (
===) when checking for keys - [Enum] Add
Enum.slice/2with a range - [Enum] Document and enforce
Enum.member?/2to use the match operator (===) - [IEx] Split
IEx.EvaluatorfromIEx.Serverto allow custom evaluators - [IEx] Add support for
IEx.prywhich halts a given process for inspection - [IO] Add specs and allow some IO APIs to receive any data that implements
String.Chars - [Kernel] Improve stacktraces on command line interfaces
- [Kernel] Sigils can now handle balanced tokens as in
%s(f(o)o) - [Kernel] Emit warnings when an alias is not used
- [Macro] Add
Macro.pipe/3andMacro.unpipe/1for building pipelines - [Mix] Allow umbrella children to share dependencies between them
- [Mix] Allow mix to be escriptize'd
- [Mix] Speed mix projects compilation by relying on more manifests information
- [Protocol] Protocols now provide
impl_for/1andimpl_for!/1functions which receive a structure and returns its respective implementation, otherwise returns nil or an error - [Set] Document and enforce all sets use the match operator (
===) when checking for keys - [String] Update to Unicode 6.3.0
- [String] Add
String.slice/2with a range
Bug fixes
- [Exception] Ensure
defexceptionfields can be set dynamically - [Kernel] Guarantee aliases hygiene is respected when the current module name is not known upfront
- [Kernel]
Kernel.access/2no longer flattens lists - [Mix] Ensure cyclic dependencies are properly handled
- [String] Implement the extended grapheme cluster algorithm for
Stringoperations
Deprecations
- [Kernel]
pid_to_list/1,list_to_pid/1,binary_to_atom/2,binary_to_existing_atom/2andatom_to_binary/2are deprecated in favor of their counterparts in the:erlangmodule - [Kernel]
insert_elem/3anddelete_elem/2are deprecated in favor ofTuple.insert_at/3andTuple.delete_at/2 - [Kernel] Use of
ininside matches (as inx in [1,2,3] -> x) is deprecated in favor of the guard syntax (x when x in [1,2,3]) - [Macro]
Macro.expand_all/2is deprecated - [Protocol]
@onlyand@exceptin protocols are now deprecated - [Protocol] Protocols no longer fallback to
Anyout of the box (this functionality needs to be explicitly enabled by setting@fallback_to_anyto true) - [String]
String.to_integer/1andString.to_float/1are deprecated in favor ofInteger.parse/1andFloat.parse/1
Backwards incompatible changes
- [CLI] Reading
.elixirrchas been dropped in favor of setting env vars - [Kernel]
Kernel.access/2now expects the second argument to be a compile time list - [Kernel]
fn -> endquoted expression is no longer wrapped in adokeyword - [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 asquote do: a. This has been fixed and the variables must be explicitly shared withvar!(a, __MODULE__) - [Mix] Umbrella apps now treat children apps as dependencies. This means all dependencies will be checked out in the umbrela
depsdirectory. On upgrade, child apps need to point to the umbrella project by settingdeps_path: "../../deps_path", lockfile: "../../mix.lock"in their project config - [Process]
Process.group_leader/2args have been reversed so the "subject" comes first - [Protocol] Protocol no longer dispatches to
Number, but toIntegerandFloat