Skip to content

v0.13.0

Pre-release
Pre-release
Compare
Choose a tag to compare
@josevalim josevalim released this 20 Apr 14:26

Enhancements

  • [Base] Add Base module which does conversions to bases 16, 32, hex32, 64 and url64
  • [Code] Add Code.eval_file/2
  • [Collectable] Add the Collectable protocol that empowers Enum.into/2 and Stream.into/2 and the :into option in comprehensions
  • [Collectable] Implement Collectable for lists, dicts, bitstrings, functions and provide both File.Stream and IO.Stream
  • [EEx] Add handle_body/1 callback to EEx.Engine
  • [Enum] Add Enum.group_by/2, Enum.into/2, Enum.into/3, Enum.traverse/2 and Enum.sum/2
  • [ExUnit] Randomize cases and tests suite runs, allow seed configuration and the --seed flag via mix test
  • [ExUnit] Support --only for filtering when running tests with mix test
  • [ExUnit] Raise an error if another capture_io process already captured the device
  • [ExUnit] Improve formatter to show source code and rely on lhs and rhs (instead of expected and actual)
  • [IEx] Allow prompt configuration with the :prompt option
  • [IEx] Use werl on Windows
  • [Kernel] Support ERL_PATH in bin/elixir
  • [Kernel] Support interpolation in keyword syntax
  • [Map] Add a Map module and support 17.0 maps and structs
  • [Mix] Add dependency option :only to specify the dependency environment. mix deps.get and mix deps.update works accross all environment unless --only is specified
  • [Mix] Add Mix.Shell.prompt/1
  • [Mix] Ensure the project is compiled in case Mix' CLI cannot find a task
  • [Node] Add Node.ping/1
  • [Process] Include Process.send/3 and support the --gen-debug option
  • [Regex] Regexes no longer need the "g" option when there is a need to use named captures
  • [Stream] Add Stream.into/2 and Stream.into/3
  • [StringIO] Add a StringIO module that allows a String to be used as IO device
  • [System] Add System.delete_env/1 to remove a variable from the environment

Bug fixes

  • [CLI] Ensure --app is handled as an atom before processing
  • [ExUnit] Ensure ExUnit.Assertions does not emit compiler warnings for assert_receive
  • [Kernel] Ensure the same pid is not queued twice in the parallel compiler
  • [Macro] Macro.to_string/2 considers proper precedence when translating !(foo > bar) into a string
  • [Mix] Automatically recompile on outdated Elixir version and show proper error messages
  • [Mix] Ensure generated .app file includes core dependencies
  • [Mix] Allow a dependency with no SCM to be overridden
  • [Mix] Allow queries in mix local.install URL
  • [OptionParser] Do not recognize undefined aliases as switches

Deprecations

  • [Dict] Dict.empty/1, Dict.new/1 and Dict.new/2 are deprecated
  • [Exception] Exception.normalize/1 is deprecated in favor of Exception.normalize/2
  • [Kernel] lc and bc comprehensions are deprecated in favor of for (this is a soft deprecation, no warning will be emitted)
  • [ListDict] ListDict is deprecated in favor of Map (this is a soft deprecation, no warning will be emitted)
  • [Record] defrecord/2, defrecordp/3, is_record/1 and is_record/2 macros in Kernel are deprecated. Instead, use the new macros and API defined in the Record module (this is a soft deprecation, no warnings will be emitted)

Backwards incompatible changes

  • [ExUnit] Formatters are now required to be a GenEvent and ExUnit.run/2 returns a map with results