Need help with rubex?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

433 Stars 18 Forks BSD 2-Clause "Simplified" License 441 Commits 32 Opened issues


rubex - A Ruby-like language for writing Ruby C extensions.

Services available


Need anything else?

Contributors list


Rubex is a Ruby-like language for writing Ruby C extensions.

Rubex is a language that makes writing CRuby C extensions as simple as writing Ruby. It does this by providing a syntax that is the perfect blend of the elegance of Ruby and the power of C. Rubex compiles to C and implicitly interfaces with the Ruby VM in a manner that is completely transparent to the programmer.

Rubex keeps you happy even when writing C extensions.


Gem Version Open Source Helpers Build Status

Table of Contents

Quick Introduction

Consider this Ruby code for computing a fibonnaci series and returning it in an Array: ``` ruby class Fibonnaci def compute(n) i = 1, prev = 1, current = 1, temp arr = []

while i < n do
  temp = current
  current = current + prev
  prev = temp
  i += 1


end end ```

If you decide to port this to a C extension, the code will look like so: ``` c



void Inita (); static VALUE Fibonnacicompute (int argc,VALUE* argv,VALUE self);

static VALUE Fibonnaci_compute (int argc,VALUE* argv,VALUE self) { int n,i,prev,current,temp; VALUE arr;

if (argc < 1) { rbraise(rbeArgError, "Need 1 args, not %d", argc); }

n = NUM2INT(argv[0]); i = 1; prev = 1; current = 1; arr = rbarynew2(0);

while (i < n) { temp = current; current = current + prev; prev = temp; rbfuncall(arr, rbintern("push"), 1 ,INT2NUM(prev)); i = i + 1; }

return arr; }

void Inita () { VALUE clsFibonnaci;

clsFibonnaci = rbdefineclass("Fibonnaci", rbcObject);

rbdefinemethod(clsFibonnaci ,"compute", Fibonnacicompute, -1); } ```

However, if you decide to write a C extension using Rubex, the code will look like this!: ``` ruby class Fibonnaci def compute(int n) int i = 1, prev = 1, current = 1, temp array = []

while i < n do
  temp = current
  current = current + prev
  prev = temp
  i += 1

return array

end end ```

Notice the only difference between the above Rubex code and Ruby is the specification of explicit

types for the variables. Above Rubex code will automatically compile into C code and will also implicitly interface with the Ruby VM without you having to remember any of the APIs.

Rubex also takes care of the initial setup and compilation of the C files, so all you need to do is execute a bunch of commands and your extension is up and running!


Requires Ruby version >= 2.3.0

Install with:

gem install rubex


Installing the gem will also install the

binary. You can now write a Rubex file (with a
file extension) and compile it into C code using the following commands.



Create all the necessary files for the C extension.

rubex generate file_name.rubex
  -f, [--force]            # replace existing files and directories
  -d, [--dir=DIR]          # specify a directory for generating files
  -i, [--install]          # automatically run install command after generating Makefile
  -g, [--debug]            # enable debugging symbols when compiling with GCC


Run the

utility on generated files.
rubex install path/to/generated/directory


Describe available commands or one specific command

rubex help [COMMAND]

Manual Usage

If you want to manually generate the files, you can do that with:

rubex file_name.rubex

This will produce the translated C code and an

file inside a directory called
. CD into the directory, and run the
file with:
ruby extconf.rb

This will produce a

. Run
to compile the generated C file and generate a
shared object file that can be used in any Ruby script.


Give yourself 5 min and go through the TUTORIAL. Convert a part of your C extension to Rubex and see the jump in cleanliness and productivity for yourself.


Read the full Rubex reference in REFERENCE.

Differences with Ruby

Although Rubex tries its best to support the Ruby syntax as much as possible, in some cases it is not feasible or necessary to provide full support. Following is a list of differences between Ruby and Rubex syntax:

  • All methods in Rubex (including
    calls) must use round brackets for arguments.
  • No support Ruby blocks.
  • No support for class variables.
  • All methods and functions in Rubex must use the
    statement for returning values.


See the CONTRIBUTING and the GitHub issue tracker for future features.


  • The Ruby Association (Japan) for providing the initial funding for this project through the Ruby Association Grant 2016.
  • Koichi Sasada (@ko1), Kenta Murata (@mrkn) and Naotoshi Seo (@sonots) for their support and mentorship throughout this project.
  • Fukuoka Ruby Award 2017.
  • Tokyo Institute of Technology.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.