Gleam はもはや Erlang ソースコードにはコンパイルしません。

2026/10/06 17:08

Gleam はもはや Erlang ソースコードにはコンパイルしません。

RSS: https://news.ycombinator.com/rss

要約▶

Japanese Translation:

Gleam バージョン 1.19.0 は、Erlang コードジェネレータの完全な書き換えによる大きなマイルストーンをマークします。コードジェネレータは現在、ソーステキストではなく抽象形式を出力するようになっています。このアーキテクチャ変更により、生成されたコードをバイナリ外部項形式から直接読み込むため、Erlang コンパイラーの前側プロセスをスキップでき、BEAM クラッシュレポートとスタックトレースでの正確な行番号を確保し、コンパイルパフォーマンスが劇的に向上しました。BEAM バイトコードを直接生成しないことで、進化している VM リリースとの互換性を維持するコストを回避し、Elixir の抽象形式使用という実績あるアプローチを活用しています。ベンチマークの結果、Erlang ターゲットでは v1.17.0 比で大幅な速度向上が見られ、開発中のインクリメンタルビルドは特に高速です。また、Go、Java、Elixir、Rust、C# のような言語との比較においても、架空の 100 モジュールテストにおいて Gleam は素早くコンパイルされます。追加の最適化としては、短いリストに対する直接コンストラクターコードの生成を行うスマートなリスト処理と、JavaScript における決定木ベースの割り当て最適化が含まれます。このリリースでは、開発者ツールの強化も行われており、言語サーバーへの完全なラベルサポート、API オーバーロードを通じた TypeScript タイプ情報の改善された保持、ビルドコマンドの改善(

--no-dev
フラグ、パッケージ情報に対する stdout 出力オプション、
.app
リソースファイルの生成)が含まれます。エラー報告もより精密となり、git メージコンフリクト、無効なレコード更新、手続き演算子、パターン不一致、プライベート型のアクセスに対して新しい特定のエラーが追加されました。これらの変更は、ユーザーが複雑なコンパイラー内部を管理する必要をなくしながら、高速なフィードバックループ、堅牢なツールング、優れた開発者体験を提供します。

本文

Gleam 1.19.0 リリース:新機能とパフォーマンスの劇的向上

Gleam は Erlang 仮想マシン (VM) および JavaScript ランタイム向けに設計された、型安全かつスケーラブルな言語です。 本日公開された Gleam v1.19.0 の主要な新機能と改善点を整理しました。

1. 新しいコンパイルターゲット(Erlang アブストラクト・フォーム採用)

直近の数ヶ月間で Giacomo Cavalieri が Erlang コードジェネレータを完全に書き換えました。

  • 出力形式の変更: 以前は Gleam から Erlang のソースコードを生成しておりましたが、現在は Erlang アブストラクト・フォーム (Abstract Forms) という中間表現 (IR) を生成します。
    • これは Erlang コンパイラーが内部で使用する木構造であり、外部項形式 (External Term Format) でバイナリエンコードされています。
    • 従来の「フロントハーフ(トークナイザーやパーサーの実行)」をスキップして直接読み込むことが可能です。

メリット

  • コンパイラのパフォーマンス向上: Erlang 上での Gleam プロジェクトのビルド時間を大幅に短縮しました。
  • メタデータの精度向上:
    • ランタイムへの位置情報(行番号など)が、元の Gleam ソースコードに対して正確になりました。
    • BEAM クラッシュレポートやスタックトレースにおいて、以前不正確だった「最近接の関数表示」を解消し、完全なエラー情報が得られるようになりました。
    • 将来的には
      edb
      などのデバッガーでのフルサポートが可能になる可能性がありますが、現状では検討中です。
  • コード品質の向上: 最も古く安定していた部分でしたが、最新の実装へ更新され、コンパイラ全体のハードルを一段引き上げました。
    • 「トランスパイラー」という言葉が使われる必要がなくなりました。

2. コンパイル速度の劇的改善 (ベンチマーク)

ベンチマークデータは

langcompilebench
(José Valim) を基盤としています。

  • 比較対象: 1.18.0 (中間表現導入前) から 1.19.0 (新機能実装後)。
    • キャッシュなしの完全リビルド(クリーンビルド)での比較。

ベンチマーク結果(Gleam v1.19 vs v1.17)

  • Gleam v1.19:劇的な速度向上が見られます。
  • インクリメンタルビルド: 開発プロセスではキャッシュが利用されるため、実際の速度はさらに高速化されます。

他言語との比較 (100 モジュール「hello world」コンパイル時間)

Gleam は以下の言語と比較し、非常に高速であることが示唆されました:

  • Gleam (JavaScript)
  • Gleam (Erlang)
  • Go
  • Erlang
  • Java
  • Elixir
  • Elm
  • Rust
  • C#
  • TypeScript

注意: 言語ごとのコンパイルコストはコードの多様性によります。あくまで一つの目安と捉えてください。

3. なぜ BEAM バイトコードを直接ターゲットにしないのか?

BEAM バイトコードジェネレータを作成して Erlang コンパイラーを凌駕しなかった理由です。

  • 不変性の欠如: ベアメ・バイトコードは VM のアップデート(機能追加/削除)により絶えず変化します。これに対応し続けるのは現実的ではありません。
  • 最適化の再現: 数十年来の実装された既存のすべての最適化をゼロから実装するのは困難です。
  • コスト対効果: Gleam はスポンサーシップで支えられており、リソースを最も効率的かつ持続可能な方法で活用する必要があります。現状の**「Erlang アブストラクト・フォームへのコンパイル」がスイートスポット**にあります。
  • コミュニティとの調和: Elixir も同様にアブストラクト・フォーム経由でコンパイルしており、Gleam でも十分です。

4. JavaScript ターゲットへの改善

JavaScript コンパイルにおける制御構造やデータ構造の最適化を行いました。

デシジョンツリーの割り当て最適化

  • 仕組み: John Downey が分治法 (divide-and-conquer) を用い、ネストされた
    if
    文を単一の条件に畳み込みました。
  • 結果: ブランチの数を減らし、JavaScript エンジンによる最適化がしやすくしました。
    • 以前: ネストされた深い
      if
      文(コード量が膨大)。
    • 現在: 扁平で簡潔な論理式。
    • 効果: コードバンドルのサイズ変化は小さいですが、実行時の効率は大幅に向上しました。

リストリテラルの最適化

  • 背景: Gleam の不変リストは JavaScript の可変アレイとは異なります。通常、リストリテラルは
    arrayToList
    関数を呼び出して変換されます。
  • 改善点: コンパイラーが短いリストリテラルに対して、アレイ構築を行わずに直接コードを実行するようになりました。
    • 以前:
      const numbers = arrayToList([1, 2, 3])
    • 現在:
      const numbers = prepend(1, prepend(2, prepend(3, empty)))
  • 効果: 特に多くの短いリストを使用するプロジェクト(例:Lustre ライブラリ)でパフォーマンス向上が見られました。

5. TypeScript API オーバーロード

Gleam コンパイラーは、型情報を保持しつつ TypeScript 宣言ファイルを生成します。

  • 問題点: 単一の関数定義では、コンテナ型の型パラメータ (
    number
    ) が
    unknown
    に汎用化され、型情報の損失を引き起こす可能性があります。
  • 解決策: Giacomo Cavalieri がAPI オーバーロードを追加しました。
    • 具体的な型(
      Box$<I>
      )を持つ場合は型情報を保持した関数定義を生成。
    • 汎用的な場合 (
      any
      ) を別に定義。
  • 結果: 型情報の損失を防ぎ、より安全な TypeScript 開発が可能になりました。

6. コマンドラインツールの改善 (Elixir/Erlang統合)

gleam
実行ファイルの機能向上により、Elixir の Mix や Erlang の rebar3 での Gleam コード利用が容易になりました。

  • .app
    ファイルの自動生成
    : コンパイル時に自動的に必要な
    .app
    リソースファイルを生成します。
  • 開発依存スキップ:
    compile-package
    コマンドに
    --no-dev
    フラグを追加し、ビルド対象から dev_dependencies を除外できます。
  • 出力フォーマットの多様化:
    • export package-information
      /
      export package-interface
      : 情報を標準出力 (stdout) に出力。
    • export javascript-prelude
      /
      export typescript-prelude
      : ファイルへの書き込みをサポート。

7. IDE サポートとツール機能の追加

  • ラベル対応: Alistair Smith らにより、言語サーバープロトコルにおけるフィールドと引数のラベルに対する完全サポートが実装されました(定義移動、参照検索、名前変更など)。
  • ブラウザ内フォーマット: John Downey が
    format_source
    関数を追加。Web ブラウザ内で Gleam コードのフォーマットを実行可能にしました(近々プレイグラウンドへの導入予定)。

8. エラーメッセージの改善

Gleam のデバッグを容易にするための細やかな対応です。

  • 構文エラーの詳細化: Git マージコンフリクトマーカや、存在しない演算子 (
    +=
    ,
    *=
    等) に対する明確なエラーを追加。
  • パターンマッチングの補助: Java などで有効な構文だが Gleam では無効な場合のヘルプメッセージを追加。
  • プライベート型の表示: 同一パッケージ内のモジュールがプライベート型を使用しようとした際、存在はするが非公開であることを明記したコンテキストを提供(外部依存パッケージへの漏洩防止)。
  • 型エイリアスのカスケードエラー対策: 無効な型エイリアス定義による連鎖エラーを解消。

9. サポートのお願い

Gleam は企業所有ではなく、主に月額 5 ドル〜20 ドルの寄付によって支えられています。

  • プロジェクトまたはコアチームメンバーへの支援をご検討ください。
    • 詳細は変更ログやスポンサーページを参照してください。

同じ日のほかのニュース

一覧に戻る →

2026/10/07 5:57

Decisions API が公開ベータ版を開始しました

## Japanese Translation: Decisions API は、テキストまたは画像の評価において Responses API より 10 倍の高速化を実現し、gpt-6-luna モデルを専有して動作する専用 POST /v1/decisions エンドポイントを通じて型付けされた結果を返します。現在公開ベータ版で提供中であり、General Availability は近日を予定しています。対応する具体的な回答タイプは 3 つあり、predicates(条件の確率)、choices(固定セットからの選択)、scores(ルーブリック評価)です。機能的には、API は単一のリクエスト内での独立した質問間で入力共有を可能にし、ワークフローを簡略化する一方で、依存関係のある決断は別々の順序実行呼び出しによって取り扱う必要があります。リクエストではテキスト入力またはインライン base64 エンコードされた画像を受け付けるが、ホスト URL および file_id 入力はサポートされていません。コスト効率の向上は、入力トークンのみに対して課金される(100 万トークンあたり 0.1 ドル)モデル採用と出力トークン料金の非課金化を通じて達成されます。また、HIPAA 準拠を米国、欧州、スイスデータセンターで確保するためのゼロデータ保持ポリシーも備わっています。開発者は、偽陽性と偽陰性の間のトレードオフに基づいてルーティング閾値を設定するためにラベル付けされた例を使用することで、コストと精度の最適化が可能です。これにより、条件チェック、固定選択、詳細な評価に対する高速かつ自動化された決定が最小の遅延で可能になります。

2026/10/07 1:03

EmbeddingGemma 2:オープンで軽量なマルチモーダル埋め込みモデル

## Japanese Translation: EmbeddingGemma 2 は、オンデバイス多模态埋め込みにおいて最も高性能なモデルとして、テキスト、画像、音声、ビデオ、コードを統一空間にネイティブにマッピングする画期的なローカル AI 機能の飛躍を示しています。7.4 億パラメータを有し、商用許諾の Apache 2.0 ライセンス下にある堅牢な Gemma 4 アーキテクチャを基礎とすることで、軽量さを維持しつつもベンチマークスコアで業界トップレベルの成績を収めます。その特徴は、Matryoshka Representation Learning(MRL)によるストレージ効率化であり、ベクトル次元を動的に削減することで最大 6 倍までのスペース削減を可能にします。オンデバイス性能向けに最適化されており(テキストのみウェイトの場合 Google Pixel 11 Pro で約 191MB の RAM を必要とする)、ローカルハードウェア上で直接長形式メディアを処理できる impressive な 8K トークンコンテキストウィンドウを搭載しています。ローカル索引付けにおけるコード性能に著しい向上をもたらすと同時に、埋め込みをローカルで生成することでオフラインクロスモーダル検索を実現しデータプライバシーを確保します。開発者はすぐに Hugging Face や Kaggle を介してモデルを利用でき、MediaPipe、LiteRT、WebGPU などのデプロイメントツールや vLLM、Ollama などのサービングフレームワークを活用し、外部クラウドサーバーに依存せず既存のワークフローへのシームレスな統合が可能です。この進展は、効率的かつオフライン AI リトリバルのための新たな業界標準を確立します。

2026/10/07 5:33

パラマウント・スカイダンスがワーナー・ブラザーズ・ディスカバリーとの1,110億ドル合併を完了しました。

## Japanese Translation: パラマウント・グローバルは、ワーナー・ブラザース・ディスカバリーとの歴史的な 1,110 億ドル規模の合併を正式に完了させ、去年別の取引で買収した企業であるスカイダンスという名前の新しいメディア会社を創設しました。この組み合わせには、2 つの最大の映画スタジオ、広範なライブ・スポーツ関連資産(CBS スポーツおよび TNT スポーツを含む)、主要なストリーミングプラットフォーム(パラマウント+ および HBO マックス)ならびに CBS や CNN などの主要ニュース事業、さらに深いコンテンツライブラリとブランドが統合されています。 この取引は、合併が競争を著しく減少させ反トラスト法に違反すると主張するカリフォルニア州およびその他の 11 の州からの法的な課題に直面しました。米国地方裁判所の裁判官は 7 月に合併が競争を害する可能性が高いと裁定し、これを受けて各州から和解案の提議が行われました。言論自由およびメディア擁護団体は、和解を拒否するよう裁判所に要請しましたが(和解は訴追した州の住民に対して「実質的な何ら物事もないものを与えるに過ぎない」と主張)、9 月 30 日にアラセリ・マルティネス・オルギン裁判官は、訴訟回避を実現し合理的な事実および法的解決として合意を批准しました。 和解に基づき、パラマウントは国内映画に対する最低限の投資額および配給閾値を満たす必要があり、基本ケーブルチャネルのライセンスリングは各実体の保有に対して個別交渉の下で継続されます。エレン・ケイガン法務長官は差し止め申請を行わず、裁判プロセスは州側の訴訟とマルティネス・オルギン裁判官が和解を受諾したことに中心を置きました。スカイダンスの将来の成功は、これらの投資要件を満たし、さらなる法的混乱なく継続的なライセンス交渉を管理することによって左右されます。

Gleam はもはや Erlang ソースコードにはコンパイルしません。 | そっか~ニュース