Skip to content

v0.13.3

Pre-release
Pre-release
Compare
Choose a tag to compare
@josevalim josevalim released this 24 May 09:03

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 and Macro.postwalk/2/3
  • [Kernel] GenEvent, GenServer, Supervisor, Agent and Task modules added
  • [Kernel] Make deprecations compiler warnings to avoid the same deprecation being printed multiple times

Bug fixes

  • [Enum] Fix Enum.join/2 and Enum.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 to ELIXIR_ERL_OPTIONS for consistency with ERL_COMPILER_OPTIONS
  • [OptionParser] Parse - as a plain argument
  • [OptionParser] -- is always removed from argument list on parse/2 and when it is the leading entry on parse_head/2
  • [Regex] Properly escape regex (previously regex controls were double escaped)

Soft deprecations (no warnings emitted)

  • [Dict] Dict.Behaviour is deprecated in favor of Dict
  • [Kernel] Application.Behaviour, GenEvent.Behaviour, GenServer.Behaviour and Supervisor.Behaviour are deprecated in favor of Application, GenEvent, GenServer and Supervisor
  • [Kernel] defexception/3 is deprecated in favor of defexception/1
  • [Kernel] raise/3 is deprecated in favor of reraise/2
  • [Kernel] set_elem/3 is deprecated in favor of put_elem/3

Soft deprecations for conversions (no warnings emitted)

  • [Kernel] atom_to_binary/1 and atom_to_list/1 are deprecated in favor of Atom.to_string/1 and Atom.to_char_list/1
  • [Kernel] bitstring_to_list/1 and list_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 and binary_to_integer/2 are deprecated in favor of conversion functions in String
  • [Kernel] float_to_binary/* and float_to_list/* are deprecated in favor of Float.to_string/* and Float.to_char_list/*
  • [Kernel] integer_to_binary/* and integer_to_list/* are deprecated in favor of Integer.to_string/* and Integer.to_char_list/*
  • [Kernel] iodata_to_binary/1 and iodata_length/1 are deprecated IO.iodata_to_binary/1 and IO.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 and list_to_tuple/1 are deprecated in favor of conversion functions in List
  • [Kernel] tuple_to_list/1 is deprecated in favor of Tuple.to_list/1
  • [List] List.from_char_data/1 and List.from_char_data!/1 deprecated in favor of String.to_char_list/1
  • [String] String.from_char_data/1 and String.from_char_data!/1 deprecated in favor of List.to_string/1

Deprecations

  • [Kernel] is_exception/1, is_record/1 and is_record/2 are deprecated in favor of Exception.exception?1, Record.record?/1 and Record.record?/2
  • [Kernel] defrecord/3 is deprecated in favor of structs
  • [Kernel] :hygiene in quote is deprecated
  • [Mix] Mix.project/0 is deprecated in favor of Mix.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 and Process.self/0 are deprecated in favor of the ones in Kernel

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