Rest 言語仕様(概要)
Rest(Rustish C)は、Rust ABI に準拠しながら C++ 風の構文と柔軟な型システムを備えた、新しい低レベル言語です。RustとC++の橋渡しを目指しつつ、安全性と親しみやすさの両立を意図しています。
特徴
[編集]- C++風の構文(クラス、関数オーバーロード、演算子定義など)
- Rust ABIに準拠(trait object も dyn dispatch も使用可能)
- RustとのFFIが簡単
(Rustのvtable形式)使用可能
- unsafe 明示による制御された安全性の破棄
- Cの構造に近いメモリモデルと手続き型志向
- 所有権・借用は明示しない(ただしヒントはつけられる)
用途
[編集]- RustとC++の間でFFI橋渡しをする
- カーネル、低レベルドライバ、OSコンポーネントの記述
- Rustとの安全なインターフェースを持つミドルウェア記述
- レガシーC/C++コードのRust移植の段階的支援
基本構文例
[編集]クラス定義
[編集]class Circle : Drawable {
fn draw(self) {
println("Drawing circle");
}
}
関数定義
[編集]fn add(a: i32, b: i32) -> i32 {
return a + b;
}
外部関数呼び出し
[編集]extern fn c_func(x: i32);
traitとdyn dispatch
[編集]trait Drawable {
fn draw(self);
}
fn render(obj: &dyn Drawable) {
obj.draw();
}
ABIについて
[編集]Restのすべてのデータ型と関数は、Rustの#[repr(Rust)]および#[repr(C)]に相当するルールに基づいてレイアウトされます。FFI対象となる構造体や関数は extern 宣言によりRustやC/C++からリンク可能です。
ライブラリ互換性タグ
[編集]Restでは次のように、既存のC++ライブラリに対して互換性評価を行うことができます。
rest-compat:
✅ fmtlib ✔
✅ SDL ✔
🟡 boost::asio 部分的
❌ Qt 未対応
ライセンス方針
[編集]Restはオープン仕様であり、MIT + Apache 2.0 ライセンスのデュアルライセンスを基本とします。
今後の展望
[編集]Rustish ASM、Rustish Cとの連携(Rust ABIでの多言語共存)
独自パッケージ管理(rest build)の整備
ブートローダ、マイクロカーネル記述事例の公開
各言語ABIへのフロントエンド構想
[編集]Restは単なるRustへの変換器ではなく、言語間相互運用における新たな原則を示す実験でもあります。
各言語(Rust, Go, Zig, C++, etc.)が独自ABIを正しく持つこと
各言語が他言語のABIに向けたフロントエンド(C++→Rust ABIなど)を提供すること
C ABIという「狭い共通地帯」にすべてを詰め込むのではなく、ABI主権を相互に尊重し迎えに行く設計を促すこと
これは以下のような構造になります:
+-------------------+
| Rust ABI |
+-------------------+
↑ ↑
+--------+----+ +---------+
| C++ Frontend| | Rust本体 |
+-------------+ +---------+
+-------------------+
| Go ABI |
+-------------------+
↑ ↑
+--------+-----+ +---------+
| Rust Frontend| | Go本体 |
+--------------+ +---------+
呼称と命名案
[編集]Rustish C / Rustish C++:Rust ABIをターゲットとする C/C++ 構文
cpp2rustabi:C++構文をRust ABIに変換するコンパイラ
rest:本プロジェクトの通称(Rustの余白/休息としてもダブルミーニング)