![**Show HN:**
*Hibana – Rust 用アフィン MPST ランタイム*
---
Hibana は、Rust でアフィン型制約を用いて *Multiparty Session Types (MPST)* を実装した軽量ランタイムです。通信プロトコルが静的に検証されるため、デッドロックやメッセージ順序の不一致などのバグを減らしながら、同時実行プログラムを書くことができます。
**主な特徴**
- **アフィン型付け** – 各チャンネル値は一度しか使用されないよう保証し、安全な所有権移譲を確保します。
- **ゼロコスト抽象化** – Rust 標準ライブラリの上に構築されており、追加のランタイムオーバーヘッドはありません。
- **プロトコル仕様** – グローバル通信パターンを記述する簡潔な DSL を提供します。
- **自動コード生成** – プロトコル定義から型安全なクライアント/サーバースタブを生成します。
**はじめに**
```bash
cargo add hibana
```
シンプルなチャットプロトコルを定義してみましょう:
```rust
use hibana::prelude::*;
#[derive(Debug, HibanaProtocol)]
pub enum Chat {
Send(String),
Receive(String),
}
```
参加者を生成し、同時に実行します。コンパイラがプロトコルを強制するため、順序外や重複したメッセージ送信は防止されます。
**Hibana を選ぶ理由**
- **安全性** – Rust の型システムがチャンネルの正しい使用を保証します。
- **パフォーマンス** – 標準的な所有権意味論以外にランタイムチェックはありません。
- **使いやすさ** – 宣言型プロトコル定義と自動生成コードでボイラープレートを削減します。
---
詳細については、GitHub リポジトリや付随するドキュメントをご覧ください。](/_next/image?url=%2Fscreenshots%2F2026-02-12%2F1770850373069.webp&w=3840&q=75)
2026/02/07 0:09
**Show HN:** *Hibana – Rust 用アフィン MPST ランタイム* --- Hibana は、Rust でアフィン型制約を用いて *Multiparty Session Types (MPST)* を実装した軽量ランタイムです。通信プロトコルが静的に検証されるため、デッドロックやメッセージ順序の不一致などのバグを減らしながら、同時実行プログラムを書くことができます。 **主な特徴** - **アフィン型付け** – 各チャンネル値は一度しか使用されないよう保証し、安全な所有権移譲を確保します。 - **ゼロコスト抽象化** – Rust 標準ライブラリの上に構築されており、追加のランタイムオーバーヘッドはありません。 - **プロトコル仕様** – グローバル通信パターンを記述する簡潔な DSL を提供します。 - **自動コード生成** – プロトコル定義から型安全なクライアント/サーバースタブを生成します。 **はじめに** ```bash cargo add hibana ``` シンプルなチャットプロトコルを定義してみましょう: ```rust use hibana::prelude::*; #[derive(Debug, HibanaProtocol)] pub enum Chat { Send(String), Receive(String), } ``` 参加者を生成し、同時に実行します。コンパイラがプロトコルを強制するため、順序外や重複したメッセージ送信は防止されます。 **Hibana を選ぶ理由** - **安全性** – Rust の型システムがチャンネルの正しい使用を保証します。 - **パフォーマンス** – 標準的な所有権意味論以外にランタイムチェックはありません。 - **使いやすさ** – 宣言型プロトコル定義と自動生成コードでボイラープレートを削減します。 --- 詳細については、GitHub リポジトリや付随するドキュメントをご覧ください。
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Summary
Hibanaは、マルチパーティセッションタイプ(MPST)をコンパイル時にデッドロックのない通信保証へと変換するRustライブラリです。
#![no_std]や#![no_alloc]といった組込みターゲットでも動作します。このライブラリは、プロトコルステップの線形使用を強制する単純なマーカーであるアフィンカーソルを利用し、各メッセージが一度だけ送受信されることを保証します。プロトコルはconst関数(g::send、seq、par、route)として記述され、マクロは使用せず全体のチューログリズムを表現します。ライブラリはこれらをコンパイル時にロール固有のコードへ投影し、BindingSlotと決定的なデュアルリングタップを介してトランスポートロジックとプロトコル規則を分離し、観測性を提供します。
MPST理論を基盤に、HibanaはeBPFスタイルのバイトコード仮想マシンを追加し、効果ポリシーをフィルタリングし、ホットリロード可能な動的ポリシーをサポートします。このクレートは「Preview」モードにあり、コア概念は安定していますが、より多くのトランスポートアダプターやデバッグツールが追加されるにつれてAPIが進化する可能性があります。
PING_PONGプログラム例では、グローバルチューログリズムをクライアントロールへ投影し、アフィンカーソル(send、recv)で実行する方法を示しています。Rust開発者、特に組込みシステムを対象とする方々には、Hibanaはコンパイル時のプロトコル安全性、予測可能なリソース使用、および堅牢な観測性を提供するCargo依存関係として有用です。本文
もしコンパイラがプロトコルのデッドロックフリーであることを証明できたら?
Hibana は Rust 用の affine MPST(多相セッション型)エンジンです。
#![no_std] / #![no_alloc] を対象に設計されており、1 回だけグローバルなコレオグラフィを記述し、コンパイル時にプロジェクションを行い、構築上で不正なプロトコル進行を防ぐ affine カーソルを実行します。
ステータス: Preview – コアアイデアは安定していますが、API は変更される可能性があります。
1. グローバル・コレオグラフィ
const PING_PONG: g::Program<_> = g::seq( g::send::<Client, Server, Ping>(), g::send::<Server, Client, Pong>(), );
2. コンパイル時プロジェクション
const CLIENT: g::RoleProgram<0, _> = g::project(&PING_PONG);
3. Affine 実行
コンパイラがプロトコル準拠を強制します。
let (client, _) = client.flow::<Ping>()?.send(&42u32).await?; let (client, pong) = client.recv::<Pong>().await?;
主な特徴
- Const Projection –
はg::Program
、g::send
、seq
、par
でプロトコルを構築します。純粋な const‑fn 合成;マクロは不要です。route - Affine Cursors – 各ステップが線形リソースです。セッションをスキップ・再利用・途中放棄することは、明示的に処理しない限りできません。
- Transport Agnostic –
とトランスポート API はワイヤ I/O をローカルコレオグラフィコードから切り離します。BindingSlot - Embedded First – Rust 2024、
、no‑alloc コアで、コアプロトコルパスのリソース使用を予測可能にします。#![no_std] - Deterministic Observability – デュアルリングタップ構成は観測者への影響を最小化しつつ、再現性/デバッグを確保します。
- Effect Policy Filter – eBPF に触発されたバイトコード VM;ホットリロード可能な動的ポリシー。
クレートとデモ
がコアクレートです。hibana- それ以外は実用性を証明する公開デモです。
はじめに
[dependencies] hibana = { git = "https://github.com/hibanaworks/hibana" }
GitHub • Discussions • Issues