Changelog
June 29, 2015 ยท View on GitHub
v1.0.5 (2015-06-29)
-
Enhancements
- [Elixir] Support 18.0
- [IEx] Rely only on loaded applications for autocompletion on IEx
- [Record] Expand attributes and macros in record extractor
- [String]
Optimize String.rstrip/1 - [String]
Optimize String.downcase/1 - [String]
Optimize String.upcase/1
-
Bug fixes
- [EEx] Ensure blocks do not clobber EEx buffers
- [Enum] Ensure
Enum.take/2does not consume one extra item when halting on the last emittable item - [ExUnit] Fix
StringIOprocesses leakage in theExUnit.CaptureIOwhen there are errors inside thecapture_ioblock - [Float] Avoid rounding errors on
Float.parse/1 - [GenEvent] Fix
GenEventdetection of modules that aren't loaded - [IO] Read 4K blocks instead of lines in
IO.binread/2. This fixes a bug where CRLF were being ignored and is also going to improve performance - [Logger] Handle
:undefinedarity inLogger.Translator(we get :undefined when a temporary worker of asimple_one_for_onesupervisor crashes) - [Mix] Ensure config is escaped before being injected into escripts. This fixes a bug where escripts failed to build when containing values like maps in config files
- [Mix] Ensure we properly underscore acronyms followed by paths, for example,
HTTP.Foo - [Stream] Ensure
Stream.flat_map/2does not consume more items than necessary when piped to anotherStream.flat_map/2that halts in the inner stream - [Version] Fix
to_stringfor versions with numeric pre releases
v1.0.4 (2015-04-07)
-
Enhancements
- [Elixir] Support Erlang 17.5 and 18.0-rc
- [Mix] Support "--search PATTERN" in "mix help"
- [Mix] Support
:start_permanentthat starts the application as permanent - [Mix] Support
:build_embeddedthat compile protocols, avoid symlinks and ensure protocols are loaded on boot - [Mix] Make "mix app.start" public and support "--permanent" and "--temporary" options
- [URI] Speed decoding operations
-
Bug fixes
- [Elixir] Produce clearer error messages for syntax errors before a sigil
- [Elixir] Return value when matching on
_in the last line of a block - [Elixir] Ensure changes in child deps forces the parent to recompile
- [Kernel] Fix a bug where
=~/2returned false when matching on an empty string. The current behaviour was changed to match the behaviour ofString.contains?/2 - [Mix] Store relative paths in erlang manifests
- [Mix] Fix httpc proxy option profile for downloading hex and other safe packges
- [Mix] Fix missing behaviour warning when compiling Erlang modules
v1.0.3 (2015-02-12)
-
Enhancements
- [Elixir] Do not show exported vars warning
- [Elixir] Improve error messages when using invalid expressions inside maps
- [Elixir] Skip aliases and import warnings when code cannot compile
- [IEx] Improve autocompletion for Erlang/Elixir based on loaded applications
- [IO] Make
IO.ANSI.Docsreadable on white background - [Mix] Provide clearer error message when updating archives on Windows
- [Mix] Don't go through hex.pm API server to install Hex
-
Bug fixes
- [Elixir] Ensure all Elixir applications work with code upgrades
- [Elixir] Don't leave spurious processes and stale data when the parallel compiler fails
- [Inspect] Keep original stacktrace on Inspect errors
- [IO] Fix
IO.ANSI.Docshandling of*,**,_where they would be activated in the middle of words - [Logger] Fix logging with
metadata[:function] - [Mix] Don't show hex update message on mix
local.hex - [Mix] Ensure tasks are properly underscored and camelized
- [Mix] Ensure Mix does not use ANSI escapes on Windows unless ANSI is enabled
- [Mix] Only shutdown Logger if the Mix application is being actually started
- [Mix] Ensure priv/include are copied on Windows even if source did not change
- [Mix] Ensure rebar dependencies work when user path has a space on Windows
- [Regex] Fix
Regex.replace/4failures when the number of substitutions in pattern is more than the number of matches and support\g{...}patterns - [String] Fix LFCR being treated as a grapheme instead of CRLF
- [URI] Do more strict matching on URI schema
v1.0.2 (2014-10-21)
- Bug fixes
- [EEx] Remove invalid warning when attempting to inline code in EEx
- [EEx] Unify syntax errors to always include
file:line: - [IEx] Set null prompt function in dumb term mode
- [Kernel] Do not define an ets table with the same name as the module as it clashes with user code
- [Kernel] Fail compiling try expressions if they lack one of catch/after/rescue/else clauses
- [Kernel] Improve error messages when parsing fails on aliases
- [Kernel] Improve warnings coming from compile-time evaluation of arguments
- [String] Fix
String.replace/4typespec
v1.0.1 (2014-10-07)
-
Enhancements
- [Mix] Add MIX_ENV output to archive.build (as on escript.build)
-
Bug fixes
- [CLI] Fix Elixir CLI when running on Cygwin
- [ExUnit] Include stacktraces in ExUnit timeouts
- [Mix] Load dependencies before
deps.checkcompiles dependencies - [Mix] Ensure
Mix.Configis deep merged - [Mix] Change version requirement in new apps to
~> MAJOR.MINOR - [Mix] Report correct location if
local.hexfails and give higher priority to powershell install on Windows - [Mix] Ensure
--elixirc-pathsoption forcompile.elixiris a subset of the project:elixirc_pathsconfiguration and it does not remove skipped entries from the manifest - [Mix] Ensure
compile.elixirwrites to manifest when files are removed - [Mix] Ensure
compile.elixirpurges and deletes modules before compiling - [Mix] Do not crash on malformed proxy env var
- [Stream] Ensure
chunk/4works correctly when halted - [System] Do not allow relative paths in
System.cmd/3as documented - [System] Fix
:stderr_to_stdoutoption inSystem.cmd/3
v1.0.0 (2014-09-10)
-
Enhancements
- [Logger] Add
Logger.enable/1andLogger.disable/1
- [Logger] Add
-
Backwards incompatible changes
- [GenEvent] No longer support
{:swap_handler, ...}as callback return value - [List]
List.unzip/2was removed
- [GenEvent] No longer support
v1.0.0-rc2 (2014-09-07)
-
Enhancements
- [ExUnit] Print process mailbox on failing
assert_receive - [ExUnit] Tag all doctests with the
:doctesttag - [Kernel] Friendlier
unquote_splicingerror on inline quote - [Kernel] Add
<~,~>,<<~,~>>,<~>,<|>as operators - [Mix]
mix deps.unlockwarns when given a missing dependency - [Mix] Fetch hex using HTTPS
- [ExUnit] Print process mailbox on failing
-
Bug fixes
- [File] Ensure
File.cwdgenerates lowercase drive letters on Windows - [GenEvent] Ensure the event manager does not crash on
:sys.replace_state/3 - [GenEvent] Do not consider swap handlers to be failures in a stream
- [Logger] Fix
Logger.log/2not to raise on Logger exit - [Logger] Recompute sync/async mode on Logger configuration
- [System] Ensure
System.cwdgenerates lowercase drive letters on Windows
- [File] Ensure
-
Deprecations
- [GenEvent] The
:monitoroption inadd_handler/4andswap_handler/6is deprecated in favor ofadd_mon_handler/3andswap_mon_handler/5
- [GenEvent] The
-
Backwards incompatible changes
- [Supervisor] Make
max_restartsdefault to 3 (closer to upcoming Erlang defaults)
- [Supervisor] Make
v1.0.0-rc1 (2014-08-30)
-
Enhancements
- [ExUnit] Add timeouts to tests (which is configurable via tags)
- [GenEvent] Add support for
GenEvent.ack_notify/2 - [GenEvent] Add support for monitored handlers to
GenEvent.add_handler/4that removes the drawbacks in the previous linked handlers - [Logger] Allow any value that implements
String.Charsto be logger - [Logger] Allow
Logger.log/3timeout to be configured - [Mix] Add
--forceoption tomix local.rebar - [Mix] Fix
--no-color/--coloroption formix test - [Mix] Add a
:languageoption to improve the usability of Erlang projects using Mix - [Mix] Accept wildcards on
Mix.Config.import_config/1 - [Mix] Support protocol consolidation on escripts
-
Bug fixes
- [IEx] Do not print the underlying type for
@opaquein thethelper - [GenEvent] Do not allow a handler to be added more than once
- [GenServer] Do not treat bad arguments as exits in
GenServer.call/2 - [GenServer] Do not deliver out of order messages on
GenServer.cast/2on distributed mode - [Mix] Do not pre-compile a Mix project if an alias was found
- [Mix] Properly handle compilation errors in the Erlang compiler
- [Mix] Always try to compile project if task cannot be found
- [Mix] Purge in memory modules before consolidating
- [Mix] Always compile a project if a task cannot be found
- [IEx] Do not print the underlying type for
-
Deprecations
- [Collectable] Deprecate
Collectable.empty/1andEnum.traverse/2 - [Integer]
odd?/1andeven?/1are deprecated in favor ofis_odd/1andis_even/1 - [Kernel]
nil?/1is deprecated in favor ofis_nil/1 - [Kernel]
x.Aliasis deprecated in favor of an explicitModule.concat/2 - [Record]
record?/1andrecord?/2are deprecated in favor ofis_record/1andis_record/2 - [Stream] Returning
{item, acc} | nilfromStream.resource/2is deprecated, instead return{[item], acc} | {:halt, acc}(similar toStream.transform/3)
- [Collectable] Deprecate
-
Backwards incompatible changes
- [GenEvent]
GenEvent.cancel_stream/1no longer is - [GenEvent] The
:modeand:durationoptions are deprecated and no longer supported inGenEvent.stream/2(the mode is now a property of the sender) - [GenEvent] The
:linkedoption is deprecated and no longer supported inGenEvent.add_handler/4(check monitored handlers instead)
- [GenEvent]
v0.15.1 (2014-08-10)
-
Enhancements
- [GenEvent] Support
:ackmode for GenEvent streams - [Inspect] Support
:baseoption ininspect/2to choose the base (:binary,:octal,:decimalor:hex) numbers a printed - [kernel] Print warnings when used ? with characters with escape codes
- [Logger] Add SASL log forwarding option to Logger
- [Logger] Add
$padlevelto option Logger formatter - [Logger] Backends receive the exact handler value when added, allowing a key to be passed for configuration lookup
- [Logger] Add
Logger.flush/0to flush the Logger (useful for testing) - [Logger] Persist backends dynamically added or removed via
add_backend/2andremove_backend/2 - [Macro] Add
Macro.validate/1to recursively check if a value is a valid quoted expression - [Mix] Load mix deps only when there is a need to use them (this improves the timing for the majority of tasks in a Mix project)
- [Mix] Make the environment explicit on the success message generated after
escript.buildis invoked - [Mix] Load
config/config.exsinside escripts - [Mix] Store and check Elixir version requirement for generated archives
- [GenEvent] Support
-
Bug fixes
- [CLI] Fix shell bugs when running on Windows with Cygwin or MinGW
- [Kernel] Modules compiled by Elixir now report the correct beam location when
:code.which/1is invoked. If the bytecode is only available in memory,:code.which/1returns:in_memory - [Kernel] Do not expand args for unknown functions/macros
- [Kernel] Ensure
defstruct,@attrinside and friends raise a nice error messages when values cannot be properly escaped - [Kernel] Do not raise conflicts on imports used from inside quotes
- [Logger] Metadata is now correctly merged on each
Logger.metadata/1call - [Logger] Use the Logger PID on
:error_loggerwrapper to avoid race conditions on shutdown - [Macro] Ensure bitstrings work with
Macro.escape/1 - [Mix] Ensure aliases are invoked on umbrella recursive tasks
- [Mix] Leave it up to the application to start the Logger after compilation
- [Mix] Accept more forms of git versions (like "git version 1.9.3 (Apple Git-50)")
- [Path] Do not normalize paths in
Path.join/2as normalization is beyond the scope of such function - [URI]
to_string/1now properly converts URI to strings when the schema is missing
-
Deprecations
- [Collectable] Having a function as collectable is deprecated
- [Module]
Module.function/3is deprecated, please use:erlang.make_fun/3instead
v0.15.0 (2014-08-02)
-
Enhancements
- [Agent] Improve the Agent API to also accept functions that receive explicit module, function and arguments
- [IEx] Support
--werlcall on Windows - [Logger] Add
Logger - [Map] Add
Map.from_struct/1 - [Mix] Allow
--appflag to be passed tomix new - [Mix] Support lowercase
http(s)_proxyenvironment variables - [Mix] Allow
elixirc_pathsto also be given through the command line tomix compile.elixir - [String]
String.slice/2andString.slice/3have been optimized
-
Bug fixes
- [IEx] Ensure functions in
Kernel.SpecialFormsandIEx.Helpersare also auto-completed - [IEx] Ensure remote shells can be started with
--remsh - [Kernel] Correctly parse unary/binary operators regardless of number of spaces
- [Kernel] Ensure private functions are not exported
- [Protocol] Do not expose protocol convention on
assert_impl!/2 - [Regex] Do not consider include captures on
Regex.split/3results - [Stream] Implement the
Inspectprotocol for Streams so we do not leak the Stream representation
- [IEx] Ensure functions in
-
Deprecations
- [IEx] IEx color configuration expects a list of atoms instead of a string with colors separated by comma
- [Inspect]
Inspect.Algebra.surround_many/6now expects Inspect.Opts instead of an integer limit - [Inspect]
Inspect.Algebra.pretty/2is deprecated in favor ofInspect.Algebra.format/2that instead returns iodata. This function was used only by documentation examples and it is unlikely to affect actual code - [IO]
IO.ANSI.terminal?is deprecated in favor ofIO.ANSI.enabled? - [IO]
IO.ANSI.escape/2andIO.ANSI.escape_fragment/2is deprecated in favor ofIO.ANSI.format/2andIO.ANSI.format_fragment/2 - [Kernel] Leading
0for octals is deprecated in favor of0o - [Kernel]
0Xfor hexadecimals is deprecated in favor of0x - [Kernel]
0Bfor binaries is deprecated in favor of0b - [Mix] Mix color configuration expects a list of atoms instead of a string with colors separated by comma
- [String]
\NNN,\NNand\Nfor octals are deprecated inside string, sigils and chars in favor of hexadecimal entries with\x
-
Backwards incompatible changes
- [Kernel]
binding/1andbinding/2expecting a list were removed - [Regex] Do not consider include captures on
Regex.split/3results
- [Kernel]
v0.14.3 (2014-07-12)
-
Enhancements
- [Access] Allow function access on
get_in/2andget_and_update_in/3 - [Enum] Add
Enum.sort_by/3 - [ExUnit] Match the line filter by proximity instead of exact match
- [Float] Support precision in
Float.ceil/1andFloat.floor/1 - [IO] Add
IO.(bin)read(device, :all) - [Kernel] Print a warning if a dangling
@docclause is found - [Mix] Use absolute symbolic links on Windows for
_buildinstead of copying - [Mix] Add
Mix.compilersthat returns all default compilers used by mix tasks - [Mix] Issue warning and reset mtime for source files from the future
- [Mix] Support task aliases in Mix
- [OptionParser] Add
OptionParser.split/1that splits a string into argv - [Record] Allow a record to be converted to a keyword list with
record(some_record) - [String] Improve performance of
String.split/1 - [Typespec] Allow
%Struct{}syntax to be used in typespecs - [Typespec] Allow
record(:record, fields)syntax to be used in typespecs
- [Access] Allow function access on
-
Bug fixes
- [IEx] Do not print ANSI sequences on
IEx.Helpers.clear/0if ANSI sequences are not supported - [Inspect] Ensure
Inspect.Algebra.to_doc/2doesn't go into a loop when there is a failure printing a struct - [Kernel]
|>,<<<,>>>and^^^made left associative in operator table - [Kernel]
<,>,<=,>=given higher precedence than comparison operators (==,!=, etc) in the operator table - [Kernel] Run command line and escripts in a process that does not trap exits
- [Kernel] Fix a bug where Mix paths had higher priority than CLI ones, causing protocol consolidations to not be properly loaded
- [Kernel] Fix wording on error messages when a check/guard always passes or always fails
- [Kernel] Fix a bug where an unused function warning was printed even when the function was used via
defoverridable - [Kernel] Improve typespecs so they don't generate supertype dialyzer warnings
- [Macro]
to_stringcorrectly displays sigils - [Mix] Ensure Mix dependencies are not compiled every second time when
mix deps.compileis invoked - [Mix] Fix a bug where
Mix.shell.error/1and friends choked when printing a map - [Mix] Ensure multiple
@external_resourceentries are read by Mix compilers - [Mix] Fix a bug where tasks for umbrella projects were not properly reenabled
- [Stream] Fix bug when
flat_mapis used inside anotherflat_mapwith an Enumerable - [Typespec] Fix a bug where the
listtypespec was incorrectly rendered as[]
- [IEx] Do not print ANSI sequences on
-
Soft deprecations (no warnings emitted)
- [Kernel] Using a list for bitstring modifiers is deprecated (as in
<<x :: [little, utf16]>>), please use-as the separator instead (as in<<x :: little-utf16>>) - [System]
System.cmd/1is deprecated in favor ofSystem.cmd/3
- [Kernel] Using a list for bitstring modifiers is deprecated (as in
-
Deprecations
- [Mix]
mix escriptizeis deprecated in favor ofescript.build - [Mix]
mix local.installandmix local.uninstallhave been deprecated in favor ofmix archive.installandmix archive.uninstallrespectively - [Mix]
:embed_extra_appsfor escripts is deprecated, instead list the dependencies insidedef application - [System] Giving a char list to
System.find_executable/1is deprecated
- [Mix]
-
Backwards incompatible changes
- [Access] No longer fill in missing intermediate values with empty maps
- [Float]
Float.ceil/2andFloat.floor/2now always returns floats and no longer accept integers - [Kernel]
defstructno longer automatically defines a type - [Kernel]
exit(integer)is no longer supported from scripts to configure the exit signal. Useexit({:shutdown, integer})instead - [Kernel] Default argument values have to be defined in a function head if the function has multiple clauses
- [Mix]
mix archive.buildreplaces the functionality ofmix archive,mix archivenow lists locally installed archives - [Mix]
Mix.shell.info/1no longer automatically escape ANSI sequences. Instead if has to be explicitly enabled with theansi: trueoption - [OptionParser]
--no-SWITCHare only allowed for declared booleans switches
v0.14.2 (2014-06-29)
-
Enhancements
- [Enum] Improve performance of
Enum.join/2andEnum.map_join/3by using iolists - [Kernel] Ensure compatibility with Erlang 17.1
- [Kernel] Support
@external_resourceattribute to external dependencies to a module - [Mix] Allow built Git dependencies to run on a system without Git by passing
--no-deps-check - [Mix] Add
MIX_ARCHIVESenv variable (it is recommended for Elixir build tools to swap this environment) - [Task] Set
:proc_libinitial call on task to aid debugging - [Typespec] Delay typespec compilation to after expansion
- [URI] Allow
parse/1now accepts%URI{}as argument and return the uri itself
- [Enum] Improve performance of
-
Bug fixes
- [CLI] Support paths inside archives in
-paand-pzoptions - [IEx] Remove delay when printing data from the application start callback
- [IEx] Ensure we show a consistent error when we cannot evaluate
.iex.exs - [Kernel] Ensure derived protocols are defined with a file
- [Kernel] Change precedence of
&to not special case/ - [Kernel] Ensure we can only use variables and
\\as arguments of bodyless clause
- [CLI] Support paths inside archives in
-
Soft deprecations (no warnings emitted)
- [EEx] Using
EEx.TransformerEngineandEEx.AssignsEngineare deprecated in favor of function composition withMacro.prewalk/1(seeEEx.SmartEnginefor an example) - [Kernel]
Kernel.xor/2is deprecated - [Mix]
Mix.Generator.from_file/1is deprecated in favor of passingfrom_file: fileoption toembed_text/2andembed_template/2(note though thatfrom_file/1expects a path relative to the current file while thefrom_file: fileexpects one relative to the current working directory)
- [EEx] Using
-
Deprecations
- [Kernel]
size/1is deprecated in favor ofbyte_size/1andtuple_size/1(this change was soft deprecated two releases ago)
- [Kernel]
-
Backwards incompatible changes
- [CLI] Remove support for the
--gen-debugoption as its usage is not documented by OTP - [Kernel] Sigils no longer balance start and end tokens, e.g. the sigil
~s(f(o)o)is no longer valid as it finishes in the first closing) - [Kernel] Variables set in
condclause heads are no longer available outside of that particularcondclause (this is the behaviour also found incase,receiveand friends) - [System]
build_info/0now returns a map
- [CLI] Remove support for the
v0.14.1 (2014-06-18)
-
Enhancements
- [Base] Decoding and encoding functions now accept the
:caseas an option - [ExUnit] The test process now exits with
:shutdownreason - [GenEvent]
GenEvent.stream/2now accepts:syncand:asyncmodes - [Node] Add
Node.start/3andNode.stop/0 - [String] Updated Unicode database to 7.0
- [Task] Log when tasks crash
- [Base] Decoding and encoding functions now accept the
-
Bug fixes
- [Enum]
Enum.slice/2andEnum.slice/3always returns a list (and never nil) - [Kernel] Disambiguate (w)erl to (w)erl.exe
- [Mix] Ensure umbrella project is recompiled when a dependency inside an umbrella child changes
- [OptionParser] Do not allow underscores in option names
- [Path] Fix path expansion of
"/.." - [Path] Do not match files starting with
.inPath.wildcard/2by default - [Process]
Process.info(pid, :registered_name)returns{:registered_name, nil}if there is no registered name - [String]
String.slice/2andString.slice/3always returns a list (and never nil) - [URI]
encode/1does not escape reserved/unreserved characters by default nor encodes whitespace as+(checkURI.encode_www_form/1andURI.decode_www_form/1for previous behaviour)
- [Enum]
-
Deprecations
- [Mix]
:escript_*options moved into a single:escriptgroup
- [Mix]
-
Backwards incompatible changes
- [GenEvent]
GenEvent.stream/2defaults to:syncmode - [Kernel] Remove
get_in/1
- [GenEvent]
v0.14.0 (2014-06-08)
-
Enhancements
- [ExUnit] Add
on_exit/1callbacks that are guaranteed to run once the test process exits and always in another process - [Kernel] Store documentation in the abstract code to avoid loading them when the module is loaded
- [Kernel] Add
get_in/2,put_in/3,update_in/3andget_and_update_in/3to handle nested data structure operations - [Kernel] Add
get_in/1,put_in/2,update_in/2andget_and_update_in/2to handle nested data structure operations via paths - [Mix] Add
Mix.Configto ease definition of configuration files - [Mix] Add
mix loadconfigtask that can be called multiple times to load external configs - [Mix] Support
--configoption onmix run - [Mix] Support
HTTP_PROXYandHTTPS_PROXYon Mix url commands - [Mix] Support
--namesoptions inmix helpwhich emit only names (useful for autocompletion) - [Protocol] Add
Protocol.consolidate/2,Protocol.consolidated?/1and amix compile.protocolstask for protocol consolidation - [Protocol] Add
Protocol.derive/3for runtime deriving of a struct - [String] Add
String.chunk/2 - [Struct] Add support for
@derivebeforedefstruct/2definitions
- [ExUnit] Add
-
Bug fixes
- [File]
File.rmnow consistently deletes read-only across operating systems - [Kernel] Ensure Mix
_buildstructure works on Windows when copying projects - [Kernel] Ensure
1.0E10(with uppercase E) is also valid syntax - [Mix] Fix
mix dotask for Windows' powershell users - [Path] Fix
Path.absname("/")andPath.expand("/")to return the absolute path"/".
- [File]
-
Soft deprecations (no warnings emitted)
- [Kernel]
size/1is deprecated, please usebyte_size/1ortuple_size/1instead - [ExUnit]
teardown/2andteardown_all/2are deprecated in favor ofon_exit/1callbacks
- [Kernel]
-
Deprecations
- [Access]
Access.access/2is deprecated in favor ofAccess.get/2 - [Dict]
Dict.Behaviouris deprecated in favor ofDict - [Kernel]
Application.Behaviour,GenEvent.Behaviour,GenServer.BehaviourandSupervisor.Behaviourare deprecated in favor ofApplication,GenEvent,GenServerandSupervisor - [Kernel]
defexception/3is deprecated in favor ofdefexception/1 - [Kernel]
raise/3is deprecated in favor ofreraise/2 - [Kernel]
set_elem/3is deprecated in favor ofput_elem/3 - [Kernel] Passing an atom
var!/1is deprecated, variables can be built dynamically withMacro.var/2 - [Mix] Exceptions that define a
:mix_errorfield to be compatible with Mix are no longer supported. Instead please provide a:mixfield and useMix.raise/1andMix.raise/2
- [Access]
-
Backwards incompatible changes
- [Access]
Kernel.access/2no longer exists and theAccessprotocol now requiresget/2(instead ofaccess/2) andget_and_update/3to be implemented - [Kernel] Retrieving docs as
module.__info__(:docs)is no longer supported, please useCode.get_docs/2instead - [Kernel]
Code.compiler_options/1no longer accepts custom options, only the ones specified by Elixir (use mix config instead) - [Mix]
mix newno longer generates a supevision tree by default, please pass--supinstead - [Task] Tasks are automatically linked to callers and a failure in the task will crash the caller directly
- [Access]
v0.13.3 (2014-05-24)
-
Enhancements
- [OptionParser] Add
:strictoption that only parses known switches - [OptionParser] Add
next/2useful for manual parsing of options - [Macro] Add
Macro.prewalk/2/3andMacro.postwalk/2/3 - [Kernel]
GenEvent,GenServer,Supervisor,AgentandTaskmodules added - [Kernel] Make deprecations compiler warnings to avoid the same deprecation being printed multiple times
- [OptionParser] Add
-
Bug fixes
- [Enum] Fix
Enum.join/2andEnum.map_join/3for empty binaries at the beginning of the collection - [ExUnit] Ensure the formatter doesn't error when printing :EXITs
- [Kernel] Rename
ELIXIR_ERL_OPTStoELIXIR_ERL_OPTIONSfor consistency withERL_COMPILER_OPTIONS - [OptionParser] Parse
-as a plain argument - [OptionParser]
--is always removed from argument list onparse/2and when it is the leading entry onparse_head/2 - [Regex] Properly escape regex (previously regex controls were double escaped)
- [Enum] Fix
-
Soft deprecations (no warnings emitted)
- [Dict]
Dict.Behaviouris deprecated in favor ofDict - [Kernel]
Application.Behaviour,GenEvent.Behaviour,GenServer.BehaviourandSupervisor.Behaviourare deprecated in favor ofApplication,GenEvent,GenServerandSupervisor - [Kernel]
defexception/3is deprecated in favor ofdefexception/1 - [Kernel]
raise/3is deprecated in favor ofreraise/2 - [Kernel]
set_elem/3is deprecated in favor ofput_elem/3
- [Dict]
-
Soft deprecations for conversions (no warnings emitted)
- [Kernel]
atom_to_binary/1andatom_to_list/1are deprecated in favor ofAtom.to_string/1andAtom.to_char_list/1 - [Kernel]
bitstring_to_list/1andlist_to_bitstring/1are deprecated in favor of the:erlangones - [Kernel]
binary_to_atom/1,binary_to_existing_atom/1,binary_to_float/1,binary_to_integer/1andbinary_to_integer/2are deprecated in favor of conversion functions inString - [Kernel]
float_to_binary/*andfloat_to_list/*are deprecated in favor ofFloat.to_string/*andFloat.to_char_list/* - [Kernel]
integer_to_binary/*andinteger_to_list/*are deprecated in favor ofInteger.to_string/*andInteger.to_char_list/* - [Kernel]
iodata_to_binary/1andiodata_length/1are deprecatedIO.iodata_to_binary/1andIO.iodata_length/1 - [Kernel]
list_to_atom/1,list_to_existing_atom/1,list_to_float/1,list_to_integer/1,list_to_integer/2andlist_to_tuple/1are deprecated in favor of conversion functions inList - [Kernel]
tuple_to_list/1is deprecated in favor ofTuple.to_list/1 - [List]
List.from_char_data/1andList.from_char_data!/1deprecated in favor ofString.to_char_list/1 - [String]
String.from_char_data/1andString.from_char_data!/1deprecated in favor ofList.to_string/1
- [Kernel]
-
Deprecations
- [Kernel]
is_exception/1,is_record/1andis_record/2are deprecated in favor ofException.exception?1,Record.record?/1andRecord.record?/2 - [Kernel]
defrecord/3is deprecated in favor of structs - [Kernel]
:hygieneinquoteis deprecated - [Mix]
Mix.project/0is deprecated in favor ofMix.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/2andProcess.self/0are deprecated in favor of the ones inKernel
- [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
v0.13.2 (2014-05-11)
-
Enhancements
- [Application] Add an Application module with common functions to work with OTP applications
- [Exception] Add
Exception.message/1,Exception.format_banner/1,Exception.format_exit/1andException.format/1 - [File] Add
File.ln_s/1 - [Mix]
mix deps.cleannow works accross environments - [Mix] Support line numbers in
mix test, e.g. test/some/file_test.exs:12 - [Mix] Use
@fileattributes to detect dependencies in between.exand external files. This means changing an.eexfile will no longer recompile the whole project only the files that depend directly on it - [Mix] Support application configurations in
config/config.exs - [Mix] Support user-wide configuration with
~/.mix/config.exs - [Mix]
mix helpnow uses ANSI formatting to print guides - [Regex] Support functions in
Regex.replace/4 - [String] Support
:partsinString.split/3
-
Bug fixes
- [Code] Ensure we don't lose the caller stacktrace on code evaluation
- [IEx] Exit signals now exits the IEx evaluator and a new one is spawned on its place
- [IEx] Ensure we don't prune too much stacktrace when reporting failures
- [IEx] Fix an issue where
iex.baton Windows was not passing the proper parameters forward - [Kernel] Ensure modules defined on root respect defined aliases
- [Kernel] Do not wrap single lists in
:__block__ - [Kernel] Ensure emitted beam code works nicely with dialyzer
- [Kernel] Do not allow a module named
Elixirto be defined - [Kernel] Create remote funs even if mod is a variable in capture
&mod.fun/arity - [Kernel] Improve compiler message when duplicated modules are detected
- [Mix] Generate
.gitignorefor--umbrellaprojects - [Mix] Verify if a git dependency in deps has a proper git checkout and clean it automatically when it doesn't
- [Mix] Ensure
mix testworks withIEx.pry/0 - [System] Convert remaining functions in System to rely on char data
-
Soft deprecations (no warnings emitted)
- [Exception]
exception.messageis deprecated in favorException.message/1for retrieving exception messages - [Kernel]
is_exception/1,is_record/1andis_record/2are deprecated in favor ofException.exception?1,Record.record?/1andRecord.record?/2 - [Mix]
Mix.project/0is deprecated in favor ofMix.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/2andProcess.self/0are deprecated in favor of the ones inKernel
- [Exception]
-
Deprecations
- [IEx] IEx.Options is deprecated in favor of
IEx.configure/1andIEx.configuration/0 - [Kernel]
lcandbccomprehensions are deprecated in favor offor - [Macro]
Macro.safe_terms/1is deprecated - [Process]
Process.delete/0is deprecated - [Regex] Deprecate
:globaloption inRegex.split/3in favor ofparts: :infinity - [String] Deprecate
:globaloption inString.split/3in favor ofparts: :infinity
- [IEx] IEx.Options is deprecated in favor of
-
Backwards incompatible changes
- [ExUnit]
ExUnit.TestandExUnit.TestCasehas been converted to structs - [ExUnit] The test and callback context has been converted to maps
- [Kernel]
File.Stat,HashDict,HashSet,Inspect.Opts,Macro.Env,Range,RegexandVersion.Requirementhave been converted to structs. This meansis_record/2checks will no longer work, instead, you can pattern match on them using%Range{}and similar - [URI] The
URI.Inforecord has now become theURIstruct - [Version] The
Version.Schemarecord has now become theVersionstruct
- [ExUnit]
v0.13.1 (2014-04-27)
-
Enhancements
- [Mix] Support
MIX_EXSas configuration for running the current mix.exs file - [Mix] Support Hex out of the box. This means users do not need to install Hex directly, instead, Mix will prompt whenever there is a need to have Hex installed
- [Mix] Support
-
Bug fixes
- [ExUnit] Ensure doctest failures are properly reported
- [Kernel] Fix a bug where comprehensions arguments were not properly take into account in the variable scope
- [Mix] Fix issue on rebar install when the endpoint was redirecting to a relative uri
-
Soft deprecations (no warnings emitted)
- [Kernel]
iolist_sizeandiolist_to_binaryare deprecated in favor ofiodata_lengthandiodata_to_binary - [String]
String.to_char_list/1is deprecated in favor ofList.from_char_data/1 - [String]
String.from_char_list/1is deprecated in favor ofString.from_char_data/1
- [Kernel]
-
Deprecations
- [Mix]
:envkey in project configuration is deprecated - [Regex]
Regex.groups/1is deprecated in favor ofRegex.names/1
- [Mix]
-
Backwards incompatible changes
- [Macro]
Macro.unpipe/1now returns tuples andMacro.pipe/2was removed in favor ofMacro.pipe/3which explicitly expects the second element of the tuple returned by the newMacro.unpipe/1 - [Path] The functions in Path now only emit strings as result, regardless if the input was a char list or a string
- [Path] Atoms are no longer supported in Path functions
- [Regex] Regexes are no longer unicode by default. Instead, they must be explicitly marked with the
uoption
- [Macro]
v0.13.0 (2014-04-20)
-
Enhancements
- [Base] Add
Basemodule which does conversions to bases 16, 32, hex32, 64 and url64 - [Code] Add
Code.eval_file/2 - [Collectable] Add the
Collectableprotocol that empowersEnum.into/2andStream.into/2and the:intooption in comprehensions - [Collectable] Implement
Collectablefor lists, dicts, bitstrings, functions and provide bothFile.StreamandIO.Stream - [EEx] Add
handle_body/1callback toEEx.Engine - [Enum] Add
Enum.group_by/2,Enum.into/2,Enum.into/3,Enum.traverse/2andEnum.sum/2 - [ExUnit] Randomize cases and tests suite runs, allow seed configuration and the
--seedflag viamix test - [ExUnit] Support
--onlyfor filtering when running tests withmix test - [ExUnit] Raise an error if another
capture_ioprocess 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
:promptoption - [IEx] Use werl on Windows
- [Kernel] Support
ERL_PATHinbin/elixir - [Kernel] Support interpolation in keyword syntax
- [Map] Add a Map module and support 17.0 maps and structs
- [Mix] Add dependency option
:onlyto specify the dependency environment.mix deps.getandmix deps.updateworks accross all environment unless--onlyis 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/3and support the--gen-debugoption - [Regex] Regexes no longer need the "g" option when there is a need to use named captures
- [Stream] Add
Stream.into/2andStream.into/3 - [StringIO] Add a
StringIOmodule that allows a String to be used as IO device - [System] Add
System.delete_env/1to remove a variable from the environment
- [Base] Add
-
Bug fixes
- [CLI] Ensure
--appis handled as an atom before processing - [ExUnit] Ensure
ExUnit.Assertionsdoes not emit compiler warnings forassert_receive - [Kernel] Ensure the same pid is not queued twice in the parallel compiler
- [Macro]
Macro.to_string/2considers proper precedence when translating!(foo > bar)into a string - [Mix] Automatically recompile on outdated Elixir version and show proper error messages
- [Mix] Ensure generated
.appfile includes core dependencies - [Mix] Allow a dependency with no SCM to be overridden
- [Mix] Allow queries in
mix local.installURL - [OptionParser] Do not recognize undefined aliases as switches
- [CLI] Ensure
-
Soft deprecations (no warnings emitted)
- [Kernel]
lcandbccomprehensions are deprecated in favor offor - [ListDict]
ListDictis deprecated in favor ofMap - [Record]
defrecord/2,defrecordp/3,is_record/1andis_record/2macros in Kernel are deprecated. Instead, use the new macros and API defined in theRecordmodule
- [Kernel]
-
Deprecations
- [Dict]
Dict.empty/1,Dict.new/1andDict.new/2are deprecated - [Exception]
Exception.normalize/1is deprecated in favor ofException.normalize/2
- [Dict]
-
Backwards incompatible changes
- [ExUnit] Formatters are now required to be a GenEvent and
ExUnit.run/2returns a map with results
- [ExUnit] Formatters are now required to be a GenEvent and
v0.12.5 (2014-03-09)
-
Bug fixes
- [Kernel] Ensure
trydoes not generate an after clause. Generating an after clause forbade clauses in theelsepart from being tail recursive. This should improve performance and memory consumption ofStreamfunctions - [Mix] Automatically recompile on outdated Elixir version and show proper error messages
- [Kernel] Ensure
-
Deprecations
- [File]
File.stream_to!/3is deprecated - [GenFSM]
GenFSMis deprecated - [Kernel]
%for sigils is deprecated in favor of~ - [Kernel]
is_range/1andis_regex/1are deprecated in favor ofRange.range?/1andRegex.regex?/1 - [Stream]
Stream.after/1is deprecated - [URI]
URI.decode_query/1is deprecated in favor ofURI.decode_query/2with explicit dict argument - [URI] Passing lists as key or values in
URI.encode_query/1is deprecated
- [File]
-
Backwards incompatible changes
- [Mix] Remove
MIX_GIT_FORCE_HTTPSas Git itself already provides mechanisms for doing so
- [Mix] Remove
v0.12.4 (2014-02-12)
-
Enhancements
- [Mix]
mix deps.getandmix deps.updateno longer compile dependencies afterwards. Instead, they mark the dependencies which are going to be automatically compiled next timedeps.checkis invoked (which is done automatically by most mix tasks). This means users should have a better workflow when migrating in between environments
- [Mix]
-
Deprecations
- [Kernel]
//for default arguments is deprecated in favor of\\ - [Kernel] Using
%for sigils is deprecated in favor of~. This is a soft deprecation, no warnings will be emitted for it in this release - [Kernel] Using
^inside function clause heads is deprecated, please use a guard instead
- [Kernel]
-
Backwards incompatible changes
- [ExUnit]
CaptureIOreturns an empty string instead of nil when there is no capture - [Version] The
Versionmodule now only works with SemVer. The functionsVersion.parse/1andVersion.parse_requirement/1now return{:ok,res} | :errorfor the cases you want to handle non SemVer cases manually. All other functions will trigger errors on non semantics versions
- [ExUnit]
v0.12.3 (2014-02-02)
-
Enhancements
- [Kernel] Warnings now are explicitly tagged with "warning:" in messages
- [Kernel] Explicit functions inlined by the compiler, including operators. This means that
Kernel.+/2will now expand to:erlang.+/2and so on - [Mix] Do not fail if a Mix dependency relies on an outdated Elixir version
- [Process] Add
Process.send/2andProcess.send_after/3 - [Version] Add
Version.compare/2
-
Bug fixes
- [Atom] Inspect
:...and:foo@barwithout quoting - [Keyword] The list
[1, 2, three: :four]now correctly expands to[1, 2, {:three, :four}] - [Kernel] Ensure undefined
@attributesshows proper stacktrace in warnings - [Kernel] Guarantee nullary funs/macros are allowed in guards
- [Process] Ensure monitoring functions are inlined by the compiler
- [Atom] Inspect
-
Deprecations
- [IEx] The helper
m/0has been deprecated. The goal is to group all runtime statistic related helpers into a single module - [Kernel]
binary_to_term/1,binary_to_term/2,term_to_binary/1andterm_to_binary/2are deprecated in favor of their counterparts in the:erlangmodule - [Kernel]
//for default arguments is deprecated in favor of\\. This is a soft deprecation, no warnings will be emitted for it in this release - [Kernel] Deprecated
@behaviorin favor of@behaviour - [Record]
to_keywords,getterandlist getterfunctionalities indefrecordpare deprecated - [Record]
Record.import/2is deprecated
- [IEx] The helper
-
Backwards incompatible changes
- [Dict] Implementations of
equal?/2andmerge/2inHashDictandListDictare no longer polymorphic. To get polymorphism, use the functions inDictinstead - [File]
File.cp/3andFile.cp_r/3no longer carry Unix semantics where the function behaves differently if the destination is an existing previous directory or not. It now always copies source to destination, doing it recursively in the latter - [IEx] IEx now loads the
.iex.exsfile instead of.iex - [Kernel] Remove
**from the list of allowed operators - [Kernel] Limit sigils delimiters to one of the following:
<>,{},[],(),||,//,"and' - [Range]
Rangeis no longer a record, instead usefirst .. lastif you need pattern matching - [Set] Implementations of
difference/2,disjoint?/2,equal?/2,intersection/2,subset?/2andunion/2inHashSetare no longer polymorphic. To get polymorphism, use the functions inSetinstead
- [Dict] Implementations of
v0.12.2 (2014-01-15)
-
Enhancements
- [EEx] Allow
EEx.AssignsEngineto accept any Dict - [Enum] Add
Enum.flat_map_reduce/3 - [ExUnit] Support
@moduletagin ExUnit cases - [Kernel] Improve stacktraces to be relative to the compilation path and include the related application
- [Stream] Add
Stream.transform/3
- [EEx] Allow
-
Bug fixes
- [ExUnit]
:includein ExUnit only has effect if a test was previously excluded with:exclude - [ExUnit] Only run
setup_allandteardown_allif there are tests in the case - [Kernel] Ensure bitstring modifier arguments are expanded
- [Kernel] Ensure compiler does not block on missing modules
- [Kernel] Ensure
<>/2works only with binaries - [Kernel] Fix usage of string literals inside
<<>>whenutf8/utf16/utf32is used as specifier - [Mix] Ensure mix properly copies _build dependencies on Windows
- [ExUnit]
-
Deprecations
- [Enum] Deprecate
Enum.first/1in favor ofEnum.at/2andList.first/1 - [Kernel] Deprecate continuable heredocs. In previous versions, Elixir would continue parsing on the same line the heredoc started, this behaviour has been deprecated
- [Kernel]
is_alive/0is deprecated in favor ofNode.alive? - [Kernel]
Kernel.inspect/2withInspect.Opts[]is deprecated in favor ofInspect.Algebra.to_doc/2 - [Kernel]
Kernel.inspect/2with:rawoption is deprecated, use:recordsoption instead - [Kernel] Deprecate
<-/2in favor ofsend/2
- [Enum] Deprecate
-
Backwards incompatible changes
- [String] Change
String.next_grapheme/1andString.next_codepoint/1to returnnilon string end
- [String] Change
v0.12.1 (2014-01-04)
-
Enhancements
- [ExUnit] Support
:includeand:excludeconfiguration options to filter which tests should run based on their tags. Those options are also supported viamix testas--includeand--exclude - [ExUnit] Allow doctests to match against
#MyModule<>
- [ExUnit] Support
-
Bug fixes
- [CLI] Abort when a pattern given to elixirc does not match any file
- [Float] Fix
Float.parse/1to handle numbers of the form "-0.x" - [IEx] Improve error message for
IEx.Helpers.rwhen module does not exist - [Mix] Ensure
deps.getupdates origin if lock origin and dep origin do not match - [Mix] Use relative symlinks in _build
- [Typespec] Fix conversion of unary ops from typespec format to ast
- [Typespec] Fix handling of
tuple()and{}
-
Deprecations
- [Kernel] Do not leak clause heads. Previously, a variable defined in a case/receive head clauses would leak to the outer scope. This behaviour is deprecated and will be removed in the next release.
- [Kernel] Deprecate
__FILE__in favor of__DIR__or__ENV__.file
-
Backwards incompatible changes
- [GenFSM] GenServer now stops on unknown event/sync_event requests
- [GenServer] GenServer now stops on unknown call/cast requests
- [Kernel] Change how
->is represented in AST. Now each clause is represented by its own AST node which makes composition easier. See commit 51aef55 for more information.
v0.12.0 (2013-12-15)
-
Enhancements
- [Exception] Allow
exception/1to be overridden and promote it as the main mechanism to customize exceptions - [File] Add
File.stream_to!/3 - [Float] Add
Float.floor/1,Float.ceil/1andFloat.round/3 - [Kernel] Add
List.delete_at/2andList.updated_at/3 - [Kernel] Add
Enum.reverse/2 - [Kernel] Implement
defmodule/2,@/1,def/2and friends in Elixir itself.case/2,try/2andreceive/1have been made special forms.var!/1,var!/2andalias!/1have also been implemented in Elixir and demoted from special forms - [Record] Support dynamic fields in
defrecordp - [Stream] Add
Stream.resource/3 - [Stream] Add
Stream.zip/2,Stream.filter_map/3,Stream.each/2,Stream.take_every/2,Stream.chunk/2,Stream.chunk/3,Stream.chunk/4,Stream.chunk_by/2,Stream.scan/2,Stream.scan/3,Stream.uniq/2,Stream.after/2andStream.run/1 - [Stream] Support
Stream.take/2andStream.drop/2with negative counts
- [Exception] Allow
-
Bug fixes
- [HashDict] Ensure a
HashDictstored in an attribute can be accessed via the attribute - [Enum] Fix bug in
Enum.chunk/4where you'd get an extra element when the enumerable was a multiple of the counter and a pad was given - [IEx] Ensure
c/2helper works with full paths - [Kernel]
quote location: :keepnow only affects definitions in order to keep the proper trace in definition exceptions - [Mix] Also symlink
includedirectories in _build dependencies - [Version] Fix
Version.match?/2with~>and versions with alphanumeric build info (like-dev)
- [HashDict] Ensure a
-
Deprecations
- [Enum]
Enumerable.count/1andEnumerable.member?/2should now return tagged tuples. Please seeEnumerabledocs for more info - [Enum] Deprecate
Enum.chunks/2,Enum.chunks/4andEnum.chunks_by/2in favor ofEnum.chunk/2,Enum.chunk/4andEnum.chunk_by/2 - [File]
File.binstream!/3is deprecated. Simply useFile.stream!/3which is able to figure out ifstreamorbinstreamoperations should be used - [Macro]
Macro.extract_args/1is deprecated in favor ofMacro.decompose_call/1
- [Enum]
-
Backwards incompatible changes
- [Enum] Behaviour of
Enum.drop/2andEnum.take/2has been switched when given negative counts - [Enum] Behaviour of
Enum.zip/2has been changed to stop as soon as the first enumerable finishes - [Enum]
Enumerable.reduce/3protocol has changed to support suspension. Please seeEnumerabledocs for more info - [Mix] Require
:escript_main_moduleto be set before generating escripts - [Range]
Range.Iteratorprotocol has changed in order to work with the newEnumerable.reduce/3. Please seeRange.Iteratordocs for more info - [Stream] The
Stream.Lazystructure has changed to accumulate functions and accumulators as we go (its inspected representation has also changed) - [Typespec]
whenclauses were moved to the outer part of the spec and should be in the keywords format. Soadd(a, b) when is_subtype(a, integer) and is_subtype(b, integer) :: integershould now be written asadd(a, b) :: integer when a: integer, b: integer
- [Enum] Behaviour of
v0.11.2 (2013-11-14)
-
Enhancements
- [Mix] Add
mix iexthat redirects users to the properiex -S mixcommand - [Mix] Support
build_per_environment: truein project configuration that manages a separete build per environment, useful when you have per-environment behaviour/compilation
- [Mix] Add
-
Backwards incompatible changes
- [Mix] Mix now compiles files to
_build. Projects should update just fine, however documentation and books may want to update to the latest information
- [Mix] Mix now compiles files to
v0.11.1 (2013-11-07)
-
Enhancements
- [Mix] Improve dependency convergence by explicitly checking each requirement instead of expecting all requirements to be equal
- [Mix] Support optional dependencies with
optional: true. Optional dependencies are downloaded for the current project but they are automatically skipped when such project is used as a dependency
-
Bug fixes
- [Kernel] Set compilation status per ParallelCompiler and not globally
- [Mix] Ensure Mix does not load previous dependencies versions before
deps.get/deps.update - [Mix] Ensure umbrella apps are sorted before running recursive commands
- [Mix] Ensure umbrella apps run in the same environment as the parent project
- [Mix] Ensure dependency tree is topsorted before compiling
- [Mix] Raise error when duplicated projects are pushed into the stack
- [URI] Allow lowercase escapes in URI
-
Backwards incompatible changes
- [Mix] Setting
:load_pathsin your project configuration is deprecated
- [Mix] Setting
v0.11.0 (2013-11-02)
-
Enhancements
- [Code] Eval now returns variables from other contexts
- [Dict] Document and enforce all dicts use the match operator (
===) when checking for keys - [Enum] Add
Enum.slice/2with a range - [Enum] Document and enforce
Enum.member?/2to use the match operator (===) - [IEx] Split
IEx.EvaluatorfromIEx.Serverto allow custom evaluators - [IEx] Add support for
IEx.prywhich halts a given process for inspection - [IO] Add specs and allow some IO APIs to receive any data that implements
String.Chars - [Kernel] Improve stacktraces on command line interfaces
- [Kernel] Sigils can now handle balanced tokens as in
%s(f(o)o) - [Kernel] Emit warnings when an alias is not used
- [Macro] Add
Macro.pipe/3andMacro.unpipe/1for building pipelines - [Mix] Allow umbrella children to share dependencies between them
- [Mix] Allow mix to be escriptize'd
- [Mix] Speed mix projects compilation by relying on more manifests information
- [Protocol] Protocols now provide
impl_for/1andimpl_for!/1functions which receive a structure and returns its respective implementation, otherwise returns nil or an error - [Set] Document and enforce all sets use the match operator (
===) when checking for keys - [String] Update to Unicode 6.3.0
- [String] Add
String.slice/2with a range
-
Bug fixes
- [Exception] Ensure
defexceptionfields can be set dynamically - [Kernel] Guarantee aliases hygiene is respected when the current module name is not known upfront
- [Kernel]
Kernel.access/2no longer flattens lists - [Mix] Ensure cyclic dependencies are properly handled
- [String] Implement the extended grapheme cluster algorithm for
Stringoperations
- [Exception] Ensure
-
Deprecations
- [Kernel]
pid_to_list/1,list_to_pid/1,binary_to_atom/2,binary_to_existing_atom/2andatom_to_binary/2are deprecated in favor of their counterparts in the:erlangmodule - [Kernel]
insert_elem/3anddelete_elem/2are deprecated in favor ofTuple.insert_at/3andTuple.delete_at/2 - [Kernel] Use of
ininside matches (as inx in [1,2,3] -> x) is deprecated in favor of the guard syntax (x when x in [1,2,3]) - [Macro]
Macro.expand_all/2is deprecated - [Protocol]
@onlyand@exceptin protocols are now deprecated - [Protocol] Protocols no longer fallback to
Anyout of the box (this functionality needs to be explicitly enabled by setting@fallback_to_anyto true) - [String]
String.to_integer/1andString.to_float/1are deprecated in favor ofInteger.parse/1andFloat.parse/1
- [Kernel]
-
Backwards incompatible changes
- [CLI] Reading
.elixirrchas been dropped in favor of setting env vars - [Kernel]
Kernel.access/2now expects the second argument to be a compile time list - [Kernel]
fn -> endquoted expression is no longer wrapped in adokeyword - [Kernel] Quoted variables from the same module must be explicitly shared. Previously, if a function returned
quote do: a = 1, another function from the same module could access it asquote do: a. This has been fixed and the variables must be explicitly shared withvar!(a, __MODULE__) - [Mix] Umbrella apps now treat children apps as dependencies. This means all dependencies will be checked out in the umbrela
depsdirectory. On upgrade, child apps need to point to the umbrella project by settingdeps_path: "../../deps_path", lockfile: "../../mix.lock"in their project config - [Process]
Process.group_leader/2args have been reversed so the "subject" comes first - [Protocol] Protocol no longer dispatches to
Number, but toIntegerandFloat
- [CLI] Reading
v0.10.3 (2013-10-02)
-
Enhancements
- [Enum] Add
Enum.take_every/2 - [IEx] IEx now respects signals sent from the Ctrl+G menu
- [Kernel] Allow documentation for types with
@typedoc - [Mix] Allow apps to be selected in umbrella projects
- [Record] Generated record functions
newandupdatealso take options with strings as keys - [Stream] Add
Stream.unfold/1
- [Enum] Add
-
Bug fixes
- [Dict] Fix a bug when a HashDict was marked as equal when one was actually a subset of the other
- [EEx] Solve issue where
doblocks inside templates were not properly aligned - [ExUnit] Improve checks and have better error reports on poorly aligned doctests
- [Kernel] Fix handling of multiple heredocs on the same line
- [Kernel] Provide better error messages for match, guard and quoting errors
- [Kernel] Make
Kernel.raise/2a macro to avoid messing up stacktraces - [Kernel] Ensure
&()works on quoted blocks with only one expression - [Mix] Address an issue where a dependency was not compiled in the proper order when specified in different projects
- [Mix] Ensure
compile: falseis a valid mechanism for disabling the compilation of dependencies - [Regex] Fix bug on
Regex.scan/3when capturing groups and the regex has no groups - [String] Fix a bug with
String.split/2when given an empty pattern - [Typespec] Guarantee typespecs error reports point to the proper line
-
Deprecations
- [Kernel] The previous partial application syntax (without the
&operator) has now been deprecated - [Regex]
Regex.captures/3is deprecated in favor ofRegex.named_captures/3 - [String]
String.valid_codepoint?/1is deprecated in favor of pattern matching with<<_ :: utf8 >>
- [Kernel] The previous partial application syntax (without the
-
Backwards incompatible changes
- [IEx] The
r/0helper has been removed as it caused surprising behaviour when many modules with dependencies were accumulated - [Mix]
Mix.Versionwas renamed toVersion - [Mix]
File.IteratorErrorwas renamed toIO.StreamError - [Mix]
mix newnow defaults to the--supoption, use--bareto get the previous behaviour
- [IEx] The
v0.10.2 (2013-09-03)
-
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.chunk/2,Enum.chunk/4,Enum.chunk_by/2,Enum.concat/1andEnum.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
hhelper - [IEx] Helpers
randccan handle erlang sources - [Integer] Add
odd?/1andeven?/1 - [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] 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/2 - [Regex] Allow erlang
reoptions when compiling Elixir regexes - [Stream] Add
Stream.concat/1,Stream.concat/2andStream.flat_map/2 - [String] Add regex pattern support to
String.replace/3 - [String] Add
String.ljust/2,String.rjust/2,String.ljust/3andString.rjust/3 - [URI]
URI.parse/1supports IPv6 addresses
- [CLI] Add
-
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
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 - [Kernel] Deprecate
%band%Bin favor of%sand%S - [List]
List.concat/2is deprecated in favor ofEnum.concat/2 - [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
- [IO] IO functions now only accept iolists as arguments
- [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
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 fixes
- [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 fixes
- [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 fixes
- [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 character - [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 fixes
- [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 fixes
- [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 fixes
- [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 fixes
- [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 fixes
- [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 fixes
- [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 fixes
- [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 fixes
- [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 fixes
- [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)
-
Backwards 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 behaviour
- [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