C*:C言語に証明を統合し、プログラマ自身によるリアルタイム検証を可能にする

C*: Unifying Programming and Verification in C

システムソフトウェアの安全性検証は重要ですが、従来の検証ツールはプログラマの日常開発から切り離されており、検証済みソフトウェアの開発・保守コストが高くなっています。北京大学らの研究チームが提案するC*は、C言語を拡張して証明コードブロックを実装コードに埋め込めるようにし、シンボリック実行エンジンとLCFスタイルの証明カーネルによりリアルタイムな検証を実現します。Cを共通言語とすることで実装と証明の開発を統一し、再利用可能な証明ライブラリも構築可能です。プロトタイプ実装とpKVMのバディアロケータのattach関数を用いた評価により、幅広いCプログラミングの慣用句を検証できることを示しています。

C*は、Cを共通言語として実装コードと証明コードの開発を統合し、プログラマが自身のコードの検証に参加できるようにする。
  1. eggy

    私はしばらくこの馬に乗っています。Ada/SPARKを学ぶことに決めました。Ada 2022は新しいSPARK 2014アップデートを供給し始めるでしょう。ええ、両方とも冗長で、そういうのが好きでなく、Pascal風の構文が好きでないなら。信じてください、私はAPL/J/k/uiua/BQNやForth、ASMが好きです。私は通常、構文にはこだわりません。プログラミング言語とエコシステム(多くの人が考える以上に重要)があなたのニーズを満たす限り。私は2018年にRustを試し、2023年にも再度試しましたが、非常に複雑で、まあ、構文は好きではありませんでした。MLやHaskellに似た構文の方が好みでした。Zigは良さそうでしたが、ユースケースが異なり、新しすぎました。結局、Ada/SPARKは何十年もの間、巨大で高信頼性・高安全性のアプリケーションで使われてきました。Rustは彼らの愛の一部を得つつあり、その逆も然りです。AdaCoreは検証済みのRustコンパイラを作成しましたが、実際の製品(Blacktailホイスト)を開発中であり、高安全性と標準認証を達成するには、ツールセットと保証、監査と受け入れの容易さが必要です。航空宇宙、防衛、鉄道、自動車を考えてください。私は1977年にプログラミングを始めたので、ASM/Cにはいつも心の中に場所があります。F#、F*、MSのLOWを試しましたが、それらは良いですが、Rustと同様に、Ada/SPARKのような実際の遺産がありません。私はShenを使って、ソフトウェアの安全性がそれほど重要でない分野の形式的に検証されたモデルを書いていますが、それは新鮮だと感じます。しかし、私の本業は、Rustがより成熟するまでAda/SPARKに集中することです。

  2. IsTom

    私は分離論理のコンセプトが他の誰にも負けず好きですが、これはそれではないと思います。例を見てください。ループ不変条件だけで例全体よりも長いです。これはエルゴノミクスの問題だけでなく、仕様バグの余地を多く残します。そして、形式検証の人々と検証したいCコードを書く人々の交差点はそれほど大きくないのではないかと思います。

  3. gavinray

    私は、検証を意識した言語が必須になると本当に思います。これについて最近少し書きました。https://gavinray97.github.io/blog/design-by-contract-and-eff...

  4. slowcache

    形式検証は非常に興味深い分野だと思いますが、私にとってはこれは無理です。なぜなら、私のキーボードには逆さまのEがないからです。

  5. Taikonerd

    著者らはこれを引用していますが、言及するだけです:これはF*のように聞こえます。もう一つの証明指向言語です。(https://fstar-lang.org/) F*はMLファミリーの言語なので、C*とはかなり見た目が異なります。

この日のほかの記事

2026-09-08