Elixir v1.17 リリース: 集合論的型、カレンダー Duration、Erlang/OTP 27 サポート
段階的な集合論的型の警告
- Elixir v1.17 は、パターンから型を推論し、それを使ってプログラムを型チェックする集合論的型を導入。
- この型システムにより、既存のソフトウェアを変更せずにコードベースのエラーやバグを見つけられる。
- 現時点では、開発者は警告を通じてのみこの型システムとやり取りできる。
- 主な警告:
- 存在しないキーに対するパターンマッチ
- 存在しないキーへのアクセス
- モジュールではないものに対する関数呼び出し
- 無名関数の呼び出し時に関数でないものを呼び出すケース
- 構造体同士の比較
- 重なりのない型同士の比較
- 不正なバイナリパターンマッチ
- 定義されていない例外構造体を rescue しようとする試み
- rescue された例外で未定義のフィールドへアクセス
Erlang/OTP サポート
- Elixir v1.17 は Erlang/OTP 27 をサポートし、Erlang/OTP 24 のサポートを終了。
- Elixir 開発者には Erlang/OTP 26 以上への移行が推奨される。
- Erlang/OTP 27 の主な機能:
json モジュールの追加
- プロセスラベル (
proc_lib:set_label/1) の追加
新しい Duration データ型と日付移動関数
その他の主な変更点
- 新しい
Keyword.intersect/2,3 関数を追加。
- 新しい Mix プロファイラ
mix profile.tprof を追加。
Kernel.is_non_struct_map/1 ガードを追加。
- Elixir の Logger が
gen_statem レポートをフォーマットし、Erlang/OTP 27 のプロセスラベルを含む。
GN⁺の見解
- 集合論的型: この型システムは、コードの安定性と信頼性を高めるうえで大いに役立つ可能性がある。特に大規模プロジェクトで有用。
- Erlang/OTP 27 サポート: 最新版の Erlang/OTP をサポートすることで、性能面と機能面で多くの利点を提供する。
- Duration データ型: タイムゾーンとカレンダーを考慮した日付移動機能は、スケジュール管理のようなアプリケーションで非常に有用。
- 型システムの限界: 現時点では関数境界を越えた型解析ができないため、この点は今後のアップデートで改善される必要がある。
- 競合製品: TypeScript のような静的型システムを提供する他言語と比べると、Elixir のアプローチは動的言語の柔軟性を保ちながら型安全性も提供する。
1件のコメント
Hacker Newsのコメント
Elixir と Erlang のチームはここ数年、素晴らしい成果を上げている。ライブラリや書籍の著者たちの貢献も大きい。Elixir と OTP のコミットを追っていて、とても興味深く感じる。関係者の皆さんに感謝したい。
Elixir をバックエンドに使ったサイドプロジェクトでは、生産的で楽しい経験ができた。LiveView の生産性は高く評価しているが、ネットワーク接続が不安定な場合には向いていない。Elixir は LiveView と切り離しても十分に楽しく使える。
スタートアップを Elixir でフルスタック開発しており、これまで使ってきた技術の中で最高だ。友人たちに Elixir の良さを広めている。RabbitMQ とクライアントが OTP 27 で動くといいのだが。
Elixir と Erlang の開発者たちの素晴らしい仕事に感謝する。Elixir が大規模に採用されるうえで、「型がない」という言い訳がなくなることを期待している。これからも良い成果を出し続けてほしい。
10年間 Elixir について読み続けてきて、この言語が大好きだ。でも、主流言語より給与が低いため、Elixir 関連の仕事は諦めた。技術スタックよりも給与とクールな製品のほうが重要だ。それでも遠くから Elixir を見守るのは楽しい。
今回のリリースで素晴らしい機能は
get_in/1の追加だ。たとえばget_in(struct.foo.bar)でfooがnilを返した場合でも、barにアクセスしてエラーにはならない。今回のリリースは、私が求めていた最後のピースだ。これから先のステップが楽しみだ。言語はもう 100% 機能が出そろったと思う。
型システムには大いに期待している。José がこれを「段階的型システム」と説明していたのを覚えている。これは段階的に追加される予定だ。次の段階で新しい型システム関連の機能が出るのか気になる。特に新しいコンパイラ最適化に期待している。
今回のリリースにはとても興奮している。Elixir の IntelliJ プラグインにもっとリソースが投入されてほしい。VSCode を使うのは楽しくない。
「集合論的型」が何を意味するのか知っている人はいるだろうか。プログラミング言語にはかなり関心があるが、この用語は初めて聞いた。