Releases: elixir-lang/elixir
Releases · elixir-lang/elixir
v0.11.0
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/2
with a range - [Enum] Document and enforce
Enum.member?/2
to use the match operator (===
) - [IEx] Split
IEx.Evaluator
fromIEx.Server
to allow custom evaluators - [IEx] Add support for
IEx.pry
which 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/3
andMacro.unpipe/1
for 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/1
andimpl_for!/1
functions 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/2
with a range
Bug fixes
- [Exception] Ensure
defexception
fields can be set dynamically - [Kernel] Guarantee aliases hygiene is respected when the current module name is not known upfront
- [Kernel]
Kernel.access/2
no longer flattens lists - [Mix] Ensure cyclic dependencies are properly handled
- [String] Implement the extended grapheme cluster algorithm for
String
operations
Deprecations
- [Kernel]
pid_to_list/1
,list_to_pid/1
,binary_to_atom/2
,binary_to_existing_atom/2
andatom_to_binary/2
are deprecated in favor of their counterparts in the:erlang
module - [Kernel]
insert_elem/3
anddelete_elem/2
are deprecated in favor ofTuple.insert_at/3
andTuple.delete_at/2
- [Kernel] Use of
in
inside 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/2
is deprecated - [Protocol]
@only
and@except
in protocols are now deprecated - [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) - [String]
String.to_integer/1
andString.to_float/1
are deprecated in favor ofInteger.parse/1
andFloat.parse/1
Backwards incompatible changes
- [CLI] Reading
.elixirrc
has been dropped in favor of setting env vars - [Kernel]
Kernel.access/2
now expects the second argument to be a compile time list - [Kernel]
fn -> end
quoted expression is no longer wrapped in ado
keyword - [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
deps
directory. 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/2
args have been reversed so the "subject" comes first - [Protocol] Protocol no longer dispatches to
Number
, but toInteger
andFloat
v0.10.3
Enhancements
- [Enum] Add
Enum.take_every/2
- [IEx] IEx now respects signals sent from the Ctrl+G menu
- [Kernel] Allow documentation for types with
@typedoc
- [Mix] Allow apps to be selected in umbrella projects
- [Record] Generated record functions
new
andupdate
also take options with strings as keys - [Stream] Add
Stream.unfold/1
Bug fixes
- [Dict] Fix a bug when a HashDict was marked as equal when one was actually a subset of the other
- [EEx] Solve issue where
do
blocks inside templates were not properly aligned - [ExUnit] Improve checks and have better error reports on poorly aligned doctests
- [Kernel] Fix handling of multiple heredocs on the same line
- [Kernel] Provide better error messages for match, guard and quoting errors
- [Kernel] Make
Kernel.raise/2
a macro to avoid messing up stacktraces - [Kernel] Ensure
&()
works on quoted blocks with only one expression - [Mix] Address an issue where a dependency was not compiled in the proper order when specified in different projects
- [Mix] Ensure
compile: false
is a valid mechanism for disabling the compilation of dependencies - [Regex] Fix bug on
Regex.scan/3
when capturing groups and the regex has no groups - [String] Fix a bug with
String.split/2
when given an empty pattern - [Typespec] Guarantee typespecs error reports point to the proper line
Deprecations
- [Kernel] The previous partial application syntax (without the
&
operator) has now been deprecated - [Regex]
Regex.captures/3
is deprecated in favor ofRegex.named_captures/3
- [String]
String.valid_codepoint?/1
is deprecated in favor of pattern matching with<<_ :: utf8 >>
Backwards incompatible changes
- [IEx] The
r/0
helper has been removed as it caused surprising behaviour when many modules with dependencies were accumulated - [Mix]
Mix.Version
was renamed toVersion
- [Mix]
File.IteratorError
was renamed toIO.StreamError
- [Mix]
mix new
now defaults to the--sup
option, use--bare
to get the previous behaviour
v0.10.2
Enhancements
- [CLI] Add
--verbose
to elixirc, which now is non-verbose by default - [Dict] Add
Dict.Behaviour
as a convenience to create your own dictionaries - [Enum] Add
Enum.split/2
,Enum.reduce/2
,Enum.flat_map/2
,Enum.chunks/2
,Enum.chunks/4
,Enum.chunks_by/2
,Enum.concat/1
andEnum.concat/2
- [Enum] Support negative indices in
Enum.at/fetch/fetch!
- [ExUnit] Show failures on CLIFormatter as soon as they pop up
- [IEx] Allow for strings in
h
helper - [IEx] Helpers
r
andc
can handle erlang sources - [Integer] Add
odd?/1
andeven?/1
- [IO] Added support to specifying a number of bytes to stream to
IO.stream
,IO.binstream
,File.stream!
andFile.binstream!
- [Kernel] Include file and line on error report for overriding an existing function/macro
- [Kernel] Convert external functions into quoted expressions. This allows record fields to contain functions as long as they point to an
&Mod.fun/arity
- [Kernel] Allow
foo?
andbar!
as valid variable names - [List] Add
List.replace_at/3
- [Macro] Improve printing of the access protocol on
Macro.to_string/1
- [Macro] Add
Macro.to_string/2
to support annotations on the converted string - [Mix] Automatically recompile a project if the Elixir version changes
- [Path] Add
Path.relative_to_cwd/2
- [Regex] Allow erlang
re
options when compiling Elixir regexes - [Stream] Add
Stream.concat/1
,Stream.concat/2
andStream.flat_map/2
- [String] Add regex pattern support to
String.replace/3
- [String] Add
String.ljust/2
,String.rjust/2
,String.ljust/3
andString.rjust/3
- [URI]
URI.parse/1
supports IPv6 addresses
Bug fixes
- [Behaviour] Do not compile behaviour docs if docs are disabled on compilation
- [ExUnit] Doctests no longer eat too much space and provides detailed reports for poorly indented lines
- [File] Fix a bug where
File.touch(file, datetime)
was not setting the proper datetime when the file did not exist - [Kernel] Limit
inspect
results to 50 items by default to avoid printing too much data - [Kernel] Return a readable error on oversized atoms
- [Kernel] Allow functions ending with
?
or!
to be captured - [Kernel] Fix default shutdown of child supervisors to
:infinity
- [Kernel] Fix regression when calling a function/macro ending with bang, followed by
do/end
blocks - [List] Fix bug on
List.insert_at/3
that added the item at the wrong position for negative indexes - [Macro]
Macro.escape/2
can now escape improper lists - [Mix] Fix
Mix.Version
matching on pre-release info - [Mix] Ensure
watch_exts
trigger full recompilation on change withmix compile
- [Mix] Fix regression on
mix clean --all
- [String]
String.strip/2
now supports removing unicode characters - [String]
String.slice/3
still returns the proper result when there is no length to be extracted - [System]
System.get_env/0
now returns a list of tuples as previously advertised
Deprecations
- [Dict]
Dict.update/3
is deprecated in favor ofDict.update!/3
- [Enum]
Enum.min/2
andEnum.max/2
are deprecated in favor ofEnum.min_by/2
andEnum.max_by/2
- [Enum]
Enum.join/2
andEnum.map_join/3
with a char list are deprecated - [IO]
IO.stream(device)
andIO.binstream(device)
are deprecated in favor ofIO.stream(device, :line)
andIO.binstream(device, :line)
- [Kernel]
list_to_binary/1
,binary_to_list/1
andbinary_to_list/3
are deprecated in favor ofString.from_char_list!/1
andString.to_char_list!/1
for characters and:binary.list_to_bin/1
,:binary.bin_to_list/1
and:binary.bin_to_list/3
for bytes - [Kernel]
to_binary/1
is deprecated in favor ofto_string/1
- [Kernel] Deprecate
def/4
and friends in favor ofdef/2
with unquote and friends - [Kernel] Deprecate
%b
and%B
in favor of%s
and%S
- [List]
List.concat/2
is deprecated in favor ofEnum.concat/2
- [Macro]
Macro.unescape_binary/1
andMacro.unescape_binary/2
are deprecated in favor ofMacro.unescape_string/1
andMacro.unescape_string/2
- [Mix]
:umbrella
option for umbrella paths has been deprecated in favor of:in_umbrella
Backwards incompatible changes
- [IO] IO functions now only accept iolists as arguments
- [Kernel]
Binary.Chars
was renamed toString.Chars
- [Kernel] The previous ambiguous import syntax
import :functions, Foo
was removed in favor ofimport Foo, only: :functions
- [OptionParser]
parse
andparse_head
now returns a tuple with three elements instead of two
v0.10.1
Enhancements
- [Behaviour] Add support for
defmacrocallback/1
- [Enum] Add
Enum.shuffle/1
- [ExUnit] The
:trace
option now also reports run time for each test - [ExUnit] Add support for
:color
to enable/disable ANSI coloring - [IEx] Add the
clear
helper to clear the screen. - [Kernel] Add the capture operator
&
- [Kernel] Add support for
GenFSM.Behaviour
- [Kernel] Functions now points to the module and function they were defined when inspected
- [Kernel] A documentation attached to a function that is never defined now prints warnings
- [List] Add
List.keysort/2
- [Mix]
:test_helper
project configuration did not affectmix test
and was therefore removed. Atest/test_helper.exs
file is still necessary albeit it doesn't need to be automatically required in each test file - [Mix] Add manifests for yecc, leex and Erlang compilers, making it easier to detect dependencies in between compilers and providing a more useful clean behaviour
- [Mix]
mix help
now outputs information about the default mix task - [Mix] Add
--no-deps-check
option tomix run
,mix compile
and friends to not check dependency status - [Mix] Add support for
MIX_GIT_FORCE_HTTPS
system environment that forces HTTPS for known providers, useful when the regular git port is blocked. This configuration does not affect themix.lock
results - [Mix] Allow coverage tool to be pluggable via the
:test_coverage
configuration - [Mix] Add
mix cmd
as a convenience to run a command recursively in child apps in an umbrella application - [Mix] Support
umbrella: true
in dependencies as a convenience for setting up umbrella path deps - [Mix]
mix run
now behaves closer to theelixir
command and properly mangles the ARGV - [String] Add
Regex.scan/3
now supports capturing groups - [String] Add
String.reverse/1
Bug fix
- [Behaviour] Ensure callbacks are stored in the definition order
- [CLI] Speed up boot time on Elixir .bat files
- [IEx] Reduce cases where IEx parser can get stuck
- [Kernel] Improve error messages when the use of an operator has no effect
- [Kernel] Fix a bug where warnings were not being generated when imported macros conflicted with local functions or macros
- [Kernel] Document that
on_definition
can only be a function as it is evaluated inside the function context - [Kernel] Ensure
%w
sigils with no interpolation are fully expanded at compile time - [Mix]
mix deps.update
,mix deps.clean
andmix deps.unlock
no longer change all dependencies unless--all
is given - [Mix] Always run
mix loadpaths
onmix app.start
, even if--no-compile
is given - [OptionParser] Do not add boolean flags to the end result if they were not given
- [OptionParser] Do not parse non-boolean flags as booleans when true or false are given
- [OptionParser] Ensure
:keep
and:integer
|:float
can be given together as options - [OptionParser] Ensure
--no-flag
sets:flag
to false when:flag
is a registered boolean switch
Deprecations
- [Kernel]
function(Mod.fun/arity)
andfunction(fun/arity)
are deprecated in favor of&Mod.fun/arity
and&fun/arity
- [Kernel]
function/3
is deprecated in favor ofModule.function/3
- [Kernel]
Kernel.ParallelCompiler
now receives a set of callbacks instead of a single one - [Mix]
:test_coverage
option now expect keywords arguments and the--cover
flag is now treated as a boolean
Backwards incompatible changes
- [Regex]
Regex.scan/3
now always returns a list of lists, normalizing the result, instead of list with mixed lists and binaries - [System]
System.halt/2
was removed since the current Erlang implementation of such function is bugged
v0.10.0
Enhancements
- [ExUnit] Support
trace: true
option which gives detailed reporting on test runs - [HashDict] Optimize
HashDict
to store pairs in a cons cell reducing storage per key by half - [Kernel] Add pretty printing support for inspect
- [Kernel] Add document algebra library used as the foundation for pretty printing
- [Kernel] Add
defrecordp/3
that enables specifying the first element of the tuple - [Kernel] Add the
Set
API and a hash based implementation viaHashSet
- [Kernel] Add
Stream
as composable, lazy-enumerables - [Mix]
mix archive
now includes the version of the generated archive - [Mix] Mix now requires explicit dependency overriding to be given with
override: true
- [Mix] Projects can now define an
:elixir
key to outline supported Elixir versions - [Typespec] Improve error messages to contain file, line and the typespec itself
Bug fix
- [CLI] Elixir can now run on Unix directories with
:
in its path - [Kernel]
match?/2
does not leak variables to outer scope - [Kernel] Keep
head|tail
format when splicing at the tail - [Kernel] Ensure variables defined in the module body are not passed to callbacks
- [Mix] On dependencies conflict, show from where each source is coming from
- [Mix] Empty projects no longer leave empty ebin files on
mix compile
- [Module] Calling
Module.register_attribute/3
no longer automatically changes it to persisted or accumulated
Deprecations
- [Enum] Receiving the index of iteration in
Enum.map/2
andEnum.each/2
is deprecated in favor ofStream.with_index/1
- [File]
File.iterator/1
andFile.biniterator/1
are deprecated in favor ofIO.stream/1
andIO.binstream/1
- [File]
File.iterator!/2
andFile.biniterator!/2
are deprecated in favor ofFile.stream!/2
andFile.binstream!/2
- [Kernel] Deprecate recently added
quote binding: ...
in favor of the clearerquote bind_quoted: ...
- [Kernel] Deprecate
Kernel.float/1
in favor of a explicit conversion - [Mix] Deprecate
mix run EXPR
in favor ofmix run -e EXPR
- [Record]
Record.__index__/2
deprecated in favor ofRecord.__record__(:index, key)
Backwards incompatible changes
-
[Kernel] The
Binary.Inspect
protocol has been renamed toInspect
-
[Kernel] Tighten up the grammar rules regarding parentheses omission, previously the examples below would compile but now they raise an error message:
do_something 1, is_list [], 3 [1, is_atom :foo, 3]
-
[Module] Calling
Module.register_attribute/3
no longer automatically changes it to persisted or accumulated -
[Record] First element of a record via
defrecordp
is now thedefrecordp
name and no longer the current atom -
[URI] Remove custom URI parsers in favor of
URI.default_port/2