Enhancement
27 changes
Allow exception/1 to be overriden and promote it as the main mechanism to customize exceptions
Add File.stream_to!/3
Add Float.floor/1, Float.ceil/1 and Float.round/3
Add List.delete_at/2 and List.updated_at/3
Add Enum.reverse/2
Implement defmodule/2, @/1, def/2 and friends in Elixir itself. case/2, try/2 and receive/1 have been made special forms. var!/1, var!/2 and alias!/1 have also been implemented in Elixir and demoted from special forms
Support dynamic fields in defrecordp
Add Stream.resource/3
Add Stream.zip/2, Stream.filter_map/3, Stream.each/2, Stream.take_every/2, Stream.chunk/2, Stream.chunk/3, Stream.chunk/4, Stream.chunk_by/2, Stream.scan/2, Stream.scan/3, Stream.uniq/2, Stream.after/2 and Stream.run/1
Support Stream.take/2 and Stream.drop/2 with negative counts
Ensure a HashDict stored in an attribute can be accessed via the attribute
Fix bug in Enum.chunk/4 where you'd get an extra element when the enumerable was a multiple of the counter and a pad was given
Ensure c/2 helper works with full paths
quote location: :keep now only affects definitions in order to keep the proper trace in definition exceptions
Also symlink include directories in _build dependencies
Fix Version.match?/2 with ~> and versions with alphanumeric build info (like -dev)
Enumerable.count/1 and Enumerable.member?/2 should now return tagged tuples. Please see Enumerable docs for more info
Deprecate Enum.chunks/2, Enum.chunks/4 and Enum.chunks_by/2 in favor of Enum.chunk/2, Enum.chunk/4 and Enum.chunk_by/2
File.binstream!/3 is deprecated. Simply use File.stream!/3 which is able to figure out if stream or binstream operations should be used
Macro.extract_args/1 is deprecated in favor of Macro.decompose_call/1
Behaviour of Enum.drop/2 and Enum.take/2 has been switched when given negative counts
Behaviour of Enum.zip/2 has been changed to stop as soon as the first enumerable finishes
Enumerable.reduce/3 protocol has changed to support suspension. Please see Enumerable docs for more info
Require :escript_main_module to be set before generating escripts
Range.Iterator protocol has changed in order to work with the new Enumerable.reduce/3. Please see Range.Iterator docs for more info
The Stream.Lazy structure has changed to accumulate functions and accumulators as we go (its inspected representation has also changed)
when clauses were moved to the outer part of the spec and should be in the keywords format. So add(a, b) when is_subtype(a, integer) and is_subtype(b, integer) :: integer should now be written as add(a, b) :: integer when a: integer, b: integer