Elixir release

0.10.2

Change breakdown

Organization at a glance

Detailed changelog

Enhancement

53 changes

Tool: Elixir Module: CLI

Add --verbose to elixirc, which now is non-verbose by default

Tool: Elixir Module: Dict

Add Dict.Behaviour as a convenience to create your own dictionaries

Tool: Elixir Module: 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

Tool: Elixir Module: Enum

Support negative indices in Enum.at/fetch/fetch!

Tool: Elixir Module: ExUnit

Show failures on CLIFormatter as soon as they pop up

Tool: Elixir Module: IEx

Allow for strings in h helper

Tool: Elixir Module: IEx

Helpers r and c can handle erlang sources

Tool: Elixir Module: Integer

Add odd?/1 and even?/1

Tool: Elixir Module: IO

Added support to specifying a number of bytes to stream to IO.stream, IO.binstream, File.stream! and File.binstream!

Tool: Elixir Module: Kernel

Include file and line on error report for overriding an existing function/macro

Tool: Elixir Module: Kernel

Convert external functions into quoted expressions. This allows record fields to contain functions as long as they point to an &Mod.fun/arity

Tool: Elixir Module: Kernel

Allow foo? and bar! as valid variable names

Tool: Elixir Module: List

Add List.replace_at/3

Tool: Elixir Module: Macro

Improve printing of the access protocol on Macro.to_string/1

Tool: Elixir Module: Macro

Add Macro.to_string/2 to support annotations on the converted string

Tool: Elixir Module: Mix

Automatically recompile a project if the Elixir version changes

Tool: Elixir Module: Path

Add Path.relative_to_cwd/2

Tool: Elixir Module: Regex

Allow erlang re options when compiling Elixir regexes

Tool: Elixir Module: Stream

Add Stream.concat/1, Stream.concat/2 and Stream.flat_map/2

Tool: Elixir Module: String

Add regex pattern support to String.replace/3

Tool: Elixir Module: String

Add String.ljust/2, String.rjust/2, String.ljust/3 and String.rjust/3

Tool: Elixir Module: URI

URI.parse/1 supports IPv6 addresses

Tool: Elixir Module: Behaviour

Do not compile behaviour docs if docs are disabled on compilation

Tool: Elixir Module: ExUnit

Doctests no longer eat too much space and provides detailed reports for poorly indented lines

Tool: Elixir Module: File

Fix a bug where File.touch(file, datetime) was not setting the proper datetime when the file did not exist

Tool: Elixir Module: Kernel

Limit inspect results to 50 items by default to avoid printing too much data

Tool: Elixir Module: Kernel

Return a readable error on oversized atoms

Tool: Elixir Module: Kernel

Allow functions ending with ? or ! to be captured

Tool: Elixir Module: Kernel

Fix default shutdown of child supervisors to :infinity

Tool: Elixir Module: Kernel

Fix regression when calling a function/macro ending with bang, followed by do/end blocks

Tool: Elixir Module: List

Fix bug on List.insert_at/3 that added the item at the wrong position for negative indexes

Tool: Elixir Module: Macro

Macro.escape/2 can now escape improper lists

Tool: Elixir Module: Mix

Fix Mix.Version matching on pre-release info

Tool: Elixir Module: Mix

Ensure watch_exts trigger full recompilation on change with mix compile

Tool: Elixir Module: Mix

Fix regression on mix clean --all

Tool: Elixir Module: String

String.strip/2 now supports removing unicode characters

Tool: Elixir Module: String

String.slice/3 still returns the proper result when there is no length to be extracted

Tool: Elixir Module: System

System.get_env/0 now returns a list of tuples as previously advertised

Tool: Elixir Module: Dict

Dict.update/3 is deprecated in favor of Dict.update!/3

Tool: Elixir Module: Enum

Enum.min/2 and Enum.max/2 are deprecated in favor of Enum.min_by/2 and Enum.max_by/2

Tool: Elixir Module: Enum

Enum.join/2 and Enum.map_join/3 with a char list are deprecated

Tool: Elixir Module: IO

IO.stream(device) and IO.binstream(device) are deprecated in favor of IO.stream(device, :line) and IO.binstream(device, :line)

Tool: Elixir Module: 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

Tool: Elixir Module: Kernel

to_binary/1 is deprecated in favor of to_string/1

Tool: Elixir Module: Kernel

Deprecate def/4 and friends in favor of def/2 with unquote and friends

Tool: Elixir Module: Kernel

Deprecate %b and %B in favor of %s and %S

Tool: Elixir Module: List

List.concat/2 is deprecated in favor of Enum.concat/2

Tool: Elixir Module: Macro

Macro.unescape_binary/1 and Macro.unescape_binary/2 are deprecated in favor of Macro.unescape_string/1 and Macro.unescape_string/2

Tool: Elixir Module: Mix

:umbrella option for umbrella paths has been deprecated in favor of :in_umbrella

Tool: Elixir Module: IO

IO functions now only accept iolists as arguments

Tool: Elixir Module: Kernel

Binary.Chars was renamed to String.Chars

Tool: Elixir Module: Kernel

The previous ambiguous import syntax import :functions, Foo was removed in favor of import Foo, only: :functions

Tool: Elixir Module: OptionParser

parse and parse_head now returns a tuple with three elements instead of two