Skip to content

chumsky 0.10 → 0.12 への upgrade #44

@rail44

Description

@rail44

背景

cargo outdated の棚卸しで chumsky だけ据え置きにした。0.10 → 0.12 で Spanned<T> の表現が変わっており、spctr の AST 全体が pub type Spanned<T> = (T, Span); を前提に書かれているので影響範囲が広い。

  • 一度試した結果は chumsky-0.12 ブランチで(push せず削除済み、再現はローカルで chumsky = "0.12" に上げるだけ)
  • ビルドエラー: expected struct Spanned<Expr>, found tuple (Expr, Range<usize>) がほぼ全モジュールで発生

何が変わった

  • chumsky 0.10: Spanned<T> = (T, Range<usize>) 互換
  • chumsky 0.12: chumsky::span::Spanned<T> は独立 struct(.value() / .span() でアクセス)
  • combinator チェーンの map(...) で chumsky の Spanned が投げ込まれるので、境界で変換するか AST 側を移行する必要

推奨手順

  1. src/ast.rsSpanned<T> を tuple alias から自前の struct に切り替え
    #[derive(Clone, Debug)]
    pub struct Spanned<T>(pub T, pub Span);
    chumsky の Spanned は使わず、ファイル境界で自前の Spanned に詰め替える方針が AST の広範囲書き換えを避けられて手堅い
  2. 各モジュールの .0/.1 access を確認(tuple の場合と同じインデックスアクセスができるよう Spanned struct を設計すれば多分 minimal)
  3. src/parser.rs の chumsky combinator を 0.12 API に書き直し
    • .boxed() の挙動 / 場所が変わってないか要確認(型爆発の再来に注意)
    • cargo build --timings でビルド時間を計測しながら進める
  4. src/typeck.rs の per-node types のキー(&Spanned<Expr> as *const _ as usize)が引き続き AST の安定アドレスを指すか確認
  5. テストは JIT 34 + snapshot 24 が全パスすることを確認

注意

  • 「9 分ビルド」の前科あり。.boxed() 配置が壊れると再発する
  • 1 セッションで安全に終わるサイズではないので、別のまとまった時間で集中的にやる

参考

  • 元の棚卸し commit: 63339e0(clap 2 → 4 等、chumsky 据え置き)
  • 関連 ROADMAP セクション: chumsky の型爆発についてのメモ

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions