HCRにおけるRust
サーバー再生から組み込みロボットファームウェアまでRustで実装
HCRは、方針、再生、プロトコル状態、検証済みハードウェア制御が交わる部分にRustを使います。ブラウザーUIはReactとBlockly、サービスと組み込みゲートウェイはRustです。
技術構成
2つのRustランタイム、2つの配備制約
採点サービスは追加専用のhcr.v1契約と権威的再生を使います。現在のno_std ESP8266ゲートウェイは上限付きHTTP/JSONサーボAPIを実行し、MQTTとCBORは計画段階です。
Rust · MQTT over WebSocket · HTTP binding
Service
サーバー側でプログラムを再生し、適応型問題バンクを運用して、ラウンドの期限と順位を管理します。
hcr-backend
hcr.v1 · JSON and CBOR
プロトコル
各メッセージを1つのエンベロープに収め、ULIDで対応付けます。マイナーバージョンでは追加のみを認め、受信側は未知の内容をエラーにせず破棄します。
hcr-backend/schema
Rust (no_std) · ESP8266 · Arduino C++ as a hardware library
ハードウェア
5サーボの実機では、起動方針、ルーティング、HTTP/JSON、サーボ状態をRustが担い、C++はバイト指向C ABIの背後に限定されます。ゲートウェイのMQTTは未実装です。
hcr-fw
オープンソース
HCRを支えるHotaru Rustエコシステム
HCRはバックエンドサービスのクレートをcrates.ioで公開し、Hotaru上にサービスと組み込みプロトコル層を構築しています。クレート、公式サイト、コアリポジトリ、別管理のMQTT実装を確認できます。
crates.ioのHCRクレート
hcr
カタログアクセス、権威的再生、適応セッション、任意のHotaru HTTP統合を提供する、公開済みのHCRバックエンドサービスコアです。
crates.io/crates/hcrフレームワーク公式サイト
hotaru.rs
no_std対応コアを備えた、小規模でプロトコル指向のRustフレームワークHotaruの公式多言語紹介です。
hotaru.rs/GitHubのコアとHTTP
Hotaru
Hotaruエコシステムで使われるプロトコル中立コア、ランタイムアダプター、HTTPスタック、ルーティング、エンドポイントツールです。
github.com/Field-of-Dream-Studio/hotaruGitHubのMQTTとブローカー
Hotaru MQTT
独立したMQTTクライアントとブローカー実装です。HCRは現在HTTPを使い、MQTTはデバイスとアプリ向けの計画中トランスポートです。
github.com/fds-pmine/hotaru_mqtt設計
方針はRust、C++はハードウェアライブラリ
依存関係は一方向です。外部ハードウェア関数を宣言するのは1つのcrateだけで、境界を通るのはバイトです。Arduino文字列、C++オブジェクト、ルート、JSON、アプリ状態は渡しません。
Rustが担当
- 起動方針と協調型エグゼキューター
- Hotaruのルーティングとプロトコル
- HTTPの解析と応答
- サーボの検証と状態
C++の担当
- クロック、割り込みマスク、ウォッチドッグ、再起動、ヒープ、乱数、シリアル
- Wi-Fiアクセスポイント/ステーションモード、低水準TCP/UDPハンドル
- キャプティブDNSとSPIFFSハンドル
- GPIO、PWM、サーボパルス書き込み、低水準OTA書き込み
Rust
HCRにおけるRustの意味
HCRは、決定論的再生、明示的なプロトコル型、制御された並行処理、狭い組み込み境界が必要な部分でRustを使います。これは具体的な設計判断であり、HCRのすべてがRust製という意味ではありません。
ブラウザーUIはReactとTypeScriptで構築されています。HCRは独立したプロジェクトであり、Rust ProjectまたはRust Foundationとの提携や推奨関係はありません。
ハードウェア