Skip to content

v0.12.0

Pre-release
Pre-release
Compare
Choose a tag to compare
@josevalim josevalim released this 15 Dec 22:14

Enhancements

  • [Exception] Allow exception/1 to be overriden and promote it as the main mechanism to customize exceptions
  • [File] Add File.stream_to!/3
  • [Float] Add Float.floor/1, Float.ceil/1 and Float.round/3
  • [Kernel] Add List.delete_at/2 and List.updated_at/3
  • [Kernel] Add Enum.reverse/2
  • [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
  • [Record] Support dynamic fields in defrecordp
  • [Stream] Add Stream.resource/3
  • [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
  • [Stream] Support Stream.take/2 and Stream.drop/2 with negative counts

Bug fixes

  • [HashDict] Ensure a HashDict stored in an attribute can be accessed via the attribute
  • [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
  • [IEx] Ensure c/2 helper works with full paths
  • [Kernel] quote location: :keep now only affects definitions in order to keep the proper trace in definition exceptions
  • [Mix] Also symlink include directories in _build dependencies
  • [Version] Fix Version.match?/2 with ~> and versions with alphanumeric build info (like -dev)

Deprecations

  • [Enum] Enumerable.count/1 and Enumerable.member?/2 should now return tagged tuples. Please see Enumerable docs for more info
  • [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
  • [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
  • [Macro] Macro.extract_args/1 is deprecated in favor of Macro.decompose_call/1

Backwards incompatible changes

  • [Enum] Behaviour of Enum.drop/2 and Enum.take/2 has been switched when given negative counts
  • [Enum] Behaviour of Enum.zip/2 has been changed to stop as soon as the first enumerable finishes
  • [Enum] Enumerable.reduce/3 protocol has changed to support suspension. Please see Enumerable docs for more info
  • [Mix] Require :escript_main_module to be set before generating escripts
  • [Range] Range.Iterator protocol has changed in order to work with the new Enumerable.reduce/3. Please see Range.Iterator docs for more info
  • [Stream] The Stream.Lazy structure has changed to accumulate functions and accumulators as we go (its inspected representation has also changed)
  • [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