Expand description
§rb-sys
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
§⚠️ Notice
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!
§Usage
§Writing a Ruby gem
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
§Embedding libruby in your Rust app
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"] }§Static libruby
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.
§Other features
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.
§License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
§Contribution
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.
Re-exports§
pub use stable_api::StableApiDefinition;pub use bindings::*;pub use macros::*;pub use special_consts::*;pub use value_type::*;
Modules§
- Raw bindings to libruby, generated by bindgen.
- Implementation of Ruby macros.
- Definitions for Ruby’s special constants.
- Stable ABI functions which provide access to Ruby internals that is compatible across Ruby versions, and are guaranteed to be not break due to Ruby binary changes.
- Support for reporting Rust memory usage to the Ruby GC.
- Definitions for Ruby’s special constants.
Macros§
- Prevents premature destruction of local objects.
- Finds or creates a symbol for the given static string. This macro will memoize the ID to avoid repeated calls to libruby. You should prefer this macro over [
rb_intern3] when the string is known at compile time. - ruby_
abi_ version Deprecated - Set the global allocator to
TrackingAllocator.