概要
- Gleam v1.19.0 がリリースされ、新しいErlangコード生成方式を採用
- コンパイル速度 とデバッグ体験が大幅に向上
- JavaScript向け最適化 やTypeScript型サポートも強化
- 他ビルドツールや 言語サーバー の機能が拡充
- コミュニティ主導で 持続可能性 を重視した開発方針
Gleam v1.19.0の新機能と改善点
Erlangコード生成ターゲットの刷新
- Giacomo CavalieriによるErlangコードジェネレータの全面再設計
- 従来のErlangソースコード出力から Erlang抽象形式 出力へ移行
- 抽象形式はErlangコンパイラの中間表現であり、直接バイナリ形式でコードをロード可能
新ジェネレータのメリット
- コンパイラ性能の向上 により、Erlang向けGleamプロジェクトのビルド時間を大幅短縮
- ランタイムで利用できる 位置メタデータ がGleamソースに忠実となり、BEAMのクラッシュレポートやスタックトレースの行番号が正確に
- デバッガ(例: edb)でのGleam完全対応も将来的に可能
- コード品質の向上と最新の開発基準への適合
コンパイル速度の比較・ベンチマーク
- José Valimのlangcompilebenchプロジェクトを基に100モジュール・各100関数のコンパイル時間を測定
- v1.17.0とv1.19.0で 大幅な速度改善 を確認
- 他言語(Go, Java, Elixir, Elm, Rust, TypeScript等)とも比較し、Gleamのビルドが高速であることを示唆
- José Valimのlangcompilebenchプロジェクトを基に100モジュール・各100関数のコンパイル時間を測定
BEAMバイトコード直接生成をしない理由
- BEAMバイトコード仕様がErlang VMのリリースごとに進化し続けているため、 保守コスト が高い
- Erlangコンパイラが長年かけて実装した最適化を再現するのは困難
- コミュニティ主導で 持続可能な開発リソース を重視
- Elixirも同様に抽象形式を採用している実績
JavaScript向け最適化
分岐最適化(Decision tree assignment optimisation)
- John Downeyによるcase式のif文最適化
- ネストしたif文を単一条件式にまとめ、 コードの分岐と変数数を削減
- JavaScriptエンジンによる最適化効率向上
- John Downeyによるcase式のif文最適化
リストリテラル最適化
- 短いリストリテラルをarrayToList関数経由ではなく、 直接的なGleamリスト構築コード に変換
- パフォーマンス向上、特にLustreライブラリ等短いリスト多用時に効果大
- 長いリストは従来通りarrayToListを利用
- 短いリストリテラルをarrayToList関数経由ではなく、 直接的なGleamリスト構築コード に変換
TypeScript APIオーバーロード
- カスタム型判定関数の型情報損失を解消するため、 オーバーロード定義 を追加
- 型パラメータを保持しやすくなり、TypeScriptとの統合性が向上
- カスタム型判定関数の型情報損失を解消するため、 オーバーロード定義 を追加
他ビルドツール・開発体験の向上
他ビルドツール対応の強化
- ElixirやErlangのビルドツール(Mix, rebar3)でのGleamサポートを想定
- .appリソースファイルの自動生成
- --no-devフラグによるdev_dependencies除外ビルド
- 各種情報のstdout出力やファイル出力対応
- ElixirやErlangのビルドツール(Mix, rebar3)でのGleamサポートを想定
言語サーバーのラベルサポート
- Alistair Smithによる フィールド・引数ラベルのgo-to-definition, find-references, rename 機能追加
- 開発効率とIDE体験の向上
- Alistair Smithによる フィールド・引数ラベルのgo-to-definition, find-references, rename 機能追加
WebAssemblyによるブラウザ上でのGleamコード整形
- ブラウザでGleamコードを 自動整形 できる機能の提供
Gleamの今後とコミュニティ
コミュニティ主導・持続可能性重視の開発方針
- 限られたリソースの中で、長期的な互換性と信頼性を重視
- Elixirなど他言語との協調・相互運用性の確保
- スポンサーシップ による開発支援
Gleam v1.19.0 はパフォーマンス、DX、エコシステム拡充のバランスを重視した進化を遂げている
チームおめでとう!Gleamが大好きで、Gleamのコードを書くたびに本当に楽しいよ。