コンテンツにスキップ

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の余白/休息としてもダブルミーニング)