v1.1.0¶
https://github.com/elixir-lang/elixir/releases/tag/v1.1.0
概要¶
強化¶
- Erlang 17, 18 の双方をサポート
- v1.2では Erlang 18 のみのサポートとなる予定
Enum,Dict,Taskモジュールに新規関数を追加MapSetデータ型を追加
廃止¶
Accessプロトコルにおけるopts[key]形式の文法¶
Accessプロトコルはopts[key]形式の文法をサポートしなくなる。opts[key]形式の文法はDictモジュールのサブセットとなる。- そのため、このように
Accessプロトコルを実装しようとすると警告が出る。 Accessモジュールやopts[key]形式が廃止となるわけではない。
ツール¶
- ExUnit の利用においてテストをスキップできるようになった。
- Mix で警告やエラーメッセージを強化。
- Mix のコンパイル速度を高速化。
mix profile.fprofタスクを追加。- Hex と Rebar でチェックサムを正しく取得できるようにするため、
local.public_keysを設定。
その他¶
CODE_OF_CONDUCT.mdをリポジトリに追加。
強化¶
Elixir¶
Application¶
Application.fetch_env!/2を追加Application.loaded_applications/0を追加Application.started_applications/0を追加
CLI¶
- Windowsのbashライクなシェルで
--werlをサポート
Dict¶
Dict.get_and_update/3を追加。廃止されたAccessプロトコルに似た振る舞いをする。Dict.get_lazy/3を追加Dict.pop_lazy/3を追加Dict.put_new_lazy/3を追加
Enum¶
Enum.random/1を追加Enum.take_random/2を追加Enum.min_max/1を追加Enum.min_max_by/2を追加Enum.reverse_slice/3を追加Enum.reduce_while/3を追加Enum.dedup/1を追加Enum.dedup_by/2を追加- パフォーマンス追求のため
Enumの各関数にインラインで共通的な map の使い方ができるようにした
File¶
File.lstat/1を追加。File.stat/1のような働きをするが、シンボリックリンクの情報を返すことができる。File.rename/2を追加
Integer¶
Integer.digits/2を追加Integer.undigits/2を追加
Inspect¶
inspect/2に:safeオプションを追加。デフォルトで有効。
IO¶
IO.ANSI.Docsで括弧書きのコードブロックをサポート
GenServer¶
GenServer.whereis/1を追加。任意のpidにGenServerのディスパッチを展開する。
Kernel¶
- 依存関係のため
:cryptoと:syntax_toolsを内包しないようにする。前者は暗号化されたデバッグ情報のためだけに必要で、後者は利用されていない。 var.Alias文法が使用され、かつ、それがコンパイル時にatomに展開されなかった場合に、raiseする。(以前は警告)- 関数シグネチャのための引数名を新世代のものに
::/2を特別なフォームとした- アンダースコア付きの変数が使用された場合に警告する
- バイナリ、8進数、16進数のリテラルでアンダースコアを許容する
- コード内でモジュール・アトリビュート、変数、文字列、数値が使用された場合に、警告する。但し、この表現には何の効果も無い。
- Unicodeのコードポイントにマップするため、文字列と文字リストにおいて
\uXXXXと\u{X*}をサポートする。
List¶
List.keytake/3を追加
Module¶
- ドキュメントのメタデータ内で関数シグネチャのための名前推定を向上
Process¶
Process.info/2でスペースのリストを許容
Set¶
MapSetデータ型を導入
Stream¶
Stream.dedup/1を追加Stream.dedup_by/2を追加Stream.transform/4を追加
String¶
String.jaro_distance/2により、名前などの文字列間でジャロ・ウィンクラー距離を計算することができる。Mixにおいてタスクが存在しない場合に “Did you mean?” と表示する機能に使われている。String.splitter/3を追加。文字列をストリームとして分割。
StringIO¶
- StringIOデバイスの出力をフラッシュするために
StringIO.glush/1を追加
Task¶
- タスクが実行中であるかをチェックし、そうでなければシャットダウンするための、
Task.yield/2とTask.shutdown/2を導入
Tuple¶
Tuple.append/2を追加
URI¶
- “ws” 及び “wss” スキーマに対してデフォルトのポートを追加
URI.to_string/1を追加
EEx¶
- スペース及び改行が前後する場合のみ、
<%と%>を自動的にトリムするため、:trimを追加。
ExUnit¶
ExUnitの出力にスキップされたテストの数を追加- データ構造をinspectするとき、またはエラーメッセージを取得するとき、ExUnitが全面的にダウンし失敗するバグを修正
assert/refuteで評価されたコードの意味を変更しないようにした。例えば、今回から、assert nil = some_expr()は、表現としては評価の結果falseな値になるものだが、今回は想定通り例外を上げる。- doctest の失敗に対して、正しい行番号をレポートする。
Logger¶
Logger.log/3にメタデータを含めた。メタデータ無しで動作させたい場合は、実行時に限り、Logger.bare_log/3を使うこと。
Mix¶
- Elixirのバージョンが正しいことを、インストールをアーカイブ化した後にチェックし、ミスマッチがあった場合にフィードバックを行う。
mix.exsでのrebarの依存ライブラリが、Mix でコンパイルされることを可能とした。:pathを介して rebar の依存関係を指定することが可能となったMix.Project.config_files/0でconfigディレクトリのサブディレクトリも扱えるようになった- Agent にコンフィグを保管することにより、Mixプロジェクトで動的コンフィギュレーションが可能となった
rebar.configファイル内で、rebar3スタイルのGit参照が可能となった- Mixプロジェクトのコンパイル時の依存関係については、再コンパイルするのみとした。Elixirプロジェクトにおいて、再コンパイルが高速化される見込みである。
- 利用できないアプリケーションを設定しようとしたときに警告する
- コードプロファイリングを容易にするため、
mix profile.fprofを追加 :onlyの定義と競合する依存関係がある場合にアボートする- Elixir 又は SCM が変更された場合に、プロジェクトを全体的に再コンパイルする
--sha512オプションを通すと、アーカイブインストール時にチェックサムを取ることができる- Hex と Rebar の依存関係のインストールを安全に管理するため、
mix local.public_keysを追加
バグフィックス¶
Elixir¶
CLI¶
- コマンドを実行する際にロガーのメッセージが消去されていることを確認
Code¶
:delegate_locals_toが多くのシチュエーションで選択されたモジュールにデリゲートするのに失敗し、大量のスタックトレースを出力していた。そのため、このオプションはimportによって置き換えられた。
Exception¶
- 例外メッセージを計算している最中、たとえそのメッセージが不正なものであっても、失敗しないようにした。
File¶
File.touch/2とFile.stat/2がUTCを入出力できるようにした。
Float¶
Float.parse/1で完全な科学的記数法をサポート
Kernel¶
- モジュール本体では
in/2引数を展開しないようにした - 未定義の atom/alias シンタックス
:foo.Barに対してシンタックスエラーを投げるようにした - ターゲットのディレクトリに書き込み可能でないためにコンパイルができない場合のエラーメッセージを強化
&and/2や¬/1その他のような記号でなはない演算子を捕捉できるようにした- ヒアドキュメントの終端が、エスケープされることなく行の中盤で偶然見つかった場合、例外を上げる
- 何もインポートされなかった場合、インポート失敗を警告しないようにした。
- キャプチャー演算子に255を超える数の引数が渡された場合に、例外を上げる。
Macro¶
Macro.to_string/1でキャプチャーを正しくコンバートするようにした
Module¶
Module.split/1内において、Elixirでないモジュール名を許容しないようにした