Elixir release

0.12.0

Change breakdown

Organization at a glance

Detailed changelog

Enhancement

27 changes

Tool: Elixir Module: Exception

Allow exception/1 to be overriden and promote it as the main mechanism to customize exceptions

Tool: Elixir Module: File

Add File.stream_to!/3

Tool: Elixir Module: Float

Add Float.floor/1, Float.ceil/1 and Float.round/3

Tool: Elixir Module: Kernel

Add List.delete_at/2 and List.updated_at/3

Tool: Elixir Module: Kernel

Add Enum.reverse/2

Tool: Elixir Module: Kernel

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

Tool: Elixir Module: Record

Support dynamic fields in defrecordp

Tool: Elixir Module: Stream

Add Stream.resource/3

Tool: Elixir Module: Stream

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

Tool: Elixir Module: Stream

Support Stream.take/2 and Stream.drop/2 with negative counts

Tool: Elixir Module: HashDict

Ensure a HashDict stored in an attribute can be accessed via the attribute

Tool: Elixir Module: Enum

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

Tool: Elixir Module: IEx

Ensure c/2 helper works with full paths

Tool: Elixir Module: Kernel

quote location: :keep now only affects definitions in order to keep the proper trace in definition exceptions

Tool: Elixir Module: Mix

Also symlink include directories in _build dependencies

Tool: Elixir Module: Version

Fix Version.match?/2 with ~> and versions with alphanumeric build info (like -dev)

Tool: Elixir Module: Enum

Enumerable.count/1 and Enumerable.member?/2 should now return tagged tuples. Please see Enumerable docs for more info

Tool: Elixir Module: Enum

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

Tool: Elixir Module: File

File.binstream!/3 is deprecated. Simply use File.stream!/3 which is able to figure out if stream or binstream operations should be used

Tool: Elixir Module: Macro

Macro.extract_args/1 is deprecated in favor of Macro.decompose_call/1

Tool: Elixir Module: Enum

Behaviour of Enum.drop/2 and Enum.take/2 has been switched when given negative counts

Tool: Elixir Module: Enum

Behaviour of Enum.zip/2 has been changed to stop as soon as the first enumerable finishes

Tool: Elixir Module: Enum

Enumerable.reduce/3 protocol has changed to support suspension. Please see Enumerable docs for more info

Tool: Elixir Module: Mix

Require :escript_main_module to be set before generating escripts

Tool: Elixir Module: Range

Range.Iterator protocol has changed in order to work with the new Enumerable.reduce/3. Please see Range.Iterator docs for more info

Tool: Elixir Module: Stream

The Stream.Lazy structure has changed to accumulate functions and accumulators as we go (its inspected representation has also changed)

Tool: Elixir Module: Typespec

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