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/2Task.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/0config ディレクトリのサブディレクトリも扱えるようになった
  • 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/2File.stat/2 がUTCを入出力できるようにした。

Float

  • Float.parse/1 で完全な科学的記数法をサポート

Kernel

  • モジュール本体では in/2 引数を展開しないようにした
  • 未定義の atom/alias シンタックス :foo.Bar に対してシンタックスエラーを投げるようにした
  • ターゲットのディレクトリに書き込み可能でないためにコンパイルができない場合のエラーメッセージを強化
  • &and/2&not/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