v0.10.2
Pre-release
Pre-release
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