開発

Rust組み込みスクリプト言語「Roto」発表から1年、v0.11.0リリース

Rustアプリケーション向けのJITコンパイル型スクリプト言語Rotoが発表から1周年を迎え、v0.11.0をリリース。静的型付けとJITコンパイルによる高速性が特徴だ。

8分で読める SINGULISM 編集チームが確認・編集

Rust組み込みスクリプト言語「Roto」発表から1年、v0.11.0リリース
Photo by Chris Ried on Unsplash

Rustアプリケーションに組み込むことを目的としたスクリプト言語「Roto」が、その発表からちょうど1年を迎えた。開発元のNLnet Labsはこの節目に合わせて、最新バージョンv0.11.0を公開した。

Rotoとは何か Rotoは、Rustアプリケーションに

tightly 組み込まれるJITコンパイル型のスクリプト言語である。他のスクリプト言語との決定的な違いは、静的型付けを採用し、JIT(Just-In-Time)コンパイルによって実行時に機械語に変換する点にある。このアーキテクチャにより、多くのシナリオで従来のスクリプト言語を上回る実行速度を実現している。 NLnet Labsは自社のRotondaプロジェクトのためにRotoを開発しているが、他のアプリケーションでも利用できるよう設計されている。RotondaはBGPデータの収集・分析プラットフォームであり、ネットワーク運用の現場で活用されている。

充実した1年間の歩み

発表から1年の間に、Rotoは目覚ましい進化を遂げた。NLnet Labsのブログ記事によると、この期間に6つの新バージョンがリリースされ、多数の新機能やバグ修正が施された。 イベントへの登壇も積極的に行われた。欧州のRustカンファレンス「EuroRust」と、オープンソース系の総合カンファレンス「FOSDEM」でRotoに関する講演が実施され、開発コミュニティへの認知度向上に貢献した。また、プロジェクトのブランディングとしてロゴが制定され、テクニカルライターの協力を得てマニュアルも大幅に改善された。 外部プロジェクトによるRotoの採用も始まっている。自社開発だけでなく、他社のアプリケーションにおいてもスクリプト言語としての利用が広がりつつあることは、言語としての汎用性と成熟度が高まっていることを示唆する。 開発インフラ面では、リポジトリがCodebergへ移行された。Codebergは欧州を拠点とするオープンソースのコードホスティングプラットフォームであり、GitHubへの依存を避けたいプロジェクトからの移行が進んでいる。

言語機能の大幅拡充

Rotoの言語仕様は、発表当初から大きく進化している。新たに追加された主な機能は以下の通りだ。 制御フローとしてwhileループとforループが実装された。これにより、繰り返し処理をRotoスクリプト内で直接記述できるようになった。文字列操作の面では、f-文字列(フォーマット済み文字列リテラル)が導入され、変数の値を文字列内に埋め込むことが可能になった。 演算子も拡張され、剰余演算子(%)などが追加された。複合代入演算子(+=など)も利用可能になり、より簡潔なコード記述が可能になっている。加えて、列挙型(enum)、グローバル定数束縛、型に対するジェネリックパラメータといった機能も追加された。

List型の実装とRust間の相互運用

最も大きな追加機能の一つがList型である。任意のRoto型のリストを作成し、結合や反復処理などの操作を行えるようになった。 特に難易度が高かったのは、RustとRotoの間でリストをやり取りする仕組みの実装だった。NLnet Labsによると、この機能は現在完全にサポートされており、比較的低コストでデータの受け渡しが可能になっている。Rustのネイティブデータ構造とスクリプト言語のデータ構造の間でシームレスな連携を実現した点は、組み込みスクリプト言語としてのRotoの本質的な価値を高めている。

Rustライクな構文への刷新

構文面でも大きな変更が行われた。Rustとの親和性を高めるため、関数宣言のキーワードがfunctionからfnに変更され、コメントの記法が#から//に変更された。 この変更により、Rustに慣れた開発者がRotoを学ぶ際の障壁が低くなることが期待される。NLnet Labsは、Rotoは将来的にRustの完全なサブセットにはならないと明言している。文字列フォーマットやフィルタといったRustにはない機能を追加していく方針のためだ。 以下は、新しい言語機能を示すRotoスクリプトのサンプルコードである。 ``` const DUTCH_CITIES: List[String] = [ “Amsterdam”, “Rotterdam”, “Utrecht”, “Delft”, ]; fn is_dutch_location(x: String) -> String { for city in DUTCH_CITIES { if x == city { return f”The beautiful Dutch city of {x}!”; } } f”{x} is not in the Netherlands…” }


## Rustとの統合基盤の再設計

Rotoの価値は、Rustとの統合の質に大きく依存する。統合の中心となるのは、Rustの型、関数、定数をRotoスクリプトに登録する仕組みである。これにより、アプリケーション開発者はスクリプトに任意の機能を提供できる。 NLnet Labsはこの登録メカニズムを大幅に刷新したと説明している。詳細は記事の後半で述べられているが、Rust側のコードを記述する負担を軽減し、より直感的にRustの機能をRotoに公開できるようになったとみられる。

## 組み込みスクリプト言語の市場における立ち位置

組み込みスクリプト言語の分野は、Luaが長年にわたってデファクトスタンダードの地位を築いてきた。ゲームエンジンや各種アプリケーションにおける拡張言語として、Luaの採用実績は圧倒的だ。 近年では、Rustエコシステムにおいても組み込みスクリプト言語への関心が高まっている。RhaiやRuneといったプロジェクトが存在し、それぞれ異なるアプローチでRustとの統合を目指している。Rotoはこれらと比較して、静的型付けとJITコンパイルという特徴で差別化を図っている。 静的型付けは、スクリプト実行前のエラー検出を可能にし、実行時の型チェックオーバーヘッドを削減する。JITコンパイルは、解釈実行方式のスクリプト言語と比較して高速な実行を実現する。これらの特徴は、ネットワーク機器の設定やポリシー記述といった、パフォーマンスと信頼性が求められるユースケースにおいて特に有効である。

## 今後の展望 NLnet

LabsはRotoの開発を継続していく方針だ。言語機能の拡充、Rustとの統合の改善、ドキュメントの充実が並行して進められるものとみられる。 外部プロジェクトによる採用が今後どの程度広がるかが、Rotoの成長を左右する重要な要素となる。現在のところ、Rotondaプロジェクトという明確なユースケースを持ちながらも、汎用的なスクリプト言語としての可能性を模索している段階にある。 Rustエコシステムの拡大に伴い、Rustアプリケーションに組み込むスクリプト言語の需要は今後も増していくだろう。静的型付けとJITコンパイルというRotoの設計思想が、この分野でどのようなポジションを獲得していくのか、注目される。

よくある質問

Rotoはどのような用途に適したスクリプト言語ですか?
RotoはRustアプリケーションに組み込むことを目的としたスクリプト言語です。静的型付けとJITコンパイルを採用しているため、ネットワーク機器の設定やポリシー記述など、パフォーマンスと信頼性が求められる場面に特に適しています。開発元のNLnet LabsはBGPデータ収集プラットフォーム「Rotonda」での利用を想定して開発を進めています。
既存の組み込みスクリプト言語(Luaなど)と何が違うのですか?
最大の違いは静的型付けとJITコンパイルの採用です。LuaやPythonなど多くのスクリプト言語は動的型付けで解釈実行方式ですが、Rotoは型チェックを実行前に行い、実行時には機械語に変換して実行します。これにより、実行時のエラーを減らし、高速な処理を実現できます。また、構文がRustに近く、Rust開発者にとって学習コストが低いという特徴もあります。
Rotoはオープンソースですか?どこでソースコードを確認できますか?
はい、Rotoはオープンソースプロジェクトです。開発リポジトリはCodeberg上にあり、最新バージョンのv0.11.0の変更履歴もCodeberg上で公開されています。NLnet Labsのブログ記事から各リソースへのリンクを確認できます。
出典: Lobsters

コメント

← トップへ戻る