Enhancement
52 changes
Add spec/1 and spec/2 to retrieve application specification
Add get_application/1 to retrieve the application a given module belongs to
Optimize encode and decode operations about 10 times
Use the faster and auto-seeding :rand instead of :random in Enum.shuffle/1 and Enum.random/1 and Enum.take_random/2
Add Enum.with_index/2
Add GenServer.stop/1 for shutting down servers reliably
Add color related functions to IO.ANSI
Support multiple aliases in alias, import, require and use. For example, alias MyApp.{Foo, Bar, Baz}
Add struct!/2. Similar to struct/2 but raises on invalid keys
Warn if @doc/@typedoc/@moduledoc attributes are redefined
Warn if non-variables are used in defdelegate/2 (as they have no effect)
Mark quoted expressions as generated, avoiding false positives on dialyzer
Allow variables as map keys on creation %{key => value} and on matches %{^key => value}
Allow the pin operator ^ in fn clauses and on the left side of <- in for comprehensions
Introduce with as a special form that allows matching on right side parameters
Warn when right hand side of -> does not provide any expression
Warn if the Elixir was compiled with a different endianness than the one currently available at runtime
Warn if a variable is used after being defined exclusively in a nested context
Warn if piping into an expression without parentheses
Add Macro.traverse/4 that performs pre and post-walk at once
Add Macro.camelize/1 and Macro.underscore/1
Add Process.get_keys/0
Add Stream.with_index/2
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
Support String.normalize/2 and String.equivalent?/2 that perform NFD and NFC normalization
Add System.time_offset, System.monotonic_time, System.system_time, System.convert_time_unit and System.unique_integer
Allow System.cmd/3 to remove variables by specifying nil values
Add Task.Supervisor.async_nolink/1/3 that spawns a supervised task without linking to the caller process
Introduce Task.yield_many/2
Raise an error when a task is queried from a non-owning process (instead of waiting forever)
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
Support @tag report: [:foo, :bar] which will include the values for tags :foo and :bar whenever a test fails
Allow IEX_WITH_WERL to be set on Windows to always run on WERL mode
Display type docs for t(Module.type) and t(Module.type/arity)
Add i/1 helper that prints information about any data type
Show source code snippet whenever there is a request to pry a given process
Add file to logger metadata
Cache and always consolidate protocols
Add warn_test_pattern to mix test that will warn on potentially misconfigured test files
Introduce MIX_QUIET environment variable that configures the underlying Mix task to output only error messages
Introduce MIX_DEBUG environment variable that prints information about the task being run
Validate git options and warn on conflicting ref, branch or tags
New umbrella applications will now share configuration and build files
Add experimental support for Rebar 3
Do not warn when an optional dependency has a conflicting :only option with another dependency
Raise readable error message when parsertools is not available
Add --build flag to mix deps.clean DEP to only remove artifacts from _build
Dict and HashDict are soft deprecated in favor of Map
Keyword.size/1 is deprecated in favor of length/1
Map.size/1 is deprecated in favor of map_size/1
Set and HashSet are soft deprecated in favor of MapSet
Mix.Utils.camelize/1 and Mix.Utils.underscore/1 are soft deprecated in favor of Macro.camelize/1 and Macro.underscore/1