106 releases
0.9.102 | Aug 20, 2024 |
---|---|
0.9.99 | Jul 25, 2024 |
0.9.90 | Mar 1, 2024 |
0.9.85 | Dec 27, 2023 |
0.9.28 | Jul 28, 2022 |
#494 in Development tools
79,520 downloads per month
Used in 7 crates
(5 directly)
110KB
2.5K
SLoC
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.
Dependencies
~0–2.3MB
~36K SLoC