Releases: elixir-lang/elixir
Releases · elixir-lang/elixir
v0.14.1
Enhancements
- [Base] Decoding and encoding functions now accept the
:case
as an option - [ExUnit] The test process now exits with
:shutdown
reason - [GenEvent]
GenEvent.stream/2
now accepts:sync
and:async
modes - [Node] Add
Node.start/3
andNode.stop/0
- [String] Updated Unicode database to 7.0
- [Task] Log when tasks crash
Bug fixes
- [Enum]
Enum.slice/2
andEnum.slice/3
always returns a list (and never nil) - [Kernel] Disambiguate (w)erl to (w)erl.exe
- [Mix] Ensure umbrella project is recompiled when a dependency inside an umbrella child changes
- [OptionParser] Do not allow underscores in option names
- [Path] Fix path expansion of
"/.."
- [Path] Do not match files starting with
.
inPath.wildcard/2
by default - [Process]
Process.info(pid, :registered_name)
returns{:registered_name, nil}
if there is no registered name - [String]
String.slice/2
andString.slice/3
always returns a list (and never nil) - [URI]
encode/1
does not escape reserved/unreserved characters by default nor encodes whitespace as+
(checkURI.encode_www_form/1
andURI.decode_www_form/1
for previous behaviour)
Deprecations
- [Mix]
:escript_*
options were moved into a single:escript
group
Backwards incompatible changes
- [GenEvent]
GenEvent.stream/2
defaults to:sync
mode - [Kernel] Remove
get_in/1
v0.14.0
Enhancements
- [ExUnit] Add
on_exit/1
callbacks that are guaranteed to run once the test process exits and always in another process - [Kernel] Store documentation in the abstract code to avoid loading them when the module is loaded
- [Kernel] Add
get_in/2
,put_in/3
,update_in/3
andget_and_update_in/3
to handle nested data structure operations - [Kernel] Add
get_in/1
,put_in/2
,update_in/2
andget_and_update_in/2
to handle nested data structure operations via paths - [Mix] Add
Mix.Config
to ease definition of configuration files - [Mix] Add
mix loadconfig
task that can be called multiple times to load external configs - [Mix] Support
--config
option onmix run
- [Mix] Support
HTTP_PROXY
andHTTPS_PROXY
on Mix url commands - [Mix] Support
--names
options inmix help
which emit only names (useful for autocompletion) - [Protocol] Add
Protocol.consolidate/2
,Protocol.consolidated?/1
and amix compile.protocols
task for protocol consolidation - [Protocol] Add
Protocol.derive/3
for runtime deriving of a struct - [String] Add
String.chunk/2
- [Struct] Add support for
@derive
beforedefstruct/2
definitions
Bug fixes
- [File]
File.rm
now consistently deletes read-only across operating systems - [Kernel] Ensure Mix
_build
structure works on Windows when copying projects - [Kernel] Ensure
1.0E10
(with uppercase E) is also valid syntax - [Mix] Fix
mix do
task for Windows' powershell users - [Path] Fix
Path.absname("/")
andPath.expand("/")
to return the absolute path"/"
.
Soft deprecations (no warnings emitted)
- [Kernel]
size/1
is deprecated, please usebyte_size/1
ortuple_size/1
instead - [ExUnit]
teardown/2
andteardown_all/2
are deprecated in favor ofon_exit/1
callbacks
Deprecations
- [Access]
Access.access/2
is deprecated in favor ofAccess.get/2
- [Dict]
Dict.Behaviour
is deprecated in favor ofDict
- [Kernel]
Application.Behaviour
,GenEvent.Behaviour
,GenServer.Behaviour
andSupervisor.Behaviour
are deprecated in favor ofApplication
,GenEvent
,GenServer
andSupervisor
- [Kernel]
defexception/3
is deprecated in favor ofdefexception/1
- [Kernel]
raise/3
is deprecated in favor ofreraise/2
- [Kernel]
set_elem/3
is deprecated in favor ofput_elem/3
- [Kernel] Passing an atom
var!/1
is deprecated, variables can be built dynamically withMacro.var/2
- [Mix] Exceptions that define a
:mix_error
field to be compatible with Mix are no longer supported. Instead please provide a:mix
field and useMix.raise/1
andMix.raise/2
Backwards incompatible changes
- [Access]
Kernel.access/2
no longer exists and theAccess
protocol now requiresget/2
(instead ofaccess/2
) andget_and_update/3
to be implemented - [Kernel] Retrieving docs as
module.__info__(:docs)
is no longer supported, please useCode.get_docs/2
instead - [Kernel]
Code.compiler_options/1
no longer accepts custom options, only the ones specified by Elixir (use mix config instead) - [Mix]
mix new
no longer generates a supevision tree by default, please pass--sup
instead - [Task] Tasks are automatically linked to callers and a failure in the task will crash the caller directly
v0.13.3
Enhancements
- [OptionParser] Add
:strict
option that only parses known switches - [OptionParser] Add
next/2
useful for manual parsing of options - [Macro] Add
Macro.prewalk/2/3
andMacro.postwalk/2/3
- [Kernel]
GenEvent
,GenServer
,Supervisor
,Agent
andTask
modules added - [Kernel] Make deprecations compiler warnings to avoid the same deprecation being printed multiple times
Bug fixes
- [Enum] Fix
Enum.join/2
andEnum.map_join/3
for empty binaries at the beginning of the collection - [ExUnit] Ensure the formatter doesn't error when printing :EXITs
- [Kernel] Rename
ELIXIR_ERL_OPTS
toELIXIR_ERL_OPTIONS
for consistency withERL_COMPILER_OPTIONS
- [OptionParser] Parse
-
as a plain argument - [OptionParser]
--
is always removed from argument list onparse/2
and when it is the leading entry onparse_head/2
- [Regex] Properly escape regex (previously regex controls were double escaped)
Soft deprecations (no warnings emitted)
- [Dict]
Dict.Behaviour
is deprecated in favor ofDict
- [Kernel]
Application.Behaviour
,GenEvent.Behaviour
,GenServer.Behaviour
andSupervisor.Behaviour
are deprecated in favor ofApplication
,GenEvent
,GenServer
andSupervisor
- [Kernel]
defexception/3
is deprecated in favor ofdefexception/1
- [Kernel]
raise/3
is deprecated in favor ofreraise/2
- [Kernel]
set_elem/3
is deprecated in favor ofput_elem/3
Soft deprecations for conversions (no warnings emitted)
- [Kernel]
atom_to_binary/1
andatom_to_list/1
are deprecated in favor ofAtom.to_string/1
andAtom.to_char_list/1
- [Kernel]
bitstring_to_list/1
andlist_to_bitstring/1
are deprecated in favor of the:erlang
ones - [Kernel]
binary_to_atom/1
,binary_to_existing_atom/1
,binary_to_float/1
,binary_to_integer/1
andbinary_to_integer/2
are deprecated in favor of conversion functions inString
- [Kernel]
float_to_binary/*
andfloat_to_list/*
are deprecated in favor ofFloat.to_string/*
andFloat.to_char_list/*
- [Kernel]
integer_to_binary/*
andinteger_to_list/*
are deprecated in favor ofInteger.to_string/*
andInteger.to_char_list/*
- [Kernel]
iodata_to_binary/1
andiodata_length/1
are deprecatedIO.iodata_to_binary/1
andIO.iodata_length/1
- [Kernel]
list_to_atom/1
,list_to_existing_atom/1
,list_to_float/1
,list_to_integer/1
,list_to_integer/2
andlist_to_tuple/1
are deprecated in favor of conversion functions inList
- [Kernel]
tuple_to_list/1
is deprecated in favor ofTuple.to_list/1
- [List]
List.from_char_data/1
andList.from_char_data!/1
deprecated in favor ofString.to_char_list/1
- [String]
String.from_char_data/1
andString.from_char_data!/1
deprecated in favor ofList.to_string/1
Deprecations
- [Kernel]
is_exception/1
,is_record/1
andis_record/2
are deprecated in favor ofException.exception?1
,Record.record?/1
andRecord.record?/2
- [Kernel]
defrecord/3
is deprecated in favor of structs - [Kernel]
:hygiene
inquote
is deprecated - [Mix]
Mix.project/0
is deprecated in favor ofMix.Project.config/0
- [Process]
Process.spawn/1
,Process.spawn/3
,Process.spawn_link/1
,Process.spawn_link/3
,Process.spawn_monitor/1
,Process.spawn_monitor/3
,Process.send/2
andProcess.self/0
are deprecated in favor of the ones inKernel
Backwards incompatible changes
- [Exception] Exceptions now generate structs instead of records
- [OptionParser] Errors on parsing returns the switch and value as binaries (unparsed)
- [String]
String.to_char_list/1
(previously deprecated) no longer returns a tuple but the char list only and raises in case of failure
v0.13.2
Enhancements
- [Application] Add an Application module with common functions to work with OTP applications
- [Exception] Add
Exception.message/1
,Exception.format_banner/1
,Exception.format_exit/1
andException.format/1
- [File] Add
File.ln_s/1
- [Mix]
mix deps.clean
now works accross environments - [Mix] Support line numbers in
mix test
, e.g. test/some/file_test.exs:12 - [Mix] Use
@file
attributes to detect dependencies in between.ex
and external files. This means changing an.eex
file will no longer recompile the whole project only the files that depend directly on it - [Mix] Support application configurations in
config/config.exs
which can be customized by specifying your own:config_path
- [Mix] Support user-wide configuration with
~/.mix/config.exs
- [Mix]
mix help
now uses ANSI formatting to print guides - [Regex] Support functions in
Regex.replace/4
- [String] Support
:parts
inString.split/3
Bug fixes
- [Code] Ensure we don't lose the caller stacktrace on code evaluation
- [IEx] Exit signals now exits the IEx evaluator and a new one is spawned on its place
- [IEx] Ensure we don't prune too much stacktrace when reporting failures
- [IEx] Fix an issue where
iex.bat
on Windows was not passing the proper parameters forward - [Kernel] Ensure modules defined on root respect defined aliases
- [Kernel] Do not wrap single lists in
:__block__
- [Kernel] Ensure emitted beam code works nicely with dialyzer
- [Kernel] Do not allow a module named
Elixir
to be defined - [Kernel] Create remote funs even if mod is a variable in capture
&mod.fun/arity
- [Kernel] Improve compiler message when duplicated modules are detected
- [Mix] Generate
.gitignore
for--umbrella
projects - [Mix] Verify if a git dependency in deps has a proper git checkout and clean it automatically when it doesn't
- [Mix] Ensure
mix test
works withIEx.pry/0
- [System] Convert remaining functions in System to rely on char data
Soft deprecations (no warnings emitted)
- [Application]
use Application.Behaviour
is deprecated in favor ofuse Application
- [Exception]
exception.message
is deprecated in favorException.message/1
for retrieving exception messages - [Kernel]
is_exception/1
,is_record/1
andis_record/2
are deprecated in favor ofException.exception?1
,Record.record?/1
andRecord.record?/2
- [Mix]
Mix.project/0
is deprecated in favor ofMix.Project.config/0
- [Process]
Process.spawn/1
,Process.spawn/3
,Process.spawn_link/1
,Process.spawn_link/3
,Process.spawn_monitor/1
,Process.spawn_monitor/3
,Process.send/2
andProcess.self/0
are deprecated in favor of the ones inKernel
Deprecations
- [IEx] IEx.Options is deprecated in favor of
IEx.configure/1
andIEx.configuration/0
- [Kernel]
lc
andbc
comprehensions are deprecated in favor offor
- [Macro]
Macro.safe_terms/1
is deprecated - [Process]
Process.delete/0
is deprecated - [Regex] Deprecate
:global
option inRegex.split/3
in favor ofparts: :infinity
- [String] Deprecate
:global
option inString.split/3
in favor ofparts: :infinity
Backwards incompatible changes
- [ExUnit]
ExUnit.Test
andExUnit.TestCase
has been converted to structs - [ExUnit] The test and callback context has been converted to maps
- [Kernel]
File.Stat
,HashDict
,HashSet
,Inspect.Opts
,Macro.Env
,Range
,Regex
andVersion.Requirement
have been converted to structs. This meansis_record/2
checks will no longer work, instead, you can pattern match on them using%Range{}
and similar - [URI] The
URI.Info
record has now become theURI
struct - [Version] The
Version.Schema
record has now become theVersion
struct
v0.13.1
Enhancements
- [Mix] Support
MIX_EXS
as configuration for running the current mix.exs file - [Mix] Support Hex out of the box. This means users do not need to install Hex directly, instead, Mix will prompt whenever there is a need to have Hex installed
Bug fixes
- [ExUnit] Ensure doctest failures are properly reported
- [Kernel] Fix a bug where comprehensions arguments were not properly take into account in the variable scope
- [Mix] Fix issue on rebar install when the endpoint was redirecting to a relative uri
Deprecations
- [Kernel]
iolist_size
andiolist_to_binary
are deprecated in favor ofiodata_size
andiodata_to_binary
(this is a soft deprecation, no warnings will be emitted) - [Mix]
:env
key in project configuration is deprecated - [Regex]
Regex.groups/1
is deprecated in favor ofRegex.names/1
- [String]
String.to_char_list/1
is deprecated in favor ofList.from_char_data/1
(this is a soft deprecation, no warnings will be emitted) - [String]
String.from_char_list/1
is deprecated in favor ofString.from_char_data/1
(this is a soft deprecation, no warnings will be emitted)
Backwards incompatible changes
- [Macro]
Macro.unpipe/1
now returns tuples andMacro.pipe/2
was removed in favor ofMacro.pipe/3
which explicitly expects the second element of the tuple returned by the newMacro.unpipe/1
- [Path] The functions in Path now only emit strings as result, regardless if the input was a char list or a string
- [Path] Atoms are no longer supported in Path functions
- [Regex] Regexes are no longer unicode by default. Instead, they must be explicitly marked with the
u
option
v0.13.0
Enhancements
- [Base] Add
Base
module which does conversions to bases 16, 32, hex32, 64 and url64 - [Code] Add
Code.eval_file/2
- [Collectable] Add the
Collectable
protocol that empowersEnum.into/2
andStream.into/2
and the:into
option in comprehensions - [Collectable] Implement
Collectable
for lists, dicts, bitstrings, functions and provide bothFile.Stream
andIO.Stream
- [EEx] Add
handle_body/1
callback toEEx.Engine
- [Enum] Add
Enum.group_by/2
,Enum.into/2
,Enum.into/3
,Enum.traverse/2
andEnum.sum/2
- [ExUnit] Randomize cases and tests suite runs, allow seed configuration and the
--seed
flag viamix test
- [ExUnit] Support
--only
for filtering when running tests withmix test
- [ExUnit] Raise an error if another
capture_io
process already captured the device - [ExUnit] Improve formatter to show source code and rely on lhs and rhs (instead of expected and actual)
- [IEx] Allow prompt configuration with the
:prompt
option - [IEx] Use werl on Windows
- [Kernel] Support
ERL_PATH
inbin/elixir
- [Kernel] Support interpolation in keyword syntax
- [Map] Add a Map module and support 17.0 maps and structs
- [Mix] Add dependency option
:only
to specify the dependency environment.mix deps.get
andmix deps.update
works accross all environment unless--only
is specified - [Mix] Add
Mix.Shell.prompt/1
- [Mix] Ensure the project is compiled in case Mix' CLI cannot find a task
- [Node] Add
Node.ping/1
- [Process] Include
Process.send/3
and support the--gen-debug
option - [Regex] Regexes no longer need the "g" option when there is a need to use named captures
- [Stream] Add
Stream.into/2
andStream.into/3
- [StringIO] Add a
StringIO
module that allows a String to be used as IO device - [System] Add
System.delete_env/1
to remove a variable from the environment
Bug fixes
- [CLI] Ensure
--app
is handled as an atom before processing - [ExUnit] Ensure
ExUnit.Assertions
does not emit compiler warnings forassert_receive
- [Kernel] Ensure the same pid is not queued twice in the parallel compiler
- [Macro]
Macro.to_string/2
considers proper precedence when translating!(foo > bar)
into a string - [Mix] Automatically recompile on outdated Elixir version and show proper error messages
- [Mix] Ensure generated
.app
file includes core dependencies - [Mix] Allow a dependency with no SCM to be overridden
- [Mix] Allow queries in
mix local.install
URL - [OptionParser] Do not recognize undefined aliases as switches
Deprecations
- [Dict]
Dict.empty/1
,Dict.new/1
andDict.new/2
are deprecated - [Exception]
Exception.normalize/1
is deprecated in favor ofException.normalize/2
- [Kernel]
lc
andbc
comprehensions are deprecated in favor offor
(this is a soft deprecation, no warning will be emitted) - [ListDict]
ListDict
is deprecated in favor ofMap
(this is a soft deprecation, no warning will be emitted) - [Record]
defrecord/2
,defrecordp/3
,is_record/1
andis_record/2
macros in Kernel are deprecated. Instead, use the new macros and API defined in theRecord
module (this is a soft deprecation, no warnings will be emitted)
Backwards incompatible changes
- [ExUnit] Formatters are now required to be a GenEvent and
ExUnit.run/2
returns a map with results
v0.12.5
Bug fixes
- [Kernel] Ensure
try
does not generate an after clause. Generating an after clause forbade clauses in theelse
part from being tail recursive. This should improve performance and memory consumption ofStream
functions - [Mix] Automatically recompile on outdated Elixir version and show proper error messages
Deprecations
- [File]
File.stream_to!/3
is deprecated - [GenFSM]
GenFSM
is deprecated - [Kernel]
%
for sigils is deprecated in favor of~
- [Kernel]
is_range/1
andis_regex/1
are deprecated in favor ofRange.range?/1
andRegex.regex?/1
- [Stream]
Stream.after/1
is deprecated - [URI]
URI.decode_query/1
is deprecated in favor ofURI.decode_query/2
with explicit dict argument - [URI] Passing lists as key or values in
URI.encode_query/1
is deprecated
Backwards incompatible changes
- [Mix] Remove
MIX_GIT_FORCE_HTTPS
as Git itself already provides mechanisms for doing so
v0.12.4
Enhancements
- [Mix]
mix deps.get
andmix deps.update
no longer compile dependencies afterwards. Instead, they mark the dependencies which are going to be automatically compiled next timedeps.check
is invoked (which is done automatically by most mix tasks). This means users should have a better workflow when migrating in between environments
Deprecations
- [Kernel]
//
for default arguments is deprecated in favor of\\
- [Kernel] Using
%
for sigils is deprecated in favor of~
. This is a soft deprecation, no warnings will be emitted for it in this release - [Kernel] Using
^
inside function clause heads is deprecated, please use a guard instead
Backwards incompatible changes
- [ExUnit]
CaptureIO
returns an empty string instead of nil when there is no capture - [Version] The
Version
module now only works with SemVer. The functionsVersion.parse/1
andVersion.parse_requirement/1
now return{:ok,res} | :error
for the cases you want to handle non SemVer cases manually. All other functions will trigger errors on non semantics versions
v0.12.3
Enhancements
- [Kernel] Warnings now are explicitly tagged with "warning:" in messages
- [Kernel] Explicit functions inlined by the compiler, including operators. This means that
Kernel.+/2
will now expand to:erlang.+/2
and so on - [Mix] Do not fail if a Mix dependency relies on an outdated Elixir version
- [Process] Add
Process.send/2
andProcess.send_after/3
- [Version] Add
Version.compare/2
Bug fixes
- [Atom] Inspect
:...
and:foo@bar
without quoting - [Keyword] The list
[1, 2, three: :four]
now correctly expands to[1, 2, {:three, :four}]
- [Kernel] Ensure undefined
@attributes
shows proper stacktrace in warnings - [Kernel] Guarantee nullary funs/macros are allowed in guards
- [Process] Ensure monitoring functions are inlined by the compiler
Deprecations
- [IEx] The helper
m/0
has been deprecated. The goal is to group all runtime statistic related helpers into a single module - [Kernel]
binary_to_term/1
,binary_to_term/2
,term_to_binary/1
andterm_to_binary/2
are deprecated in favor of their counterparts in the:erlang
module - [Kernel]
//
for default arguments is deprecated in favor of\\
. This is a soft deprecation, no warnings will be emitted for it in this release - [Kernel] Deprecated
@behavior
in favor of@behaviour
- [Record]
to_keywords
,getter
andlist getter
functionalities indefrecordp
are deprecated - [Record]
Record.import/2
is deprecated
Backwards incompatible changes
- [Dict] Implementations of
equal?/2
andmerge/2
inHashDict
andListDict
are no longer polymorphic. To get polymorphism, use the functions inDict
instead - [File]
File.cp/3
andFile.cp_r/3
no longer carry Unix semantics where the function behaves differently if the destination is an existing previous directory or not. It now always copies source to destination, doing it recursively in the latter - [IEx] IEx now loads the
.iex.exs
file instead of.iex
- [Kernel] Remove
**
from the list of allowed operators - [Kernel] Limit sigils delimiters to one of the following:
<>
,{}
,[]
,()
,||
,//
,"
and'
- [Range]
Range
is no longer a record, instead usefirst .. last
if you need pattern matching - [Set] Implementations of
difference/2
,disjoint?/2
,equal?/2
,intersection/2
,subset?/2
andunion/2
inHashSet
are no longer polymorphic. To get polymorphism, use the functions inSet
instead
v0.12.2
Enhancements
- [EEx] Allow
EEx.AssignsEngine
to accept any Dict - [Enum] Add
Enum.flat_map_reduce/3
- [ExUnit] Support
@moduletag
in ExUnit cases - [Kernel] Improve stacktraces to be relative to the compilation path and include the related application
- [Stream] Add
Stream.transform/3
Bug fixes
- [ExUnit]
:include
in ExUnit only has effect if a test was previously excluded with:exclude
- [ExUnit] Only run
setup_all
andteardown_all
if there are tests in the case - [Kernel] Ensure bitstring modifier arguments are expanded
- [Kernel] Ensure compiler does not block on missing modules
- [Kernel] Ensure
<>/2
works only with binaries - [Kernel] Fix usage of string literals inside
<<>>
whenutf8
/utf16
/utf32
is used as specifier - [Mix] Ensure mix properly copies _build dependencies on Windows
Deprecations
- [Enum] Deprecate
Enum.first/1
in favor ofEnum.at/2
andList.first/1
- [Kernel] Deprecate continuable heredocs. In previous versions, Elixir would continue parsing on the same line the heredoc started, this behavior has been deprecated
- [Kernel]
is_alive/0
is deprecated in favor ofNode.alive?
- [Kernel]
Kernel.inspect/2
withInspect.Opts[]
is deprecated in favor ofInspect.Algebra.to_doc/2
- [Kernel]
Kernel.inspect/2
with:raw
option is deprecated, use:records
option instead - [Kernel] Deprecate
<-/2
in favor ofsend/2
Backwards incompatible changes
- [String] Change
String.next_grapheme/1
andString.next_codepoint/1
to returnnil
on string end