cobhan

Cobhan FFI is a proof of concept system for enabling shared code to be written in Rust or Go and consumed from all major languages/platforms in a safe and effective way, using easy helper functions to manage any unsafe data marshaling.


License
MIT
Install
gem install cobhan -v 0.2.0

Documentation

Cobhan

Cobhan FFI is a proof of concept system for enabling shared code to be written in Rust or Go and consumed from all major languages/platforms in a safe and effective way, using easy helper functions to manage any unsafe data marshaling.

Types

  • Supported types
    • int32 - 32bit signed integer
    • int64 - 64bit signed integer
    • float64 - double precision 64bit IEEE 754 floating point
    • Cobhan buffer - length delimited 8bit buffer (no null delimiters)
      • utf-8 encoded string
      • JSON
      • binary data
  • Cobhan buffer details
    • Callers provide the output buffer allocation and capacity
    • Called functions can transparently return larger values via temporary files
    • Modern tmpfs is entirely memory backed
  • Return values
    • Functions that return scalar values can return the value directly
      • Functions can use special case and return maximum positive or maximum negative or zero values to represent error or overflow conditions
      • Functions can allow scalar values to wrap
      • Functions should document their overflow / underflow behavior

Installation

Add this line to your application's Gemfile:

gem 'cobhan'

And then execute:

bundle install

Or install it yourself as:

gem install cobhan

Usage

By running the demo, it will automatically build the sample libcobhandemo binary.

bundle exec ruby demo/demo.rb

Once the binary is built, to rebuilt it, you'll have to cleanup the tmp dir.

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Running specs

bundle exec rspec spec

Running specs inside vagrant

vagrant up
vagrant ssh
cd /vagrant/
bundle install
bundle exec rspec spec

# Or to run specs on arm64 inside vagrant:
cd /vagrant/
spec/support/libcobhandemo/arm64_build_and_test.sh

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/godaddy/cobhan-ruby.

Releasing new gem version

# Create and push a version tag
git tag -a v$(rake version) -m "Version $(rake version)"
git push origin v$(rake version)

# Create a release in Github to trigger .github/workflows/publish.yml workflow
echo "Version $(rake version)"

License

The gem is available as open source under the terms of the MIT License.