35 KiB
v0.10.2-dev
-
enhancements
- [CLI] Add
--verboseto elixirc, which now is non-verbose by default - [Dict] Add
Dict.Behaviouras a convenience to create your own dictionaries - [Enum] Add
Enum.split/2,Enum.reduce/2,Enum.flat_map/2,Enum.chunks/2,Enum.chunks/4andEnum.chunks_by/2 - [ExUnit] Show failures on CLIFormatter as soon as they pop up
- [IEx] Allow for strings in
hhelper - [IEx] Helpers
randccan handle erlang sources - [IO] Added support to specifying a number of bytes to stream to
IO.stream,IO.binstream,File.stream!andFile.binstream! - [Kernel] Include file and line on error report for overriding an existing function/macro
- [Kernel] Add
is_odd/1andis_even/1 - [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?andbar!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/2to support annotations on the converted string - [Mix] Automatically recompile a project if the Elixir version changes
- [Path] Add
Path.relative_to_cwd - [Regex] Allow erlang
reoptions when compiling Elixir regexes - [String] Add regex pattern support to
String.replace/3 - [String] Add
String.ljust/2,String.rjust/2,String.ljust/3andString.rjust/3
- [CLI] Add
-
bug fix
- [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
inspectresults 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/endblocks - [List] Fix bug on
List.insert_at/3that added the item at the wrong position for negative indexes - [Macro]
Macro.escape/2can now escape improper lists - [Mix] Fix
Mix.Versionmatching on pre-release info - [Mix] Ensure
watch_extstrigger full recompilation on change withmix compile - [Mix] Fix regression on
mix clean --all - [String]
String.strip/2now supports removing unicode characters - [String]
String.slice/3still returns the proper result when there is no length to be extracted - [System]
System.get_env/0now returns a list of tuples as previously advertised
-
deprecations
- [Dict]
Dict.update/3is deprecated in favor ofDict.update!/3 - [Enum]
Enum.min/2andEnum.max/2are deprecated in favor ofEnum.min_by/2andEnum.max_by/2 - [Enum]
Enum.join/2andEnum.map_join/3with a char list are deprecated - [IO]
IO.stream(device)andIO.binstream(device)are deprecated in favor ofIO.stream(device, :line)andIO.binstream(device, :line) - [Kernel]
list_to_binary/1,binary_to_list/1andbinary_to_list/3are deprecated in favor ofString.from_char_list!/1andString.to_char_list!/1for characters and:binary.list_to_bin/1,:binary.bin_to_list/1and:binary.bin_to_list/3for bytes - [Kernel]
to_binary/1is deprecated in favor ofto_string/1 - [Kernel] Deprecate
def/4and friends in favor ofdef/2with unquote and friends - [Macro]
Macro.unescape_binary/1andMacro.unescape_binary/2are deprecated in favor ofMacro.unescape_string/1andMacro.unescape_string/2 - [Mix]
:umbrellaoption for umbrella paths has been deprecated in favor of:in_umbrella
- [Dict]
-
backwards incompatible changes
- [Kernel]
Binary.Charswas renamed toString.Chars - [Kernel] The previous ambiguous import syntax
import :functions, Foowas removed in favor ofimport Foo, only: :functions - [OptionParser]
parseandparse_headnow returns a tuple with three elements instead of two
- [Kernel]
v0.10.1 (2013-08-03)
-
enhancements
- [Behaviour] Add support for
defmacrocallback/1 - [Enum] Add
Enum.shuffle/1 - [ExUnit] The
:traceoption now also reports run time for each test - [ExUnit] Add support for
:colorto enable/disable ANSI coloring - [IEx] Add the
clearhelper 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_helperproject configuration did not affectmix testand was therefore removed. Atest/test_helper.exsfile 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 helpnow outputs information about the default mix task - [Mix] Add
--no-deps-checkoption tomix run,mix compileand friends to not check dependency status - [Mix] Add support for
MIX_GIT_FORCE_HTTPSsystem environment that forces HTTPS for known providers, useful when the regular git port is blocked. This configuration does not affect themix.lockresults - [Mix] Allow coverage tool to be pluggable via the
:test_coverageconfiguration - [Mix] Add
mix cmdas a convenience to run a command recursively in child apps in an umbrella application - [Mix] Support
umbrella: truein dependencies as a convenience for setting up umbrella path deps - [Mix]
mix runnow behaves closer to theelixircommand and properly mangles the ARGV - [String] Add
Regex.scan/3now supports capturing groups - [String] Add
String.reverse/1
- [Behaviour] Add support for
-
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_definitioncan only be a function as it is evaluated inside the function context - [Kernel] Ensure
%wsigils with no interpolation are fully expanded at compile time - [Mix]
mix deps.update,mix deps.cleanandmix deps.unlockno longer change all dependencies unless--allis given - [Mix] Always run
mix loadpathsonmix app.start, even if--no-compileis 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
:keepand:integer|:floatcan be given together as options - [OptionParser] Ensure
--no-flagsets:flagto false when:flagis a registered boolean switch
-
deprecations
- [Kernel]
function(Mod.fun/arity)andfunction(fun/arity)are deprecated in favor of&Mod.fun/arityand&fun/arity - [Kernel]
function/3is deprecated in favor ofModule.function/3 - [Kernel]
Kernel.ParallelCompilernow receives a set of callbacks instead of a single one - [Mix]
:test_coverageoption now expect keywords arguments and the--coverflag is now treated as a boolean
- [Kernel]
-
backwards incompatible changes
- [Regex]
Regex.scan/3now always returns a list of lists, normalizing the result, instead of list with mixed lists and binaries - [System]
System.halt/2was removed since the current Erlang implementation of such function is bugged
- [Regex]
v0.10.0 (2013-07-15)
-
enhancements
- [ExUnit] Support
trace: trueoption which gives detailed reporting on test runs - [HashDict] Optimize
HashDictto 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/3that enables specifying the first element of the tuple - [Kernel] Add the
SetAPI and a hash based implementation viaHashSet - [Kernel] Add
Streamas composable, lazy-enumerables - [Mix]
mix archivenow 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
:elixirkey to outline supported Elixir versions - [Typespec] Improve error messages to contain file, line and the typespec itself
- [ExUnit] Support
-
bug fix
- [CLI] Elixir can now run on Unix directories with
:in its path - [Kernel]
match?/2does not leak variables to outer scope - [Kernel] Keep
head|tailformat 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/3no longer automatically changes it to persisted or accumulated
- [CLI] Elixir can now run on Unix directories with
-
deprecations
- [Enum] Receiving the index of iteration in
Enum.map/2andEnum.each/2is deprecated in favor ofStream.with_index/1 - [File]
File.iterator/1andFile.biniterator/1are deprecated in favor ofIO.stream/1andIO.binstream/1 - [File]
File.iterator!/2andFile.biniterator!/2are deprecated in favor ofFile.stream!/2andFile.binstream!/2 - [Kernel] Deprecate recently added
quote binding: ...in favor of the clearerquote bind_quoted: ... - [Kernel] Deprecate
Kernel.float/1in favor of a explicit conversion - [Mix] Deprecate
mix run EXPRin favor ofmix run -e EXPR - [Record]
Record.__index__/2deprecated in favor ofRecord.__record__(:index, key)
- [Enum] Receiving the index of iteration in
-
backwards incompatible changes
-
[Kernel] The
Binary.Inspectprotocol has been renamed toInspect -
[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/3no longer automatically changes it to persisted or accumulated -
[Record] First element of a record via
defrecordpis now thedefrecordpname and no longer the current atom -
[URI] Remove custom URI parsers in favor of
URI.default_port/2
-
v0.9.3 (2013-06-23)
-
enhancements
- [File] Add
File.chgrp,File.chmodandFile.chown - [Kernel] Add
--warnings-as-errorsto Elixir's compiler options - [Kernel] Print warnings to stderr
- [Kernel] Warn on undefined module attributes
- [Kernel] Emit warning for
x in []in guards - [Kernel] Add
binding/0andbinding/1for retrieving bindings - [Kernel]
quotenow allows a binding as an option - [Macro] Add
Macro.expand_once/2andMacro.expand_all/2 - [Mix] Implement
Mix.Versionfor basic versioning semantics - [Mix] Support creation and installation of archives (.ez files)
- [Mix]
github: ...shortcut now uses the fastergitschema instead ofhttps - [Record] Allow types to be given to
defrecordp
- [File] Add
-
bug fix
- [Kernel] The elixir executable on Windows now supports the same options as the UNIX one
- [Kernel] Improve error messages on default clauses clash
- [Kernel]
__MODULE__.Foonow returnsFoowhen outside of a Module - [Kernel] Improve error messages when default clauses from different definitions collide
- [Kernel]
^xvariables should always refer to the value before the expression - [Kernel] Allow
(x, y) when zin function clauses and try expressions - [Mix] Mix now properly evaluates rebar scripts
-
deprecations
- [Code]
Code.string_to_ast/1has been deprecated in favor ofCode.string_to_quoted/1 - [Macro]
Macro.to_binary/1has been deprecated in favor ofMacro.to_string/1 - [Typespec] Deprecate
(fun(...) -> ...)in favor of(... -> ...)
- [Code]
-
backwards incompatible changes
- [Bitwise] Precedence of operators used by the Bitwise module were changed, check
elixir_parser.yrlfor more information - [File]
rm_rfandcp_rnow returns a tuple with three elements on failures - [Kernel] The quoted representation for
->clauses changed from a tuple with two elements to a tuple with three elements to support metadata - [Kernel] Sigils now dispatch to
sigil_$instead of__$__where$is the sigil caracter - [Macro]
Macro.expand/2now expands until final form. Although this is backwards incompatible, it is very likely you do not need to change your code, since expansion until its final form is recommended, particularly if you are expecting an atom out of it - [Mix] No longer support beam files on
mix local
- [Bitwise] Precedence of operators used by the Bitwise module were changed, check
v0.9.2 (2013-06-13)
-
enhancements
- [ExUnit]
capture_ionow captures prompt by default - [Mix] Automatically import git dependencies from Rebar
- [Mix] Support for dependencies directly from the umbrella application
- [Regex] Add
Regex.escape - [String] Add
String.contains? - [URI] Implement
Binary.Chars(akato_binary) forURI.Info
- [ExUnit]
-
bug fix
- [HashDict] Ensure HashDict uses exact match throughout its implementation
- [IEx] Do not interpret ANSI codes in IEx results
- [IEx] Ensure
--cookieis set before accessing remote shell - [Kernel] Do not ignore nil when dispatching protocols to avoid infinite loops
- [Mix] Fix usage of shell expressions in
Mix.Shell.cmd - [Mix] Start the application by default on escripts
-
deprecations
- [Regex]
Regex.index/2is deprecated in favorRegex.run/3 - [Kernel]
superno longer supports implicit arguments
- [Regex]
-
backwards incompatible changes
- [Kernel] The
=~operator now returns true or false instead of an index
- [Kernel] The
v0.9.1 (2013-05-30)
-
enhancements
- [IEx] Limit the number of entries kept in history and allow it to be configured
- [Kernel] Add
String.start_with?andString.end_with? - [Typespec] Allow keywords, e.g.
[foo: integer, bar: boolean | module], in typespecs
-
bug fix
- [Dict]
Enum.to_listandDict.to_listnow return the same results for dicts - [IEx] Enable shell customization via the
IEx.Optionsmodule - [Kernel] Fix a bug where
unquote_splicingdid not work on the left side of a stab op - [Kernel] Unused functions with cyclic dependencies are now also warned as unused
- [Mix] Fix a bug where
mix deps.getwas not retrieving nested dependencies - [Record] Fix a bug where nested records cannot be defined
- [Record] Fix a bug where a record named Record cannot be defined
- [Dict]
v0.9.0 (2013-05-23)
-
enhancements
- [ExUnit]
ExUnit.CaptureIOnow accepts an input to be used during capture - [IEx] Add support for .iex files that are loaded during shell's boot process
- [IEx] Add
import_file/1helper
- [ExUnit]
-
backwards incompatible changes
- [Enum]
Enum.Iteratorwas replaced by the more composable and functionalEnumerableprotocol which supports reductions - [File]
File.iterator/1andFile.biniterator/1have been removed in favor of the safeFile.iterator!/1andFile.biniterator!/1ones - [Kernel] Erlang R15 is no longer supported
- [Kernel] Elixir modules are now represented as
Elixir.ModuleName(using.instead of-as separator)
- [Enum]
v0.8.3 (2013-05-22)
-
enhancements
- [CLI] Flags
-pand-prfails if pattern match no files - [CLI] Support
--hiddenand--cookieflags for distributed Erlang - [Enum] Add
Enum.to_list/1,Enum.member?/2,Enum.uniq/2,Enum.max/1,Enum.max/2,Enum.min/1andEnum.min/2 - [ExUnit] Add
ExUnit.CaptureIOfor IO capturing during tests - [ExUnit] Consider load time on ExUnit time reports
- [IEx] Support
lswith colored output - [IEx] Add
#iex:breakto break incomplete expressions - [Kernel] Add
Enum.at,Enum.fetchandEnum.fetch! - [Kernel] Add
String.to_integerandString.to_float - [Kernel] Add
Dict.take,Dict.drop,Dict.split,Dict.popandDict.fetch! - [Kernel] Many optimizations for code compilation
- [Kernel]
incan be used with right side expression outside guards - [Kernel] Add
Node.get_cookie/0andNode.set_cookie/2 - [Kernel] Add
__DIR__ - [Kernel] Expand macros and attributes on quote, import, alias and require
- [Kernel] Improve warnings related to default arguments
- [Keyword] Add
Keyword.delete_first/2 - [Mix] Add
local.rebarto download a local copy of rebar, and changedeps.compileto use it if needed - [Mix] Support umbrella applications
- [Mix] Load beam files available at
MIX_PATHon CLI usage - [String] Add
String.valid?andString.valid_character?
- [CLI] Flags
-
bug fix
- [ExUnit] Handle exit messages from in ExUnit
- [ExUnit] Failures on ExUnit's setup_all now invalidates all tests
- [Kernel] Ensure we don't splice keyword args unecessarily
- [Kernel] Private functions used by private macros no longer emit an unused warning
- [Kernel] Ensure Elixir won't trip on empty receive blocks
- [Kernel]
String.slicenow returns an empty string when out of range by 1 - [Mix] Generate manifest files after compilation to avoid depending on directory timestamps and to remove unused .beam files
- [Path]
Path.expand/2now correctly expands~in the second argument - [Regex] Fix badmatch with
Regex.captures(%r/(.)/g, "cat") - [URI] Downcase host and scheme and URIs
-
deprecations
- [Code]
Code.evalis deprecated in favor ofCode.eval_string - [Exception]
Exception.format_entryis deprecated in favor ofException.format_stacktrace_entry - [ExUnit]
assert left inlist rightis deprecated in favor ofassert left in right - [IO]
IO.getbis deprecated in favor ofIO.getn - [List]
List.member?/2is deprecated in favor ofEnum.member?/2 - [Kernel]
var_contextin quote was deprecated in favor ofcontext - [Kernel]
Enum.at!andDict.get!is deprecated in favor ofEnum.fetch!andDict.fetch!
- [Code]
-
backwards incompatible changes
- [Dict]
List.Dictwas moved toListDict - [IO]
IO.gets,IO.getnand friends now return binaries when reading from stdio - [Kernel] Precedence of
|>has changed to lower to support constructs like1..5 |> Enum.to_list - [Mix]
mix escriptizenow receives arguments as binaries
- [Dict]
v0.8.2 (2013-04-20)
-
enhancements
- [ExUnit] Use ANSI escape codes in CLI output
- [ExUnit] Include suite run time on CLI results
- [ExUnit] Add support to doctests, allowing test cases to be generated from code samples
- [File] Add
File.lsandFile.ls! - [IEx] Support
pwdandcdhelpers - [Kernel] Better error reporting for invalid bitstring generators
- [Kernel] Improve meta-programming by allowing
unquoteondef/2,defp/2,defmacro/2anddefmacrop/2 - [Kernel] Add support to R16B new functions:
insert_elem/3anddelete_elem/2 - [Kernel] Import conflicts are now lazily handled. If two modules import the same functions, it will fail only if the function is invoked
- [Mix] Support
--coveron mix test andtest_coverageon Mixfiles - [Record] Each record now provides
Record.optionswith the options supported by itsnewandupdatefunctions
-
bug fix
- [Binary] inspect no longer escapes standalone hash
# - [IEx] The
hhelper can now retrieve docs for special forms - [Kernel] Record optimizations were not being triggered in functions inside the record module
- [Kernel] Aliases defined inside macros should be carried over
- [Kernel] Fix a bug where nested records could not use the Record[] syntax
- [Path] Fix a bug on
Path.expandwhen expanding paths starting with~
- [Binary] inspect no longer escapes standalone hash
-
deprecations
- [Kernel]
setelem/3is deprecated in favor ofset_elem/3 - [Kernel]
function(:is_atom, 1)is deprecated in favor offunction(is_atom/1)
- [Kernel]
-
backwards incompatible changes
-
[Kernel]
unquotenow only applies to the closest quote. If your code contains a quote that contains another quote that calls unquote, it will no longer work. UseMacro.escapeinstead and pass your quoted contents up in steps, for example:quote do quote do: unquote(x) endshould become:
quote do unquote(Macro.escape(x)) end
-
v0.8.1 (2013-02-17)
-
enhancements
- [ExUnit] Tests can now receive metadata set on setup/teardown callbacks
- [ExUnit] Add support to ExUnit.CaseTemplate to share callbacks in between test cases
- [IO] Add
IO.ANSIto make it easy to write ANSI escape codes - [Kernel] Better support for Unicode lists
- [Kernel] Reduce variables footprint in
case/receiveclauses - [Kernel] Disable native compilation when on_load attributes is present to work around an Erlang bug
- [Macro]
Macro.expandalso considers macros from the current__ENV__module - [Mix] Improve support for compilation of
.erlfiles - [Mix] Add support for compilation of
.yrland.xrlfiles - [OptionParser] Switches are now overridden by default but can be kept in order if chosen
- [Typespec] Better error reporting for invalid typespecs
-
bug fix
- [Mix] Allow Mix projects to be generated with just one letter
-
backwards incompatible changes
- [Kernel]
before_compileandafter_compilecallbacks now receive the environment as first argument instead of the module
- [Kernel]
-
deprecations
- [ExUnit] Explicitly defined test/setup/teardown functions are deprecated
- [Kernel] Tidy up and clean
quoteAPI - [Kernel] Old
:local.(args)syntax is deprecated - [Process]
Process.selfis deprecated in favorKernel.self
v0.8.0 (2013-01-28)
-
enhancements
- [Binary] Support
<< "string" :: utf8 >>as in Erlang - [Binary] Support
\aescape character in binaries - [Binary] Support syntax shortcut for specifying size in bit syntax
- [CLI] Support
--appoption to start an application and its dependencies - [Dict] Support
put_newinDictandKeyword - [Dict] Add
ListDictand a fasterHashDictimplementation - [ExUnit] ExUnit now supports multiple runs in the same process
- [ExUnit] Failures in ExUnit now shows a tailored stacktrace
- [ExUnit] Introduce
ExUnit.ExpectationErrorto provide better error messages - [Kernel] Introduce
Application.Behaviourto define application module callbacks - [Kernel] Introduce
Supervisor.Behaviourto define supervisors callbacks - [Kernel] More optimizations were added to Record handling
- [Kernel]
?\xand?\are now supported ways to retrieve a codepoint - [Kernel] Octal numbers can now be defined as
0777 - [Kernel] Improve macros hygiene regarding variables, aliases and imports
- [Mix] Mix now starts the current application before run, iex, test and friends
- [Mix] Mix now provides basic support for compiling
.erlfiles - [Mix]
mix escriptizeonly generates escript if necessary and accept--forceand--no-compileas options - [Path] Introduce
Pathmodule to hold filesystem paths related functions - [String] Add
String.capitalizeandString.slice - [System] Add
System.tmp_dir,System.cwdandSystem.user_home
- [Binary] Support
-
bug fix
- [Kernel]
importwithonlyaccepts functions starting with underscore - [String]
String.firstandString.lastreturn nil for empty binaries - [String]
String.rstripandString.lstripnow verify if argument is a binary - [Typespec] Support
...inside typespec's lists
- [Kernel]
-
backwards incompatible changes
- [Kernel] The AST now allows metadata to be attached to each node. This means the second item in the AST is no longer an integer (representing the line), but a keywords list. Code that relies on the line information from AST or that manually generate AST nodes need to be properly updated
-
deprecations
- [Dict] Deprecate
Binary.DictandOrdDictin favor ofHashDictandListDict - [File] Deprecate path related functions in favor of the module
Path - [Kernel] The
/>operator has been deprecated in favor of|> - [Mix]
Mix.Project.sourcesis deprecated in favor ofMix.Project.config_files - [Mix]
mix iexis no longer functional, please useiex -S mix - [OptionParser]
:flagsoption was deprecated in favor of:switchesto support many types
- [Dict] Deprecate
v0.7.2 (2012-12-04)
-
enhancements
- [CLI]
--debug-infois now true by default - [ExUnit] Make ExUnit exit happen in two steps allowing developers to add custom
at_exithooks - [IEx] Many improvements to helpers functions
h/1,s/1and others - [Kernel] Functions defined with
fncan now handle many clauses - [Kernel] Raise an error if clauses with different arities are defined in the same function
- [Kernel]
functionmacro now accepts arguments inM.f/aandf/aformats - [Macro] Improvements to
Macro.to_binary - [Mix] Mix now echoes the output as it comes when executing external commands such as git or rebar
- [Mix] Mix now validates
applicationcallback's values - [Record] Record accessors are now optimized and can be up to 6x faster in some cases
- [String] Support
\xXXand\x{HEX}escape sequences in strings, char lists and regexes
- [CLI]
-
bug fix
- [Bootstrap] Compiling Elixir source no longer fails if environment variables contain utf-8 entries
- [IEx] IEx will now wait for all command line options to be processed before starting
- [Kernel] Ensure proper stacktraces when showing deprecations
-
deprecations
- [Enum]
Enum.qsortis deprecated in favor ofEnum.sort - [List]
List.sortandList.uniqhave been deprecated in favor of theirEnumcounterparts - [Record] Default-based generated functions are deprecated
- [Typespec] Enhancements and deprecations to the
@spec/@callbackand the fun type syntax
- [Enum]
v0.7.1 (2012-11-18)
-
enhancements
- [IEx] Only show documented functions and also show docs for default generated functions
- [IO] Add
IO.binread,IO.binwriteandIO.binreadlineto handle raw binary file operations - [ExUnit] Add support for user configuration at
HOME/.ex_unit.exs - [ExUnit] Add support for custom formatters via a well-defined behaviour
- [Kernel] Add support for
defrecordp - [Kernel] Improved dialyzer support
- [Kernel] Improved error messages when creating functions with aliases names
- [Mix] Improve SCM behaviour to allow more robust integration
- [Mix] Changing deps information on
mix.exsforces users to fetch new dependencies - [Mix] Support (parallel) requires on mix run
- [Mix] Support
-qwhen running tests to compile only changed files - [String] Support
String.downcaseandString.upcaseaccording to Unicode 6.2.0 - [String] Add support for graphemes in
String.length,String.atand others - [Typespec] Support
@opaqueas attribute - [Typespec] Define a default type
tfor protocols and records - [Typespec] Add support for the access protocol in typespecs
-
bug fix
- [Kernel] Fix an issue where variables inside clauses remained unassigned
- [Kernel] Ensure
defoverridablefunctions can be referred in many clauses - [Kernel] Allow keywords as function names when following a dot (useful when integrating with erlang libraries)
- [File] File is opened by default on binary mode instead of utf-8
-
deprecations
- [Behaviour]
defcallback/1is deprecated in favor ofdefcallback/2which matches erlang@callbacks - [Enum]
Enum.timesis deprecated in favor of using ranges - [System]
haltmoved toSystemmodule
- [Behaviour]
v0.7.0 (2012-10-20)
-
enhancements
- [Behaviour] Add Behaviour with a simple callback DSL to define callbacks
- [Binary] Add a Dict binary that converts its keys to binaries on insertion
- [Binary] Optimize
Binary.Inspectand improve inspect for floats - [CLI] Support
--detachedoption - [Code]
Code.string_to_astsupports:existing_atoms_onlyas an option in order to guarantee no new atoms is generated when parsing the code - [EEx] Support
<%%and<%#tags - [ExUnit] Support
after_spawncallbacks which are invoked after each process is spawned - [ExUnit] Support context data in
setup_all,setup,teardownandteardown_allcallbacks - [IEx] Support
after_spawncallbacks which are invoked after each process is spawned - [Kernel] Better error messages when invalid options are given to
import,aliasorrequire - [Kernel] Allow partial application on literals, for example:
{ &1, &2 }to build tuples or[&1|&2]to build cons cells - [Kernel] Added
integer_to_binaryandbinary_to_integer - [Kernel] Added
float_to_binaryandbinary_to_float - [Kernel] Many improvements to
unquoteandunquote_splicing. For example,unquote(foo).unquote(bar)(args)is supported and no longer need to be written viaapply - [Keyword] Keyword list is no longer ordered according to Erlang terms but the order in which they are specified
- [List] Add
List.keyreplaceandList.keystore - [Macro] Support
Macro.safe_termwhich returns:okif an expression does not execute code and is made only of raw data types - [Mix] Add support for environments - the current environment can be set via
MIX_ENV - [Mix] Add support for handling and fetching dependencies' dependencies
- [Module] Support module creation via
Module.create - [Range] Support decreasing ranges
- [Record] Improvements to the Record API, added
Record.defmacros - [Regex] Add
:returnoption toRegex.runandRegex.scan - [String] Add a String module responsible for handling UTf-8 binaries
-
bug fix
- [File]
File.cpandFile.cp_rnow preserves the file's mode - [IEx] Fix a bug where printing to
:stdioonIExwas causing it to hang - [Macro] Fix a bug where quoted expressions were not behaving the same as their non-quoted counterparts
- [Mix]
mix deps.get [DEPS]now only gets the specified dependencies - [Mix] Mix now exits with status 1 in case of failures
- [Protocol] Avoid false positives on protocol dispatch (a bug caused the dispatch to be triggered to an invalid protocol)
- [File]
-
backwards incompatible changes
- [ExUnit]
setupandteardowncallbacks now receives the test name as second argument - [Kernel] Raw function definition with
def/4,defp/4,defmacro/4,defmacrop/4now evaluates all arguments. The previous behaviour was accidental and did not properly evaluate all arguments - [Kernel] Change tuple-related (
elemandsetelem), Enum functions (find_index,nth!andtimes) and List functions (List.key*) to zero-index
- [ExUnit]
-
deprecations
- [Code]
Code.require_fileandCode.load_filenow expect the full name as argument - [Enum]
List.reverse/1andList.zip/2were moved toEnum - [GenServer] Rename
GenServer.BehaviortoGenServer.Behaviour - [Kernel] Bitstring syntax now uses
::instead of| - [Kernel]
Erlang.syntax is deprecated in favor of simply using atoms - [Module]
Module.read_attributeandModule.add_attributedeprecated in favor ofModule.get_attributeandModule.put_attributewhich mimics Dict API
- [Code]
v0.6.0 (2012-08-01)
-
incompatible changes
- [Kernel] Compile files now follow
Elixir-ModuleNameconvention to solve issues with Erlang embedded mode. This removes the__MAIN__pseudo-variable as modules are now located insideElixirnamespace - [Kernel]
__using__callback triggered byusenow receives just one argument. Caller information can be accessed via macros using__CALLER__ - [Kernel] Comprehensions syntax changed to be more compatible with Erlang behavior
- [Kernel] loop and recur are removed in favor of recursion with named functions
- [Module] Removed data functions in favor of unifying the attributes API
- [Kernel] Compile files now follow
-
deprecations
- [Access] The semantics of the access protocol were reduced from a broad query API to simple data structure key-based access
- [ExUnit] Some assertions are deprecated in favor of simply using
assert() - [File]
File.read_infois deprecated in favor ofFile.stat - [IO]
IO.printis deprecated in favor ofIO.write - [Kernel] Deprecate
__LINE__and__FUNCTION__in favor of__ENV__.lineand__ENV__.function - [Kernel] Deprecate
in_guardin favor of__CALLER__.in_guard? - [Kernel]
referis deprecated in favor ofalias - [Module]
Module.add_compile_callback(module, target, callback)is deprecated in favor ofModule.put_attribute(module, :before_compile, { target, callback }) - [Module]
Module.function_defined?is deprecated in favor ofModule.defines? - [Module]
Module.defined_functionsis deprecated in favor ofModule.definitions_in
-
enhancements
- [Enum] Enhance Enum protocol to support
Enum.count - [Enum] Optimize functions when a list is given as collection
- [Enum] Add
find_index,nth!and others - [ExUnit] Support setup and teardown callbacks
- [IEx] IEx now provides autocomplete if the OS supports tty
- [IEx] IEx now supports remsh
- [IEx] Elixir now defaults to compile with documentation and
dcan be used in IEx to print modules and functions documentation - [IEx] Functions
candmare available in IEx to compile and print available module information. Functionshandvare available to show history and print previous commands values - [IO/File] Many improvements to
FileandIOmodules - [Kernel] Operator
!is now allowed in guard clauses - [Kernel] Introduce operator
=~for regular expression matches - [Kernel] Compiled docs now include the function signature
- [Kernel]
defmoduledo not start a new variable scope, this improves meta-programming capabilities - [Kernel] quote special form now supports line and unquote as options
- [Kernel] Document the macro
@and allow attributes to be read inside functions - [Kernel] Add support to the
%Rsigil. The same as%r, but without interpolation or escaping. Both implementations were also optimized to generate the regex at compilation time - [Kernel] Add
__ENV__which returns aMacro.Envrecord with information about the compilation environment - [Kernel] Add
__CALLER__inside macros which returns aMacro.Envrecord with information about the calling site - [Macro] Add
Macro.expand, useful for debugging what a macro expands to - [Mix] First Mix public release
- [Module] Add support to
@before_compileand@after_compilecallbacks. The first receives the module name while the latter receives the module name and its object code - [OptionParser] Make OptionParser public, add support to flags and improved switch parsing
- [Range] Add a Range module with support to
inoperator (x in 1..3) and iterators - [Record] Allow
Record[_: value]to set a default value to all records fields, as in Erlang - [Record] Records now provide a
to_keywordsfunction - [Regex] Back references are now properly supported
- [System] Add
System.find_executable
- [Enum] Enhance Enum protocol to support
v0.5.0 (2012-05-24)
- First official release