Skip to content

Releases: elixir-lang/elixir

v0.10.2

03 Sep 18:08
Compare
Choose a tag to compare
v0.10.2 Pre-release
Pre-release
Enhancements
  • [CLI] Add --verbose to elixirc, which now is non-verbose by default
  • [Dict] Add Dict.Behaviour as a convenience to create your own dictionaries
  • [Enum] Add Enum.split/2, Enum.reduce/2, Enum.flat_map/2, Enum.chunks/2, Enum.chunks/4, Enum.chunks_by/2, Enum.concat/1 and Enum.concat/2
  • [Enum] Support negative indices in Enum.at/fetch/fetch!
  • [ExUnit] Show failures on CLIFormatter as soon as they pop up
  • [IEx] Allow for strings in h helper
  • [IEx] Helpers r and c can handle erlang sources
  • [Integer] Add odd?/1 and even?/1
  • [IO] Added support to specifying a number of bytes to stream to IO.stream, IO.binstream, File.stream! and File.binstream!
  • [Kernel] Include file and line on error report for overriding an existing function/macro
  • [Kernel] Convert external functions into quoted expressions. This allows record fields to contain functions as long as they point to an &Mod.fun/arity
  • [Kernel] Allow foo? and bar! as valid variable names
  • [List] Add List.replace_at/3
  • [Macro] Improve printing of the access protocol on Macro.to_string/1
  • [Macro] Add Macro.to_string/2 to support annotations on the converted string
  • [Mix] Automatically recompile a project if the Elixir version changes
  • [Path] Add Path.relative_to_cwd/2
  • [Regex] Allow erlang re options when compiling Elixir regexes
  • [Stream] Add Stream.concat/1, Stream.concat/2 and Stream.flat_map/2
  • [String] Add regex pattern support to String.replace/3
  • [String] Add String.ljust/2, String.rjust/2, String.ljust/3 and String.rjust/3
  • [URI] URI.parse/1 supports IPv6 addresses
Bug fixes
  • [Behaviour] Do not compile behaviour docs if docs are disabled on compilation
  • [ExUnit] Doctests no longer eat too much space and provides detailed reports for poorly indented lines
  • [File] Fix a bug where File.touch(file, datetime) was not setting the proper datetime when the file did not exist
  • [Kernel] Limit inspect results to 50 items by default to avoid printing too much data
  • [Kernel] Return a readable error on oversized atoms
  • [Kernel] Allow functions ending with ? or ! to be captured
  • [Kernel] Fix default shutdown of child supervisors to :infinity
  • [Kernel] Fix regression when calling a function/macro ending with bang, followed by do/end blocks
  • [List] Fix bug on List.insert_at/3 that added the item at the wrong position for negative indexes
  • [Macro] Macro.escape/2 can now escape improper lists
  • [Mix] Fix Mix.Version matching on pre-release info
  • [Mix] Ensure watch_exts trigger full recompilation on change with mix compile
  • [Mix] Fix regression on mix clean --all
  • [String] String.strip/2 now supports removing unicode characters
  • [String] String.slice/3 still returns the proper result when there is no length to be extracted
  • [System] System.get_env/0 now returns a list of tuples as previously advertised
Deprecations
  • [Dict] Dict.update/3 is deprecated in favor of Dict.update!/3
  • [Enum] Enum.min/2 and Enum.max/2 are deprecated in favor of Enum.min_by/2 and Enum.max_by/2
  • [Enum] Enum.join/2 and Enum.map_join/3 with a char list are deprecated
  • [IO] IO.stream(device) and IO.binstream(device) are deprecated in favor of IO.stream(device, :line) and IO.binstream(device, :line)
  • [Kernel] list_to_binary/1, binary_to_list/1 and binary_to_list/3 are deprecated in favor of String.from_char_list!/1 and String.to_char_list!/1 for characters and :binary.list_to_bin/1, :binary.bin_to_list/1 and :binary.bin_to_list/3 for bytes
  • [Kernel] to_binary/1 is deprecated in favor of to_string/1
  • [Kernel] Deprecate def/4 and friends in favor of def/2 with unquote and friends
  • [Kernel] Deprecate %b and %B in favor of %s and %S
  • [List] List.concat/2 is deprecated in favor of Enum.concat/2
  • [Macro] Macro.unescape_binary/1 and Macro.unescape_binary/2 are deprecated in favor of Macro.unescape_string/1 and Macro.unescape_string/2
  • [Mix] :umbrella option for umbrella paths has been deprecated in favor of :in_umbrella
Backwards incompatible changes
  • [IO] IO functions now only accept iolists as arguments
  • [Kernel] Binary.Chars was renamed to String.Chars
  • [Kernel] The previous ambiguous import syntax import :functions, Foo was removed in favor of import Foo, only: :functions
  • [OptionParser] parse and parse_head now returns a tuple with three elements instead of two

v0.10.1

03 Aug 16:24
Compare
Choose a tag to compare
v0.10.1 Pre-release
Pre-release
Enhancements
  • [Behaviour] Add support for defmacrocallback/1
  • [Enum] Add Enum.shuffle/1
  • [ExUnit] The :trace option now also reports run time for each test
  • [ExUnit] Add support for :color to enable/disable ANSI coloring
  • [IEx] Add the clear helper to clear the screen.
  • [Kernel] Add the capture operator &
  • [Kernel] Add support for GenFSM.Behaviour
  • [Kernel] Functions now points to the module and function they were defined when inspected
  • [Kernel] A documentation attached to a function that is never defined now prints warnings
  • [List] Add List.keysort/2
  • [Mix] :test_helper project configuration did not affect mix test and was therefore removed. A test/test_helper.exs file is still necessary albeit it doesn't need to be automatically required in each test file
  • [Mix] Add manifests for yecc, leex and Erlang compilers, making it easier to detect dependencies in between compilers and providing a more useful clean behaviour
  • [Mix] mix help now outputs information about the default mix task
  • [Mix] Add --no-deps-check option to mix run, mix compile and friends to not check dependency status
  • [Mix] Add support for MIX_GIT_FORCE_HTTPS system environment that forces HTTPS for known providers, useful when the regular git port is blocked. This configuration does not affect the mix.lock results
  • [Mix] Allow coverage tool to be pluggable via the :test_coverage configuration
  • [Mix] Add mix cmd as a convenience to run a command recursively in child apps in an umbrella application
  • [Mix] Support umbrella: true in dependencies as a convenience for setting up umbrella path deps
  • [Mix] mix run now behaves closer to the elixir command and properly mangles the ARGV
  • [String] Add Regex.scan/3 now supports capturing groups
  • [String] Add String.reverse/1
Bug fix
  • [Behaviour] Ensure callbacks are stored in the definition order
  • [CLI] Speed up boot time on Elixir .bat files
  • [IEx] Reduce cases where IEx parser can get stuck
  • [Kernel] Improve error messages when the use of an operator has no effect
  • [Kernel] Fix a bug where warnings were not being generated when imported macros conflicted with local functions or macros
  • [Kernel] Document that on_definition can only be a function as it is evaluated inside the function context
  • [Kernel] Ensure %w sigils with no interpolation are fully expanded at compile time
  • [Mix] mix deps.update, mix deps.clean and mix deps.unlock no longer change all dependencies unless --all is given
  • [Mix] Always run mix loadpaths on mix app.start, even if --no-compile is given
  • [OptionParser] Do not add boolean flags to the end result if they were not given
  • [OptionParser] Do not parse non-boolean flags as booleans when true or false are given
  • [OptionParser] Ensure :keep and :integer|:float can be given together as options
  • [OptionParser] Ensure --no-flag sets :flag to false when :flag is a registered boolean switch
Deprecations
  • [Kernel] function(Mod.fun/arity) and function(fun/arity) are deprecated in favor of &Mod.fun/arity and &fun/arity
  • [Kernel] function/3 is deprecated in favor of Module.function/3
  • [Kernel] Kernel.ParallelCompiler now receives a set of callbacks instead of a single one
  • [Mix] :test_coverage option now expect keywords arguments and the --cover flag is now treated as a boolean
Backwards incompatible changes
  • [Regex] Regex.scan/3 now always returns a list of lists, normalizing the result, instead of list with mixed lists and binaries
  • [System] System.halt/2 was removed since the current Erlang implementation of such function is bugged

v0.10.0

15 Jul 09:37
Compare
Choose a tag to compare
v0.10.0 Pre-release
Pre-release
Enhancements
  • [ExUnit] Support trace: true option which gives detailed reporting on test runs
  • [HashDict] Optimize HashDict to store pairs in a cons cell reducing storage per key by half
  • [Kernel] Add pretty printing support for inspect
  • [Kernel] Add document algebra library used as the foundation for pretty printing
  • [Kernel] Add defrecordp/3 that enables specifying the first element of the tuple
  • [Kernel] Add the Set API and a hash based implementation via HashSet
  • [Kernel] Add Stream as composable, lazy-enumerables
  • [Mix] mix archive now includes the version of the generated archive
  • [Mix] Mix now requires explicit dependency overriding to be given with override: true
  • [Mix] Projects can now define an :elixir key to outline supported Elixir versions
  • [Typespec] Improve error messages to contain file, line and the typespec itself
Bug fix
  • [CLI] Elixir can now run on Unix directories with : in its path
  • [Kernel] match?/2 does not leak variables to outer scope
  • [Kernel] Keep head|tail format when splicing at the tail
  • [Kernel] Ensure variables defined in the module body are not passed to callbacks
  • [Mix] On dependencies conflict, show from where each source is coming from
  • [Mix] Empty projects no longer leave empty ebin files on mix compile
  • [Module] Calling Module.register_attribute/3 no longer automatically changes it to persisted or accumulated
Deprecations
  • [Enum] Receiving the index of iteration in Enum.map/2 and Enum.each/2 is deprecated in favor of Stream.with_index/1
  • [File] File.iterator/1 and File.biniterator/1 are deprecated in favor of IO.stream/1 and IO.binstream/1
  • [File] File.iterator!/2 and File.biniterator!/2 are deprecated in favor of File.stream!/2 and File.binstream!/2
  • [Kernel] Deprecate recently added quote binding: ... in favor of the clearer quote bind_quoted: ...
  • [Kernel] Deprecate Kernel.float/1 in favor of a explicit conversion
  • [Mix] Deprecate mix run EXPR in favor of mix run -e EXPR
  • [Record] Record.__index__/2 deprecated in favor of Record.__record__(:index, key)
Backwards incompatible changes
  • [Kernel] The Binary.Inspect protocol has been renamed to Inspect

  • [Kernel] Tighten up the grammar rules regarding parentheses omission, previously the examples below would compile but now they raise an error message:

        do_something 1, is_list [], 3
        [1, is_atom :foo, 3]
    
  • [Module] Calling Module.register_attribute/3 no longer automatically changes it to persisted or accumulated

  • [Record] First element of a record via defrecordp is now the defrecordp name and no longer the current atom

  • [URI] Remove custom URI parsers in favor of URI.default_port/2

v0.9.3

01 Sep 15:44
Compare
Choose a tag to compare
v0.9.3 Pre-release
Pre-release
Release v0.9.3

v0.9.2

01 Sep 15:44
Compare
Choose a tag to compare
v0.9.2 Pre-release
Pre-release
Release v0.9.2

v0.9.1

01 Sep 15:44
Compare
Choose a tag to compare
v0.9.1 Pre-release
Pre-release
Release v0.9.1

v0.9.0

01 Sep 15:44
Compare
Choose a tag to compare
v0.9.0 Pre-release
Pre-release
Release v0.9.0

v0.8.3

01 Sep 15:44
Compare
Choose a tag to compare
v0.8.3 Pre-release
Pre-release
Release v0.8.3

v0.8.2

01 Sep 15:44
Compare
Choose a tag to compare
v0.8.2 Pre-release
Pre-release
Release v0.8.2

v0.8.1

01 Sep 15:44
Compare
Choose a tag to compare
v0.8.1 Pre-release
Pre-release
Release v0.8.1