====== 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でないモジュール名を許容しないようにした Protocol -------- Range ----- Regex ----- Stream ------ EEx === ExUnit ====== Logger ====== Mix === ------------------------- 軽度の廃止 (警告は出ない) ------------------------- Elixir ====== Behaviour --------- Enum ---- Kernel ------ Regex ----- ---- 廃止 ---- Elxiir ====== Access ------ Kernel ------ String ------