Rust extension gem
C拡張 gem の作り方
https://guides.rubygems.org/gems-with-extensions/
C拡張の書き方
https://github.com/ruby/ruby/blob/master/doc/extension.rdoc
Rust extension
https://blog.rubygems.org/2022/04/07/3.3.11-released.html
Ruby 3.1.1 以上が必須
https://github.com/rubygems/rubygems/pull/5175
Rust extension が入ったPR
https://briankung.dev/2022/02/02/writing-a-rust-gem-from-scratch/
ブログポスト
https://github.com/rubygems/rubygems/tree/f91ee8a6465e220f61795d539f7e901b224561fb/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example
example
Rust extension を書くための crate
https://github.com/matsadler/magnus
すごく高機能ぽい
Rust の struct と Ruby の class の紐付け
自動で型変換してくれる
変な値が来たらエラーを返してくれる
https://github.com/udzura/coffret
ruby の C API のいい感じのラッパー
普通に gem 作るときは magnus 使って、Ruby の C API を触る必要があったら coffret 使うのが良さそう
---
ruby は 3.1.1 以上にする
今なら 3.1.2 がよさそう
gem update --system して、3.3.11 以上がインストールされることを確認
https://blog.rubygems.org/2022/04/07/3.3.11-released.html
bundle gem hoge
rake-compiler と rb_sys を入れる
extconf 周りを雑に整える
cd ext/shuffle && cargo init --lib
magnus を使うので Rust 1.51 以上じゃないとだめ
---
docker の ruby 公式イメージだと magnus のビルドに失敗する
ruby が shared library を作れるようになってないから?正直良くわからない