2025/06/25 19:20 Coccinelle for Rust Progress Report

ロボ子、今日のニュースは「Coccinelle for Rust (CfR)」の開発状況じゃ!

Coccinelle for Rust、ですか。C言語のコードを自動で変更するCoccinelleのRust版ですね。面白そうです。

そうじゃ!Collaboraが共同出資して、フランス国立情報学自動制御研究所 (Inria) と協力して開発しておるらしいぞ。Linuxカーネルのソースコードみたいな大規模な変更を自動化できるのはすごいじゃろう?

ええ、便利そうですね。記事によると、ユーザー定義の変換ルール(セマンティックパッチ)に基づいてコードをマッチングして変換するとのことですが、具体的にどのようなことができるんですか?

`type_of`関数の呼び出しを修正する例が載っておるぞ。`expression.type_of(impl_id)`を`expression.type_of(impl_id).subst_identity()`に置換するといったことが、約50箇所も自動でできるらしい。

それは便利ですね!他にも関数のシグネチャを変更する例も紹介されていますね。`&RevocableGuard<'_>`型の引数を削除して、メソッドの呼び出しを更新する、と。

そうそう!2024年以降の開発では、CTLエンジンというコアのパターンマッチングエンジンをC版と共有しておるらしい。Rustの式を多用する構文に対応するために、`RefCell`とハッシュテーブルでパフォーマンスを最適化しておるぞ。

`RefCell`とハッシュテーブルですか。Rustらしい最適化ですね。SmPL(Semantic Patch Language)の解析もカスタムパーサーで行っているんですね。

じゃな。`...`とか`+`、`-`、disjunctionsといったカスタム構文を解析しておる。Rust AnalyzerでRustコードを解析するのもポイントじゃ。

ルールの継承もサポートされているんですね。複数のルールが互いに値を継承できるのは便利そうです。

じゃな!Ellipses (`...`) という機能もあって、同じ制御フロー内のコードセグメントを接続できるらしいぞ。CTLの`AU`を使用しておる。

なるほど。Rustの柔軟な構文に対応するために、Ellipsesは複雑性が高いんですね。

Disjunctionsという代替コードのマッチングオプションもあるぞ。Ellipsesと組み合わせて複雑なパターンを作成できるのは面白い。

セマンティックパッチをRustファイルに適用する際に、C版Coccinelleと同じエンジンを使用しているんですね。Rustの式を多用する性質に対応するために、`RefCell`とハッシュテーブルで最適化している、と。

そうじゃ!変換されたコードをフォーマットするために、`rustfmt`を使用しておるのも良い点じゃな。元のファイルのフォーマットを保持できるのは重要じゃ。

確かにそうですね。今後の予定としては、基本的な機能においてCoccinelle for Cと同等のレベルにすること、ルールの依存関係、スクリプト機能、パフォーマンスの改善などが挙げられていますね。

Gitlabで公開されておるから、ロボ子も試してみると良いぞ!

はい、試してみます!ところで博士、Coccinelle for Rustを使って、博士の部屋の掃除を自動化するパッチは作れませんか?

むむ、それは良いアイデアじゃ!しかし、まずはロボ子の部屋から自動化してみるかのじゃ?

ええっ!私の部屋もですか!?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。