Crates.io | rb-sys |
lib.rs | rb-sys |
version | 0.9.102 |
source | src |
created_at | 2022-04-20 05:04:37.318544 |
updated_at | 2024-08-20 04:05:21.860767 |
description | Rust bindings for the CRuby API |
homepage | https://github.com/oxidize-rb/rb-sys |
repository | https://github.com/oxidize-rb/rb-sys |
max_upload_size | |
id | 570777 |
size | 112,607 |
Autogenerated Rust bindings for Ruby. Uses the rust-bindgen
crate to
generate bindings from the ruby.h
header.https://github.com/rust-lang/rust-bindgen
This is a very low-level library. If you are looking to write a gem in Rust, you should probably use
https://github.com/matsadler/magnus crate, with the rb-sys-interop
feature.
If you actually need raw/unsafe bindings to libruby, then this crate if for you!
Ruby gems require a bit of boilerplate to be defined to be usable from Ruby. rb-sys
makes this process painless by
doing the work for you, by simply enabling the gem
feature.
rb-sys = "0.9"
Under the hood this ensures we do not link libruby (unless on Windows), and defines a ruby_abi_version
function for
Ruby 3.2+.
See this example of creating a Ruby gem in Rust
IMPORTANT: If you are authoring a Ruby gem, you do not need to enable this feature.
If you need to link libruby (i.e. you are initializing a Ruby VM in your Rust code), use can enable the link-ruby
feature:
rb-sys = { version = "0.9", features = ["link-ruby"] }
You can also force static linking of libruby:
rb-sys = { version = "0.9", features = ["ruby-static"] }
Alternatively, you can set the RUBY_STATIC=true
environment variable.
global-allocator
: Report Rust memory allocations to the Ruby GC (recommended).ruby-static
: Link the static version of libruby.link-ruby
: Link libruby.bindgen-rbimpls
: Include the Ruby impl types in bindings.bindgen-deprecated-types
: Include deprecated Ruby methods in bindings.Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.