1 ポイント 投稿者 GN⁺ 2024-06-13 | 1件のコメント | WhatsAppで共有

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 データ型と日付移動関数

  • Elixir v1.17 は、Duration データ型と、日付・時刻・日時を指定した期間だけ移動させる API を導入。
  • 例:
    iex> Date.shift(~D[2016-01-31], month: 2)
    ~D[2016-03-31]
    
  • Duration は、区間、繰り返しイベント、スケジュールのモデリングに不可欠。
  • DateTime の場合、Elixir はタイムゾーンの変更を正しく処理する。

その他の主な変更点

  • 新しい 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件のコメント

 
GN⁺ 2024-06-13
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)foonil を返した場合でも、bar にアクセスしてエラーにはならない。

  • 今回のリリースは、私が求めていた最後のピースだ。これから先のステップが楽しみだ。言語はもう 100% 機能が出そろったと思う。

  • 型システムには大いに期待している。José がこれを「段階的型システム」と説明していたのを覚えている。これは段階的に追加される予定だ。次の段階で新しい型システム関連の機能が出るのか気になる。特に新しいコンパイラ最適化に期待している。

  • 今回のリリースにはとても興奮している。Elixir の IntelliJ プラグインにもっとリソースが投入されてほしい。VSCode を使うのは楽しくない。

  • 「集合論的型」が何を意味するのか知っている人はいるだろうか。プログラミング言語にはかなり関心があるが、この用語は初めて聞いた。