Jupyter で Rust を動かせる
- カテゴリ:
- ソフトウェア/ツール/OSS
- コメント数:
- Comments: 0
◆ Rust をインタラクティブに動かせる
◆ REPL もあるし Jupyter のノートブックの種類としても使える
◆ 最初の実行が遅いけど以降はそれほど遅くない
◆ REPL もあるし Jupyter のノートブックの種類としても使える
◆ 最初の実行が遅いけど以降はそれほど遅くない
こんなプロジェクトを見つけました
https://github.com/google/evcxr
Rust の REPL って昔は非公式なものがありましたが バージョンが上がったことで使えなくなり 実質 REPL は存在しない状態でした
これも非公式ですが Rust で REPL が使えるようになり Jupyter のカーネルとしても使えます
気楽にインタラクティブに動かして試せるというだけでその言語の使うハードルが一気に下がるのでとても良いものだと思います
よくみると Google のリポジトリになっていて Google 製なの?と驚きましたが 最後に注意書きがありました
元の作者が Google で働いてたってだけで Google が公式にサポートしてるプロダクトではないようです
基本は README のとおりにインストールするだけです
https://github.com/google/evcxr/blob/main/evcxr_jupyter/README.md
Linux は Ubuntu 系しか手順が用意されてないので WSL や Docker で試します
こういうのってだいたい何か問題が起きてググることになるのですが 特にエラーもなくスムーズにインストールできました
後は普通に起動します
ただ WSL やコンテナ内だとエラーが出ることがあります
ここは Rust とか関係なく Jupyter 側のものなのでいつもの方法で対処できます
OSError: [Errno 99] Cannot assign requested address
というエラーだと --ip=0.0.0.0 で IP を指定します
root で実行してるなら許可するために --allow-root をつけます
ブラウザが開けるようになってなければ --no-browser をつけます
起動したら Jupyter notebook の URL にアクセスして 新規ノートブックを作成しようとすれば Python3 以外の選択肢として Rust が並んでいます
ここで Rust を選べばあとはコードを書いて実行すれば動きます
という感じです

実行結果を表示するには最後が ; で終わらないようにする必要があります
だと 2 は出力出ませんが
だと出力されます
println! を使って出力もできます
実行ファイルは evcxr_jupyter になってます
:dep コマンドで crate のロードもできるようです
その他の説明や例はリポジトリ内で充実してます
https://github.com/google/evcxr/blob/main/COMMON.md
https://github.com/google/evcxr/blob/main/evcxr_jupyter/samples/evcxr_jupyter_tour.ipynb
https://github.com/google/evcxr
Rust の REPL って昔は非公式なものがありましたが バージョンが上がったことで使えなくなり 実質 REPL は存在しない状態でした
これも非公式ですが Rust で REPL が使えるようになり Jupyter のカーネルとしても使えます
気楽にインタラクティブに動かして試せるというだけでその言語の使うハードルが一気に下がるのでとても良いものだと思います
よくみると Google のリポジトリになっていて Google 製なの?と驚きましたが 最後に注意書きがありました
元の作者が Google で働いてたってだけで Google が公式にサポートしてるプロダクトではないようです
Jupyter で使ってみる
Jupyter で動かせるなら REPL よりも Jupyter のほうが複数行を書けたりブロックを分けれたりと便利なのでこっちを試してみました基本は README のとおりにインストールするだけです
https://github.com/google/evcxr/blob/main/evcxr_jupyter/README.md
Linux は Ubuntu 系しか手順が用意されてないので WSL や Docker で試します
rustup component add rust-src
sudo apt install jupyter-notebook cmake build-essential
cargo install evcxr_jupyter
evcxr_jupyter --install
こういうのってだいたい何か問題が起きてググることになるのですが 特にエラーもなくスムーズにインストールできました
後は普通に起動します
jupyter-notebook
ただ WSL やコンテナ内だとエラーが出ることがあります
ここは Rust とか関係なく Jupyter 側のものなのでいつもの方法で対処できます
OSError: [Errno 99] Cannot assign requested address
というエラーだと --ip=0.0.0.0 で IP を指定します
root で実行してるなら許可するために --allow-root をつけます
ブラウザが開けるようになってなければ --no-browser をつけます
起動したら Jupyter notebook の URL にアクセスして 新規ノートブックを作成しようとすれば Python3 以外の選択肢として Rust が並んでいます
ここで Rust を選べばあとはコードを書いて実行すれば動きます
fn add(a: i32, b: i32) -> i32 {
a + b
}
add(1, 2)
3
という感じです

実行結果を表示するには最後が ; で終わらないようにする必要があります
1 + 1;
だと 2 は出力出ませんが
1 + 1
だと出力されます
println! を使って出力もできます
#[derive(Debug)]
struct Point(i32, i32);
let p = Point(1, 2);
println!("{:?}", p);
Point(1, 2)
実行ファイルは evcxr_jupyter になってます
let args: Vec<String> = std::env::args().collect();
args
["/root/.cargo/bin/evcxr_jupyter"]
:dep コマンドで crate のロードもできるようです
:dep rand = { version = "0.7.3" }
let x: u8 = rand::random();
x
248
その他の説明や例はリポジトリ内で充実してます
https://github.com/google/evcxr/blob/main/COMMON.md
https://github.com/google/evcxr/blob/main/evcxr_jupyter/samples/evcxr_jupyter_tour.ipynb