v1.2.0
Official announcement: https://elixir-lang.org/blog/2016/01/03/elixir-v1-2-0-released/
1. Enhancements
Elixir
- [Application] Add
spec/1
andspec/2
to retrieve application specification - [Application] Add
get_application/1
to retrieve the application a given module belongs to - [Base] Optimize encode and decode operations about 10 times
- [Enum] Use the faster and auto-seeding
:rand
instead of:random
inEnum.shuffle/1
andEnum.random/1
andEnum.take_random/2
- [Enum] Add
Enum.with_index/2
- [GenServer] Add
GenServer.stop/1
for shutting down servers reliably - [IO] Add
color
related functions toIO.ANSI
- [Kernel] Support multiple aliases in
alias
,import
,require
anduse
. For example,alias MyApp.{Foo, Bar, Baz}
- [Kernel] Add
struct!/2
. Similar tostruct/2
but raises on invalid keys - [Kernel] Warn if
@doc/@typedoc/@moduledoc
attributes are redefined - [Kernel] Warn if non-variables are used in
defdelegate/2
(as they have no effect) - [Kernel] Mark quoted expressions as generated, avoiding false positives on dialyzer
- [Kernel] Allow variables as map keys on creation
%{key => value}
and on matches%{^key => value}
- [Kernel] Allow the pin operator
^
infn
clauses and on the left side of<-
infor
comprehensions - [Kernel] Introduce
with
as a special form that allows matching on right side parameters - [Kernel] Warn when right hand side of
->
does not provide any expression - [Kernel] Warn if the Elixir was compiled with a different endianness than the one currently available at runtime
- [Kernel] Warn if a variable is used after being defined exclusively in a nested context
- [Kernel] Warn if piping into an expression without parentheses
- [Macro] Add
Macro.traverse/4
that performs pre and post-walk at once - [Macro] Add
Macro.camelize/1
andMacro.underscore/1
- [Process] Add
Process.get_keys/0
- [Stream] Add
Stream.with_index/2
- [String] Introduce
String.replace_{prefix,suffix,leading,trailing}/2
. The first two will replace only the first occurrence of the given match in string. The last two will replace all occurrences of the given match - [String] Support
String.normalize/2
andString.equivalent?/2
that perform NFD and NFC normalization - [System] Add
System.time_offset
,System.monotonic_time
,System.system_time
,System.convert_time_unit
andSystem.unique_integer
- [System] Allow
System.cmd/3
to remove variables by specifying nil values - [Task] Add
Task.Supervisor.async_nolink/1/3
that spawns a supervised task without linking to the caller process - [Task] Introduce
Task.yield_many/2
- [Task] Raise an error when a task is queried from a non-owning process (instead of waiting forever)
ExUnit
- [ExUnit] Allow one test to raise multiple errors. The goal is to enable tools in the ecosystem to emit multiple failure reports from the same test
- [ExUnit] Support
@tag report: [:foo, :bar]
which will include the values for tags:foo
and:bar
whenever a test fails
IEx
- [IEx] Allow
IEX_WITH_WERL
to be set on Windows to always run on WERL mode - [IEx] Display type docs for
t(Module.type)
andt(Module.type/arity)
- [IEx] Add
i/1
helper that prints information about any data type - [IEx] Show source code snippet whenever there is a request to pry a given process
Logger
- [Logger] Add file to logger metadata
Mix
- [Mix] Cache and always consolidate protocols
- [Mix] Add
warn_test_pattern
tomix test
that will warn on potentially misconfigured test files - [Mix] Introduce
MIX_QUIET
environment variable that configures the underlying Mix task to output only error messages - [Mix] Introduce
MIX_DEBUG
environment variable that prints information about the task being run - [Mix] Validate git options and warn on conflicting ref, branch or tags
- [Mix] New umbrella applications will now share configuration and build files
- [Mix] Add experimental support for Rebar 3
- [Mix] Do not warn when an optional dependency has a conflicting
:only
option with another dependency - [Mix] Raise readable error message when parsertools is not available
- [Mix] Add
--build
flag tomix deps.clean DEP
to only remove artifacts from_build
2. Bug fixes
Kernel
- [Access] Improve error messages when using Access on non-valid key-value structures
- [Kernel] Raise when conflicting
:only
and:except
are given to import - [Kernel] Change
__ENV__.file
if@file
is set for the given function - [Kernel] Make
Kernel.ParallelRequire
aware of:warning_as_errors
- [Kernel] Improve error message for invalid
do
/do:
- [Macro] Ensure
Macro.to_string/2
respects operator precedence when using the access operator - [Path] Do not crash when expanding paths that go beyond the root, for example,
Path.expand("/../..")
- [String] Ensure
UnicodeConversionError
does not contain invalid string in its error message
IEx
- [IEx] Do not start apps on
recompile
helper if--no-start
was given - [IEx] Avoid copying of data when evaluating every expression in IEx
Mix
- [Mix] Always run non-recursive tasks at the umbrella root
- [Mix] Ensure rebar projects work on directory names that contain non-latin characters
- [Mix] Ignore directories inside
apps
in umbrellas that do not have amix.exs
file - [Mix] Ensure Mix can be used with path dependencies where the app name is different than the path basename
- [Mix] Ensure dependencies won't crash when updating from a git repository to a hex repository and the git version did not respect SemVer
- [Mix] Do not run remote converger if dependencies have diverged
- [Mix] Ensure umbrella dependencies across all environments are loaded on parent deps.get/deps.update
ExUnit
- [ExUnit] Include file and line in all compilation errors for doctests
3. Soft deprecations (no warnings emitted)
Kernel
- [Dict]
Dict
andHashDict
are soft deprecated in favor ofMap
- [Keyword]
Keyword.size/1
is deprecated in favor oflength/1
- [Map]
Map.size/1
is deprecated in favor ofmap_size/1
- [Set]
Set
andHashSet
are soft deprecated in favor ofMapSet
Mix
- [Mix]
Mix.Utils.camelize/1
andMix.Utils.underscore/1
are soft deprecated in favor ofMacro.camelize/1
andMacro.underscore/1