ジンジャー研究室

長めのつぶやき。難しいことは書きません。

Elm 0.19 の主な変更点

祝 Elm 0.19 リリース!

https://elm-lang.org/blog/small-assets-without-the-headache

1年半ウォッチしていたので覚えている範囲で書いてみる。

追記

↓ここに全部書いてあるじゃん。というか上の記事からリンクされてたし、この記事いらないじゃん。

github.com

コンパイルが速くなった

タプルで大量にパターンマッチした時に遅くなる件も改善。

--optimize でサイズの最適化

出力される JS のサイズが小さくなる。 関数単位のデッドコード除去が可能(Google Closure Library の advanced compile 相当) Debug モジュールを使用していると --optimize できないので注意。

単一コンストラクタでメモリを消費しなくなった

これは --optimize をつけた時だったかな、覚えてない。 type T = T Foo みたいにした時に T で包むのを省略する。

シングルバイナリになった

Elm Platform はもうない。 elm-make の代わりに elm make と打つ。

コマンドラインの刷新

  • --warn が消えた
  • elm init で最低限のプロジェクトを生成できるようになった
  • elm install をプロジェクトを初期化せずに elm make で全部やるようになった

elm-package.json が elm.json になった

アプリケーション用とライブラリ用で書き方が変わる。 アプリケーションの場合はバージョンが固定されて lock ファイルになる。 test-dependencies という項目ができたのでテスト用にもう一つ JSON を用意する必要がなくなった。 初期状態でインストールされるのは elm/coreelm/json の2つで、 HTML などは手動でインストールする必要がある。

elm-stuff の役割が変わった

パッケージやそのビルド生成物は ~/.elm にキャッシュされることになった。 CI とか Docker の設定で注意が必要かもしれない。

ユーザー定義の演算子が禁止された

もう作れない。

いくつかの演算子が消えた

  • ! はもうない
  • %modByremainderBy になった

トリッキーな関数が消えた

  • flip
  • curry
  • uncurry

人類には早かった。

シャドーイングが禁止された

同スコープに定義されている関数と同名のローカル変数を作ることができない。

公式リポジトリが elm-lang から elm になった。

ついでにバージョンが 1.0.0 にリセット。

Browser が登場

Html.program 系の関数がここに集約された。 Navigation, Mouse, Keyboard, Dom もここに統合された。 Navigation 相当の機能は fullscreen の時のみ使用可能。

Html.Events のデコーダーが柔軟になった

「デコードした時に特定の条件だった時に preventDefault しない」のようなことが可能になった。

DOM のイベントを同期的に実行するようになった

ブラウザのセキュリティ機能で、ユーザーインタラクションの直後じゃないとコピペなどが正しくハンドリングされない問題を解消した。

Debug モジュールの刷新

  • Debug.crash が Debug.todo になった。
  • toString が Debug モジュールに入った。

String.fromInt, String.fromFloat

toString は使わない。 型を変えた時に人知れず表示がバグっていたので嬉しい。

(,) が消えた

今は Tuple.pair

Html.Lazy が 8 引数まで拡張された

今まで3だった。

Array, Dict, Set の実装が新しくなった

速くなった。 Array は今までバグがあった。

Random の実装が新しくなった

PCG アルゴリズムを使うようになった。

Time の実装が新しくなった

より実用的になって elm/time として生まれ変わった。

Color が core から消えた

旧石器時代からあったやつ。

Regex が core から消えた

Parser を使って欲しそう。

elm-tools/parser が elm/parser に昇格

API も色々刷新された。

再帰的な関数のバグが直った

どれのことだったか忘れた。

リテラルで巨大なリストを作れないバグが直った

[1,2,3, ... 5800 ] みたいなやつ。

Module.Record.property を正しくパースするようになった

定数を使う時に苦労していたので地味に嬉しい。

エラーメッセージがさらに改善された

どれのことだったか忘れた。

Native -> Kernel

Native モジュールが Kernel モジュールに名称変更。 JS を書くのが許されているのは elm と elm-exploration の2つだけ。

ドキュメントが充実した

公式サイト・ガイド、コアライブラリの解説が増えた。

Union Type という表記が消えた

名称が紛らわしかった。今は Custom Type と書いてある。