Hiroaki Yutani
「Rustをどう使うか」
ではなく
「Rustを使うとはどういうことか」
について話したい
2021年5月の発表:
効率的で信頼できるソフトウェアを誰もがつくれる言語
(公式ウェブサイトより)
→ これまで、低レベルへのアクセス性や速度という面でC++でなければ難しかったところがRustに置き換えられつつある
→ …ほんとに?
RustはC/C++を置き換える存在かもしれないが、今あるC/C++のコードをRustに置き換えるのは簡単ではないことも多い。
「Rustをどう使うか」
ではなく
「Rustを使うとはどういうことか」
について話したい
この辺りはまじで理解できていないので、かなり適当なことを言ってる可能性があります。
鵜呑みにせず、自分で調べましょう!
「C API」とは?
「ABI」と言う時、欲しいのは言語やバージョンに寄らない「stableな」ABI。
→ 事実上、CのABIが共通言語として使われる
→ お互いにC ABIを通じて関数を呼び出し合う
(ここまではあまり問題ない)
PROTECT()
でreference countしている1。reference countが0になったオブジェクトはGCの対象になる。
Rustは賢いので、オブジェクトが使われなくなったらすぐにデストラクタが走る。
PROTECT()
を忘れたままRustからR側のオブジェクトを参照しようとすると、気が付くと消えていてsegfaultで死ALTREP
の場合、ベクトルの中身がメモリに展開されているわけではないので直接参照できない。VECTOR_ELT()
とか)で値にアクセスするRのC API経由(VECTOR_ELT()
とか)で値にアクセスする
→ 読むだけでも状態を変更してしまうので、これをうっかり並列に実行すると死ぬ
一度すべて展開してしまう
→ 安全だが、非効率
(これはまあ、C-unwind ABIがstableに入れば解決する話らしい)
これは主にWindowsの問題で、RはUCRTだが、RustはまだMSVCRT(たぶん)という違いがあり、 そのために予期せぬエラーが起こるのでは、という話がある。
でもまだ遭遇したことなくてよくわからない。。おれに聞かれても。。。。。
先生の次回作にご期待ください!
install_github()
だと、ユーザーにRustをインストールしてもらう必要があるが、トラブルが多い
PATH
が通らないことがある→ なるべくbinary packageで配布したい!
All we need is the rustc/cargo toolchain to be installed on the CRAN win/mac builders (it already is on Fedora/Debian)
(意訳:いっやー、RustがCRANにインストールされてたらワシもこんなことせんでええねん。インストールされてたら万事解決なんやけどなあ…)
sorry, I think you misunderstood: CRAN machines have the compilers
(意訳:インストールされてるで)
Depends: R (> 4.1)
を指定する必要があるうおおおおおおおおおおやったあああああああああああああああああ!! pic.twitter.com/gv60Gb71nn
— えいつぴ (@eitsupi) January 20, 2023
CRAN | R-universe | GitHub | |
---|---|---|---|
審査 | あり | なし | なし |
バイナリ | 〇1 | △2 | × |
Rust version | not 最新 |
最新? | - |
The ecosystem is enormous (96k+ crates on crates.io) and growing, with investment from the systems development industry at large, including Google. Chrome relies heavily on third-party code, and we need to keep up with where that third-party investment is happening.
(Google Online Security Blog: Supporting the Use of Rust in the Chromium Project)
(意訳)
Rustのエコシステムには産業界も含めて多くの人や金がつぎ込まれていて、今後も発展していく。 Chromeは、様々な外部ライブラリによって成り立っているので、業界がRustに注力するならChromeも注力していく必要がある。

1
C++からRustにすると速くなりそう
→ まじで場合によるので、速度のためだけにやるのはやめた方がいい(勝ち筋が見えてるなら別)
C++だと謎のエラーが出るのでRustにすると安全そう
→ たぶんRustの方がましだけど、理解せずに使えるわけではない
r-wakalangに#rust
というチャンネルがあるので、そこで何でも聞いてください!(答えられるとは言っていない)