
2026/11/05 0:25
常時利用可能:証明安全なシステム言語 Evergreen
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Evergreen は、高性能な機能性と極端な安全性の間の隔たりを架橋することを目的とした画期的なプログラミング言語であり、C よりも強力かつ Rust よりも安全であることを謳っています。その核心的な革新は、条件(
where 節)、事後条件(ensures 節)、所有権規則、チェック済み不変量などの明示的な契約を、それらを記述する論理のすぐ隣に直接統合することです。これにより、開発者は「何であるべきか(what must hold)」という要件を定義でき、強力な証明や帰納法による補題などを用いてコンパイラがこれを数学的に検証します。
性能ペナルティをゼロとすることを保証するため、Evergen はチェック後には消去される理想計算を採用し、実行時コードにおいて必要な作業のみを残して最終バイナリを生成します。この言語は、メモリアレイの配置、所有権、借用参照を通じてメモリを管理し、メモリ平面が有効である期間を追跡することで、有効な使用だけが残るように確保しています。現代的な Web 環境向けに設計された Evergreen は、WebAssembly で動作するインタラクティブプレイグラウンドを通じてコードの実行を可能にし、異なるデバイス間でのコード実行を実現します。ユーザーは、コンソール内で
Ctrl または ⌘ + Enter を使用して複雑な概念を検証し、例を直接実行できます。最終的には、Evergreen はメモリの安全性と論理的誤りに関する重要な業界課題を解決し、高信頼性プログラミングをすべての人にとってアクセス可能かつ効率的にします。本文
証明可能に安全なシステム用コード Evergreen
Evergreen は、明示的な契約、チェックされた不変条件、そしてメモリ管理の制御を一つの言語に統合します。システムが何を行うべきか記述し、それが実際に満たされているかをコンパイラで検証しましょう。
特徴と基本構文
Evergreen は C よりも強力であり、Rust よりも安全なアプローチを提供します。
- 構築子による保証: 値が構築される際的不変条件はコンパイラによって自動検証されます。
type NonZero = usize where self != 0; impl NonZero { fn new(x: usize) -> Self where x != 0 { NonZero(x) } } // 構築時に x が非ゼロであることが強制されるため、 // コンパイル時点で安全さが保証されます。
主な機能
01 / 不変条件をコード内に記述
前提条件、事後条件、およびデータの不変条件は、説明するコードの隣に記述します。これらはコンパイラが検証する義務となります。
- 前提条件: 関数への入力として保証される制約 (
) を定義。where - 事後条件: 関数が出力するべき結果の保証 (
) を定義。ensures
fn increment(n: usize) -> usize where n < usize::MAX // 前提条件:最大値より小さいこと ensures result > n // 事後条件:戻り値が入力値より大きいこと { n + 1 // 実装はシンプルに記述可能 }
02 / メモリを理解できるコンパイラ
明示的なレイアウト、所有権、借用参照を活用できます。Evergreen はメモリアドレス空間が有効な期間および妥当性を自動追跡します。
- 型安全な操作: 通常の変数宣言と参照操作が可能。
- 事実の記述 (
): 特定の時点で状態がどうあるべきかをコンパイラに証明させる構文。fact
let value: usize = 1; let cell = &mut value; *cell = 10; // 変化した後の状態について事実を宣言 fact same = value == 10;
03 / パフォーマンスに影響しない強力な証明
証明、帰納法の補題、および理想的計算は検証後に**消去(型推論の副作用なし)**されます。実行可能なコードは必要な機能のみを保持します。
- 理想計算 (
): 理論的な値や状態を定義。ideal - 検証後の最適化: コード生成時に証明部分は除去されるため、ランタイムオーバーヘッドはありません。
ideal let expected = integer::from(42); // 理論的期待値の定義 let value: usize = 42; // 実際の値が期待値と一致することが事実として検証される fact matches = integer::from(value) == expected;
プレイグラウンド(実験環境)
いつでも準備ができています。コンソールから例を実行し、出力を確認できます。
- 実行方法: WebAssembly コンパイラをロード後、
キーを押してコードを実行します。Ctrl / ⌘ + Enter