本連載のバックナンバー
はじめに
この連載も1年ぶりになってしまいました。
今回はリポジトリのメンテナンスも兼ねて、ちょっとした作業を行っておきます。
具体的には、今まではエラーを扱うために、定番である anyhow
を使用していましたが、将来を考えて mietteというライブラリへの差し替えを行います。
miette
は thiserror
や anyhow
との高い互換性があり、かつ美しくユーザフレンドリなエラー表示を行ってくれるライブラリです。
その前にまずは恒例となった、リポジトリが使用するLLVMの更新を行いましょう。
(ほぼ)最新のLLVMへのアップデート
2024-12-31現在、LLVMは19が最新版ですが、使用しているLLVMラッパーであるinkwellが未サポートです。
LLVM19をサポートするPRが送られてはいるので、これがマージされるまではLLVM18を使用することにしましょう。
Cargo.toml
の inkewll
の行を以下のように変更します。
inkwell = { version = "0.5.0", features = ["llvm18-0"] }
また、LLVMのバージョンを上げたことにより、deprecation warningが発生しています。その対応としてcodegen.rs
の 56行目の .i8_type()
を行ごと消しておきます。
これが終わったら miette
の追加です。
miette
の追加
miette
は anyhow
との高い互換性を維持しており、機械的な置き換えと多少の修正だけで anyhow
からの乗り換えが完了します。
まず Cargo.toml
の anyhow
の行を消し、その代わりに以下の行を追加します。
miette = { version = "7.4.0", features = ["fancy"] }
また、すべてのコードの
use anyhow::{anyhow, Result};
という行(anyhow
とResult
が逆になっているところもあるかもしれません)を
use miette::{miette, Result, IntoDiagnostic};
に書き換えます。
次に、コード中の anyhow
という文字列を miette
という文字列に一括置換します。そして最後に、エディタ上でエラーになっている ?
を .into_diagnostic()?
で置き換えるだけで、とりあえずの乗り替えが完了します。
終わりに
今回は久々ということで、リポジトリのメンテナンスだけに終始してしまいました。
次回以降で気が向いたら、エラー箇所の表示やそのための各 Node
のコード上での位置の保存など、この miette
の長所を生かすような変更をいれたいと思います。