Native Ruby extensions written in Rust

Overview

Ruru (Rust + Ruby)

Native Ruby extensions in Rust

Documentation Build Status Build status Gitter Code Triagers Badge


Documentation
Website

Have you ever considered rewriting some parts of your slow Ruby application?

Just replace your Ruby application with Rust, method by method, class by class. It does not require you to change the interface of your classes or to change any other Ruby code.

As simple as Ruby, as efficient as Rust.

Contents

Examples

The famous String#blank? method

The fast String#blank? implementation by Yehuda Katz

#[macro_use]
extern crate ruru;

use ruru::{Boolean, Class, Object, RString};

methods!(
   RString,
   itself,

   fn string_is_blank() -> Boolean {
       Boolean::new(itself.to_string().chars().all(|c| c.is_whitespace()))
   }
);

#[no_mangle]
pub extern fn initialize_string() {
    Class::from_existing("String").define(|itself| {
        itself.def("blank?", string_is_blank);
    });
}

Simple Sidekiq-compatible server

Link to the repository

Safe conversions

Since 0.8.0 safe conversions are available for built-in Ruby types and for custom types.

Let's imagine that we are writing an HTTP server. It should handle requests which are passed from Ruby side.

Any object which responds to #body method is considered as a valid request.

#[macro_use]
extern crate ruru;

use std::error::Error;
use ruru::{Class, Object, RString, VerifiedObject, VM};

class!(Request);

impl VerifiedObject for Request {
    fn is_correct_type<T: Object>(object: &T) -> bool {
        object.respond_to("body")
    }

    fn error_message() -> &'static str {
        "Not a valid request"
    }
}

class!(Server);

methods!(
    Server,
    itself,

    fn process_request(request: Request) -> RString {
        let body = request
            .and_then(|request| request.send("body", vec![]).try_convert_to::<RString>())
            .map(|body| body.to_string());

        // Either request does not respond to `body` or `body` is not a String
        if let Err(ref error) = body {
            VM::raise(error.to_exception(), error.description());
        }

        let formatted_body = format!("[BODY] {}", body.unwrap());

        RString::new(&formatted_body)
    }
);

#[no_mangle]
pub extern fn initialize_server() {
    Class::new("Server", None).define(|itself| {
        itself.def("process_request", process_request);
    });
}

Wrapping Rust data to Ruby objects

Wrap Servers to RubyServer objects

#[macro_use] extern crate ruru;
#[macro_use] extern crate lazy_static;

use ruru::{AnyObject, Class, Fixnum, Object, RString, VM};

// The structure which we want to wrap
pub struct Server {
    host: String,
    port: u16,
}

impl Server {
    fn new(host: String, port: u16) -> Self {
        Server {
            host: host,
            port: port,
        }
    }

    fn host(&self) -> &str {
        &self.host
    }

    fn port(&self) -> u16 {
        self.port
    }
}

wrappable_struct!(Server, ServerWrapper, SERVER_WRAPPER);

class!(RubyServer);

methods!(
    RubyServer,
    itself,

    fn ruby_server_new(host: RString, port: Fixnum) -> AnyObject {
        let server = Server::new(host.unwrap().to_string(),
                                 port.unwrap().to_i64() as u16);

        Class::from_existing("RubyServer").wrap_data(server, &*SERVER_WRAPPER)
    }

    fn ruby_server_host() -> RString {
        let host = itself.get_data(&*SERVER_WRAPPER).host();

        RString::new(host)
    }

    fn ruby_server_port() -> Fixnum {
        let port = itself.get_data(&*SERVER_WRAPPER).port();

        Fixnum::new(port as i64)
    }
);

fn main() {
    let data_class = Class::from_existing("Data");

    Class::new("RubyServer", Some(&data_class)).define(|itself| {
        itself.def_self("new", ruby_server_new);

        itself.def("host", ruby_server_host);
        itself.def("port", ruby_server_port);
    });
}

True parallelism

Ruru provides a way to enable true parallelism for Ruby threads by releasing GVL (GIL).

It means that a thread with released GVL runs in parallel with other threads without being interrupted by GVL.

Current example demonstrates a "heavy" computation (2 * 2 for simplicity) run in parallel.

#[macro_use] extern crate ruru;

use ruru::{Class, Fixnum, Object, VM};

class!(Calculator);

methods!(
    Calculator,
    itself,

    fn heavy_computation() -> Fixnum {
        let computation = || { 2 * 2 };
        let unblocking_function = || {};

        // release GVL for current thread until `computation` is completed
        let result = VM::thread_call_without_gvl(
            computation,
            Some(unblocking_function)
        );

        Fixnum::new(result)
    }
);

fn main() {
    Class::new("Calculator", None).define(|itself| {
        itself.def("heavy_computation", heavy_computation);
    });
}

Defining a new class

Let's say you have a Calculator class.

class Calculator
  def pow_3(number)
    (1..number).each_with_object({}) do |index, hash|
      hash[index] = index ** 3
    end
  end
end

# ... somewhere in the application code ...
Calculator.new.pow_3(5) #=> { 1 => 1, 2 => 8, 3 => 27, 4 => 64, 5 => 125 }

You have found that it's very slow to call pow_3 for big numbers and decided to replace the whole class with Rust.

#[macro_use]
extern crate ruru;

use std::error::Error;
use ruru::{Class, Fixnum, Hash, Object, VM};

class!(Calculator);

methods!(
    Calculator,
    itself,

    fn pow_3(number: Fixnum) -> Hash {
        let mut result = Hash::new();

        // Raise an exception if `number` is not a Fixnum
        if let Err(ref error) = number {
            VM::raise(error.to_exception(), error.description());
        }

        for i in 1..number.unwrap().to_i64() + 1 {
            result.store(Fixnum::new(i), Fixnum::new(i.pow(3)));
        }

        result
    }
);

#[no_mangle]
pub extern fn initialize_calculator() {
    Class::new("Calculator", None).define(|itself| {
        itself.def("pow_3", pow_3);
    });
}

Ruby:

# No Calculator class in Ruby anymore

# ... somewhere in the application ...
Calculator.new.pow_3(5) #=> { 1 => 1, 2 => 8, 3 => 27, 4 => 64, 5 => 125 }

Nothing has changed in the API of class, thus there is no need to change any code elsewhere in the app.

Replacing only several methods instead of the whole class

If the Calculator class from the example above has more Ruby methods, but we want to replace only pow_3, use Class::from_existing()

Class::from_existing("Calculator").define(|itself| {
    itself.def("pow_3", pow_3);
});

Class definition DSL

Class::new("Hello", None).define(|itself| {
    itself.const_set("GREETING", &RString::new("Hello, World!").freeze());

    itself.attr_reader("reader");

    itself.def_self("greeting", greeting);
    itself.def("many_greetings", many_greetings);

    itself.define_nested_class("Nested", None).define(|itself| {
        itself.def_self("nested_greeting", nested_greeting);
    });
});

Which corresponds to the following Ruby code:

class Hello
  GREETING = "Hello, World".freeze

  attr_reader :reader

  def self.greeting
    # ...
  end

  def many_greetings
    # ...
  end

  class Nested
    def self.nested_greeting
      # ...
    end
  end
end

See documentation for Class and Object for more information.

Calling Ruby code from Rust

Getting an account balance of some User whose name is John and who is 18 or 19 years old.

default_balance = 0

account_balance = User
  .find_by(age: [18, 19], name: 'John')
  .account_balance

account_balance = default_balance unless account_balance.is_a?(Fixnum)
#[macro_use]
extern crate ruru;

use ruru::{Array, Class, Fixnum, Hash, Object, RString, Symbol};

fn main() {
    let default_balance = 0;
    let mut conditions = Hash::new();

    conditions.store(
        Symbol::new("age"),
        Array::new().push(Fixnum::new(18)).push(Fixnum::new(19))
    );

    conditions.store(
        Symbol::new("name"),
        RString::new("John")
    );

    // Fetch user and his balance
    // and set it to 0 if balance is not a Fixnum (for example `nil`)
    let account_balance =
        Class::from_existing("User")
            .send("find_by", vec![conditions.to_any_object()])
            .send("account_balance", vec![])
            .try_convert_to::<Fixnum>()
            .map(|balance| balance.to_i64())
            .unwrap_or(default_balance);
}

Check out Documentation for many more examples!

... and why is FFI not enough?

  • No support of native Ruby types;

  • No way to create a standalone application to run the Ruby VM separately;

  • No way to call your Ruby code from Rust;

How do I use it?

Warning! The crate is a WIP.

It is recommended to use Thermite gem, a Rake-based helper for building and distributing Rust-based Ruby extensions.

To be able to use Ruru, make sure that your Ruby version is 2.3.0 or higher.

  1. Your local MRI copy has to be built with the --enable-shared option. For example, using rbenv:
CONFIGURE_OPTS=--enable-shared rbenv install 2.3.0
  1. Add Ruru to Cargo.toml
[dependencies]
ruru = "0.9.0"
  1. Compile your library as a dylib
[lib]
crate-type = ["dylib"]
  1. Create a function which will initialize the extension
#[no_mangle]
pub extern fn initialize_my_app() {
    Class::new("SomeClass");

    // ... etc
}
  1. Build extension
$ cargo build --release

or using Thermite

$ rake thermite:build
  1. On the ruby side, open the compiled dylib and call the function to initialize extension
require 'fiddle'

library = Fiddle::dlopen('path_to_dylib/libmy_library.dylib')

Fiddle::Function.new(library['initialize_my_app'], [], Fiddle::TYPE_VOIDP).call
  1. Ruru is ready ❤️

Contributors are welcome!

If you have any questions, join Ruru on Gitter

License

MIT License

Copyright (c) 2015-2016 Dmitry Gritsay

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Icon is designed by Github.

Comments
  • Attaching Rust state/data to Ruby instances

    Attaching Rust state/data to Ruby instances

    Is there a clean way to attach Rust state/data to a Ruby class? Something like instance variables which are only visible to the Rust env?

    The reason I'm asking is because I'd like to expose a Rust implementation of a Ruby class, but use Rust's more robust data structures and memory management for the internal heavy lifting.

    question 
    opened by Zapotek 17
  • Create the ruby-sys crate

    Create the ruby-sys crate

    This is a big PR, but it's not that big.

    Cargo has a convention of -sys packages. The idea is that the low-level stuff should be a package, and then higher-level bindings should be built on top of it.

    ruru is that kind of package, and src/unsafe_bindings is really a -sys crate. So, I made one. :smile:

    I went ahead and pushed it up, so that nobody else could squat it while we discuss this PR: https://crates.io/crates/ruby-sys If this PR is accepted, I'll make you an owner of the package as well. If you don't want this PR, well, ruby-sys should still exist, imho :smile:

    opened by steveklabnik 10
  • Add multiple methods to Array

    Add multiple methods to Array

    • Bump version to 0.9.0
    • Add unshift, shift, dup, to_s and reverse to Array
    • Update ruby-sys required version to 0.3.0

    I would like to add some tests. I was thinking of creating a ruby project and add rspec tests. What do you think @d-unseductable ?

    opened by simon0191 7
  • new_instance can cause crash with SIGABRT in method_entry_get_without_cache()

    new_instance can cause crash with SIGABRT in method_entry_get_without_cache()

    I've written code that will pass all tests, but during benchmarking it will intermittently segfault. The code that rarely will segfault has this logic. It's Rust code called from Ruby

      1. get the directory contents
      1. convert strings to Value object
      1. create AnyObject from Value
      1. instantiate an instance of Pathname class with the Vec<AnyObject> single parameter from above
      1. append each of those to Array and return it to Ruby

    It's important to note that there are no problems with the kinds of characters retrieved from the directory (even though characters such as a null byte is valid text for a file name). The segfault typically shows up in the 8000+ iterations benchmark.

    I don't read segfaults well but I understand the concept of narrowing down potential problem areas by benchmarking the heck out of specific sections of ruru.

    ** Segfault output: **
    [BUG] Segmentation fault at 0x00000000000018
    ruby 2.3.4p301 (2017-03-30 revision 58214) [x86_64-linux]
    
    -- Control frame information -----------------------------------------------
    c:0037 p:---- s:0157 e:000156 CFUNC  :initialize
    c:0036 p:---- s:0155 e:000154 CFUNC  :children_compat
    c:0035 p:0049 s:0150 e:000149 BLOCK  /home/danielpclark/dev/faster_path/test/benches/children_compat_benchmark.rb:22
    c:0034 p:0006 s:0148 e:000147 BLOCK  /home/danielpclark/dev/faster_path/test/benchmark_helper.rb:16 [FINISH]
    c:0033 p:---- s:0146 e:000145 CFUNC  :times
    c:0032 p:0022 s:0143 e:000142 BLOCK  /home/danielpclark/dev/faster_path/test/benchmark_helper.rb:15 [FINISH]
    c:0031 p:---- s:0140 e:000139 CFUNC  :instance_exec
    c:0030 p:0040 s:0136 e:000135 BLOCK  /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb:93 [FINISH]
    c:0029 p:---- s:0131 e:000130 CFUNC  :each
    c:0028 p:0046 s:0128 e:000127 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb:90
    c:0027 p:0026 s:0121 E:002428 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb:134
    c:0026 p:0009 s:0115 E:001238 METHOD /home/danielpclark/dev/faster_path/test/benchmark_helper.rb:13
    c:0025 p:0011 s:0111 E:001800 METHOD /home/danielpclark/dev/faster_path/test/benches/children_compat_benchmark.rb:20
    c:0024 p:0029 s:0108 e:000107 BLOCK  /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:107
    c:0023 p:0006 s:0106 e:000105 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:204
    c:0022 p:0009 s:0102 e:000101 BLOCK  /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:104
    c:0021 p:0020 s:0100 e:000099 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:255
    c:0020 p:0009 s:0096 e:000095 BLOCK  /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:103
    c:0019 p:0037 s:0094 e:000093 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:350
    c:0018 p:0052 s:0087 E:000928 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:275
    c:0017 p:0009 s:0081 E:000540 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:102
    c:0016 p:0090 s:0078 e:000077 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-reporters-1.1.18/lib/minitest/reporters.rb:57
    c:0015 p:0014 s:0072 e:000071 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:839
    c:0014 p:0032 s:0066 e:000064 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:324
    c:0013 p:0014 s:0059 e:000058 BLOCK  /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:311 [FINISH]
    c:0012 p:---- s:0056 e:000055 CFUNC  :each
    c:0011 p:0010 s:0053 e:000052 BLOCK  /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:310
    c:0010 p:0037 s:0051 e:000050 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:350
    c:0009 p:0035 s:0044 E:000818 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:337
    c:0008 p:0131 s:0038 E:000dc8 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:309
    c:0007 p:0028 s:0030 e:000029 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb:22
    c:0006 p:0013 s:0025 e:000024 BLOCK  /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:159 [FINISH]
    c:0005 p:---- s:0022 e:000021 CFUNC  :map
    c:0004 p:0046 s:0019 e:000018 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:159
    c:0003 p:0158 s:0011 e:000010 METHOD /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:136
    c:0002 p:0071 s:0005 E:001a38 BLOCK  /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:63 [FINISH]
    c:0001 p:0000 s:0002 E:002700 (none) [FINISH]
    
    -- Ruby level backtrace information ----------------------------------------
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:63:in `block in autorun'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:136:in `run'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:159:in `__run'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:159:in `map'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:159:in `block in __run'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb:22:in `run'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:309:in `run'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:337:in `with_info_handler'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:350:in `on_signal'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:310:in `block in run'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:310:in `each'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:311:in `block (2 levels) in run'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:324:in `run_one_method'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:839:in `run_one_method'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-reporters-1.1.18/lib/minitest/reporters.rb:57:in `run_with_hooks'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:102:in `run'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:275:in `with_info_handler'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb:350:in `on_signal'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:103:in `block in run'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:255:in `time_it'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:104:in `block (2 levels) in run'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:204:in `capture_exceptions'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb:107:in `block (3 levels) in run'
    /home/danielpclark/dev/faster_path/test/benches/children_compat_benchmark.rb:20:in `bench_rust_children_compat'
    /home/danielpclark/dev/faster_path/test/benchmark_helper.rb:13:in `benchmark'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb:134:in `assert_performance_constant'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb:90:in `assert_performance'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb:90:in `each'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb:93:in `block in assert_performance'
    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb:93:in `instance_exec'
    /home/danielpclark/dev/faster_path/test/benchmark_helper.rb:15:in `block in benchmark'
    /home/danielpclark/dev/faster_path/test/benchmark_helper.rb:15:in `times'
    /home/danielpclark/dev/faster_path/test/benchmark_helper.rb:16:in `block (2 levels) in benchmark'
    /home/danielpclark/dev/faster_path/test/benches/children_compat_benchmark.rb:22:in `block in bench_rust_children_compat'
    /home/danielpclark/dev/faster_path/test/benches/children_compat_benchmark.rb:22:in `children_compat'
    /home/danielpclark/dev/faster_path/test/benches/children_compat_benchmark.rb:22:in `initialize'
    
    -- Machine register context ------------------------------------------------
     RIP: 0x00007f2222ebe370 RBP: 0x0000560be214f5d0 RSP: 0x00007ffca6050cc0
     RAX: 0x0000560be21bf760 RBX: 0x0000560be2ffc078 RCX: 0x0000000000000095
     RDX: 0x00007ffca6050d28 RDI: 0x0000000000000000 RSI: 0x000000000000009a
      R8: 0x0000000000000001  R9: 0x0000000000000001 R10: 0x0000000000000040
     R11: 0x0000560be214f5d0 R12: 0x0000000000000000 R13: 0x00000000000045e1
     R14: 0x000000000000009a R15: 0x0000000000000001 EFL: 0x0000000000010246
    
    -- C level backtrace information -------------------------------------------
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_vm_bugreport+0x4e8) [0x7f2222ed8ac8] vm_dump.c:692
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_bug_context+0xd4) [0x7f2222d6a284] error.c:435
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(sigsegv+0x3e) [0x7f2222e46d8e] signal.c:890
    /lib/x86_64-linux-gnu/libc.so.6 [0x7f2222959860]
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(method_entry_get+0x100) [0x7f2222ebe370] vm_method.c:787
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_respond_to+0x32) [0x7f2222ec8b42] vm_method.c:1919
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_check_funcall_default+0x48) [0x7f2222ec8db8] vm_eval.c:406
    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/pathname.so(path_initialize+0x41) [0x7f222122d961] pathname.c:35
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call0_body.constprop.120+0x263) [0x7f2222ed2db3] vm_eval.c:131
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_call0+0xc4) [0x7f2222ed33a4] vm_eval.c:61
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_class_new_instance+0x21) [0x7f2222dd3121] object.c:1856
    /home/danielpclark/dev/faster_path/target/release/libfaster_path.so(_ZN4ruru5class5class5Class12new_instance17hab4791e86976965dE+0x42) [0x7f221fcceb22]
    /home/danielpclark/dev/faster_path/target/release/libfaster_path.so(pub_children_compat+0x806) [0x7f221fccaaf6]
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_cfunc+0xed) [0x7f2222ec181d] vm_insnhelper.c:1642
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_method_each_type+0x5e) [0x7f2222ed0d1e] vm_insnhelper.c:2026
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_method+0xe3) [0x7f2222ed1273] vm_insnhelper.c:2176
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_opt_send+0x166) [0x7f2222ed16b6] vm_insnhelper.c:1850
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec_core+0x1209) [0x7f2222eca149] insns.def:994
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec+0x7f) [0x7f2222ecf29f] vm.c:1650
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(invoke_block_from_c_0+0x2dd) [0x7f2222ecff1d] vm.c:921
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_yield_1+0x54) [0x7f2222ed03d4] vm.c:988
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(int_dotimes+0x40) [0x7f2222dc5550] numeric.c:3947
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_cfunc+0xed) [0x7f2222ec181d] vm_insnhelper.c:1642
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec_core+0x1138) [0x7f2222eca078] insns.def:963
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec+0x7f) [0x7f2222ecf29f] vm.c:1650
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(invoke_block_from_c_0+0x2dd) [0x7f2222ecff1d] vm.c:921
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(yield_under+0x14c) [0x7f2222ed083c] vm.c:988
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_cfunc+0xed) [0x7f2222ec181d] vm_insnhelper.c:1642
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec_core+0x1138) [0x7f2222eca078] insns.def:963
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec+0x7f) [0x7f2222ecf29f] vm.c:1650
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(invoke_block_from_c_0+0x2dd) [0x7f2222ecff1d] vm.c:921
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_yield+0x5c) [0x7f2222ed018c] vm.c:988
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_ary_each+0x3c) [0x7f2222d1cdec] array.c:1815
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_cfunc+0xed) [0x7f2222ec181d] vm_insnhelper.c:1642
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_method_each_type+0x5e) [0x7f2222ed0d1e] vm_insnhelper.c:2026
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_method+0xe3) [0x7f2222ed1273] vm_insnhelper.c:2176
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec_core+0x1138) [0x7f2222eca078] insns.def:963
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec+0x7f) [0x7f2222ecf29f] vm.c:1650
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(invoke_block_from_c_0+0x2dd) [0x7f2222ecff1d] vm.c:921
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_yield+0x5c) [0x7f2222ed018c] vm.c:988
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_ary_each+0x3c) [0x7f2222d1cdec] array.c:1815
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_cfunc+0xed) [0x7f2222ec181d] vm_insnhelper.c:1642
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_method_each_type+0x5e) [0x7f2222ed0d1e] vm_insnhelper.c:2026
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_method+0xe3) [0x7f2222ed1273] vm_insnhelper.c:2176
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec_core+0x1138) [0x7f2222eca078] insns.def:963
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec+0x7f) [0x7f2222ecf29f] vm.c:1650
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(invoke_block_from_c_0+0x2dd) [0x7f2222ecff1d] vm.c:921
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_yield+0x5c) [0x7f2222ed018c] vm.c:988
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_ary_collect+0x5c) [0x7f2222d2208c] array.c:2733
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_cfunc+0xed) [0x7f2222ec181d] vm_insnhelper.c:1642
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_method_each_type+0x5e) [0x7f2222ed0d1e] vm_insnhelper.c:2026
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_call_method+0xe3) [0x7f2222ed1273] vm_insnhelper.c:2176
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec_core+0x1138) [0x7f2222eca078] insns.def:963
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_exec+0x7f) [0x7f2222ecf29f] vm.c:1650
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(invoke_block_from_c_0+0x2dd) [0x7f2222ecff1d] vm.c:921
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(vm_invoke_proc+0xc3) [0x7f2222ecfff3] vm.c:996
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_proc_call+0x42) [0x7f2222d7a652] proc.c:834
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(rb_exec_end_proc+0x179) [0x7f2222d74689] eval_jump.c:108
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(ruby_finalize_0+0x83) [0x7f2222d747d3] eval.c:122
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(ruby_cleanup+0x1f3) [0x7f2222d74b73] eval.c:181
    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3(ruby_run_node+0x25) [0x7f2222d74fe5] eval.c:302
    /usr/share/rvm/rubies/ruby-2.3.4/bin/ruby(main+0x4b) [0x560be12cb8fb] main.c:36
    
    -- Other runtime information -----------------------------------------------
    
    * Loaded script: /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/rake_test_loader.rb
    
    * Loaded features:
    
        0 enumerator.so
        1 thread.rb
        2 rational.so
        3 complex.so
        4 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/enc/encdb.so
        5 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/enc/trans/transdb.so
        6 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/unicode_normalize.rb
        7 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/rbconfig.rb
        8 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/compatibility.rb
        9 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/defaults.rb
       10 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/deprecate.rb
       11 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/errors.rb
       12 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/version.rb
       13 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/requirement.rb
       14 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/platform.rb
       15 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/basic_specification.rb
       16 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/stub_specification.rb
       17 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/util/list.rb
       18 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/stringio.so
       19 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/specification.rb
       20 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/exceptions.rb
       21 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/dependency.rb
       22 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_gem.rb
       23 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/monitor.rb
       24 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/core_ext/kernel_require.rb
       25 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems.rb
       26 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/path_support.rb
       27 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/version.rb
       28 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/core_ext/name_error.rb
       29 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/levenshtein.rb
       30 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/jaro_winkler.rb
       31 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkable.rb
       32 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/delegate.rb
       33 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
       34 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
       35 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
       36 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
       37 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/spell_checkers/null_checker.rb
       38 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean/formatter.rb
       39 /home/danielpclark/.rvm/gems/ruby-2.3.4@global/gems/did_you_mean-1.0.0/lib/did_you_mean.rb
       40 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/version.rb
       41 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/compatibility_guard.rb
       42 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/pathname.so
       43 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/pathname.rb
       44 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/constants.rb
       45 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/util.rb
       46 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/io-console-0.4.6/lib/io/console.so
       47 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/user_interaction.rb
       48 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/etc.so
       49 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/config_file.rb
       50 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/rubygems_integration.rb
       51 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/current_ruby.rb
       52 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/shared_helpers.rb
       53 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/fileutils.rb
       54 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendored_fileutils.rb
       55 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/errors.rb
       56 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/environment_preserver.rb
       57 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/plugin/api.rb
       58 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/plugin.rb
       59 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri/rfc2396_parser.rb
       60 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri/rfc3986_parser.rb
       61 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri/common.rb
       62 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri/generic.rb
       63 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri/ftp.rb
       64 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri/http.rb
       65 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri/https.rb
       66 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri/ldap.rb
       67 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri/ldaps.rb
       68 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri/mailto.rb
       69 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/uri.rb
       70 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/digest.so
       71 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/digest.rb
       72 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/source/git.rb
       73 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/source/installed.rb
       74 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/source/specific_file.rb
       75 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/source/local.rb
       76 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/source/lock.rb
       77 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/source/vendor.rb
       78 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/source.rb
       79 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/gem_helpers.rb
       80 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/match_platform.rb
       81 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/rubygems_ext.rb
       82 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/build_metadata.rb
       83 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler.rb
       84 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/settings.rb
       85 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/ext/builder.rb
       86 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/yaml_serializer.rb
       87 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/feature_flag.rb
       88 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/source.rb
       89 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/digest/sha1.so
       90 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/source/path.rb
       91 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/source/git.rb
       92 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/source/rubygems.rb
       93 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/lockfile_parser.rb
       94 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/set.rb
       95 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/definition.rb
       96 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/dependency.rb
       97 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/ruby_dsl.rb
       98 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/dsl.rb
       99 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/source_list.rb
      100 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/source/metadata.rb
      101 /home/danielpclark/dev/faster_path/lib/faster_path/version.rb
      102 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/index.rb
      103 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/source/gemspec.rb
      104 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/lazy_specification.rb
      105 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/tsort.rb
      106 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/forwardable.rb
      107 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/spec_set.rb
      108 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/ui.rb
      109 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/ui/silent.rb
      110 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/ui/rg_proxy.rb
      111 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/text.rb
      112 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/site_ruby/2.3.0/rubygems/util/licenses.rb
      113 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/remote_specification.rb
      114 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/compatibility.rb
      115 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/gem_metadata.rb
      116 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb
      117 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb
      118 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/action.rb
      119 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb
      120 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/add_vertex.rb
      121 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/delete_edge.rb
      122 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/detach_vertex_named.rb
      123 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/set_payload.rb
      124 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/tag.rb
      125 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/log.rb
      126 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb
      127 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb
      128 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/state.rb
      129 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb
      130 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/delegates/resolution_state.rb
      131 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb
      132 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/resolver.rb
      133 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo/modules/ui.rb
      134 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendor/molinillo/lib/molinillo.rb
      135 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/vendored_molinillo.rb
      136 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/resolver/spec_group.rb
      137 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/resolver.rb
      138 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/gem_version_promoter.rb
      139 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/runtime.rb
      140 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/dep_proxy.rb
      141 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/stub_specification.rb
      142 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/endpoint_specification.rb
      143 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/ruby_version.rb
      144 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/bundler-1.16.0.pre.2/lib/bundler/setup.rb
      145 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/version.rb
      146 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/singleton.rb
      147 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/optparse.rb
      148 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/ostruct.rb
      149 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/ext/core.rb
      150 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/ext/string.rb
      151 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/win32.rb
      152 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/linked_list.rb
      153 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/cpu_counter.rb
      154 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/scope.rb
      155 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/task_argument_error.rb
      156 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/rule_recursion_overflow_error.rb
      157 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/task_manager.rb
      158 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/cloneable.rb
      159 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/file_utils.rb
      160 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/file_utils_ext.rb
      161 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/file_list.rb
      162 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/promise.rb
      163 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/thread_pool.rb
      164 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/private_reader.rb
      165 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/thread_history_display.rb
      166 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/trace_output.rb
      167 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/application.rb
      168 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/rake_module.rb
      169 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/pseudo_status.rb
      170 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/task_arguments.rb
      171 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/invocation_chain.rb
      172 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/invocation_exception_mixin.rb
      173 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/task.rb
      174 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/early_time.rb
      175 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/file_task.rb
      176 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/file_creation_task.rb
      177 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/multi_task.rb
      178 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/dsl_definition.rb
      179 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/default_loader.rb
      180 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/late_time.rb
      181 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/name_space.rb
      182 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake/backtrace.rb
      183 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rake-12.0.0/lib/rake.rb
      184 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi_c.so
      185 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/platform.rb
      186 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/types.rb
      187 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/library.rb
      188 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/errno.rb
      189 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/pointer.rb
      190 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/memorypointer.rb
      191 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/struct_layout_builder.rb
      192 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/struct.rb
      193 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/union.rb
      194 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/managedstruct.rb
      195 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/callback.rb
      196 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/io.rb
      197 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/autopointer.rb
      198 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/variadic.rb
      199 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/enum.rb
      200 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi/ffi.rb
      201 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi.rb
      202 /home/danielpclark/dev/faster_path/lib/faster_path/asset_resolution.rb
      203 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/fiddle.so
      204 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/fiddle/function.rb
      205 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/fiddle/closure.rb
      206 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/fiddle.rb
      207 /home/danielpclark/dev/faster_path/lib/faster_path.rb
      208 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/mutex_m.rb
      209 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/parallel.rb
      210 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/tmpdir.rb
      211 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/tempfile.rb
      212 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/assertions.rb
      213 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/unit.rb
      214 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/test.rb
      215 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest.rb
      216 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/expectations.rb
      217 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/spec.rb
      218 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/mock.rb
      219 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/autorun.rb
      220 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-reporters-1.1.18/lib/minitest/relative_position.rb
      221 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-reporters-1.1.18/lib/minitest/extensible_backtrace_filter.rb
      222 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-reporters-1.1.18/lib/minitest/reporters/version.rb
      223 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-reporters-1.1.18/lib/minitest/reporters.rb
      224 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-reporters-1.1.18/lib/minitest/reporters/base_reporter.rb
      225 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ansi-1.5.0/lib/ansi/chart.rb
      226 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ansi-1.5.0/lib/ansi/constants.rb
      227 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ansi-1.5.0/lib/ansi/code.rb
      228 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-reporters-1.1.18/lib/minitest/reporters/ansi.rb
      229 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-reporters-1.1.18/lib/minitest/reporters/spec_reporter.rb
      230 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/color_pound_spec_reporter-0.0.9/lib/color_pound_spec_reporter/version.rb
      231 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/color_pound_spec_reporter-0.0.9/lib/color_pound_spec_reporter.rb
      232 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-reporters-1.1.18/lib/minitest/minitest_reporter_plugin.rb
      233 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/pride_plugin.rb
      234 /home/danielpclark/dev/faster_path/test/test_helper.rb
      235 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/minitest-5.10.3/lib/minitest/benchmark.rb
      236 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/stop_watch-1.0.0/lib/stop_watch/version.rb
      237 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/stop_watch-1.0.0/lib/stop_watch.rb
      238 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/version.rb
      239 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/themes.rb
      240 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/English.rb
      241 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/observer.rb
      242 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rmagick-2.16.0/lib/RMagick2.so
      243 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rmagick-2.16.0/lib/rmagick_internal.rb
      244 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rmagick-2.16.0/lib/rmagick.rb
      245 /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/bigdecimal.so
      246 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/deprecated.rb
      247 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/base.rb
      248 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/area.rb
      249 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/bar_conversion.rb
      250 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/bar.rb
      251 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/bezier.rb
      252 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/bullet.rb
      253 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/dot.rb
      254 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/line.rb
      255 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/net.rb
      256 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/pie.rb
      257 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/scatter.rb
      258 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/spider.rb
      259 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/stacked_mixin.rb
      260 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/stacked_area.rb
      261 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/stacked_bar.rb
      262 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/side_bar.rb
      263 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/side_stacked_bar.rb
      264 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/accumulator_bar.rb
      265 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/scene.rb
      266 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/mini/legend.rb
      267 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/mini/bar.rb
      268 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/mini/pie.rb
      269 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff/mini/side_bar.rb
      270 /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/gruff-0.7.0/lib/gruff.rb
      271 /home/danielpclark/dev/faster_path/test/benchmark_helper.rb
      272 /home/danielpclark/dev/faster_path/test/benches/absolute_benchmark.rb
      273 /home/danielpclark/dev/faster_path/test/benches/add_trailing_separator_benchmark.rb
      274 /home/danielpclark/dev/faster_path/test/benches/basename_benchmark.rb
      275 /home/danielpclark/dev/faster_path/test/benches/children_benchmark.rb
      276 /home/danielpclark/dev/faster_path/test/benches/children_compat_benchmark.rb
      277 /home/danielpclark/dev/faster_path/test/benches/chop_basename_benchmark.rb
      278 /home/danielpclark/dev/faster_path/test/benches/directory_benchmark.rb
      279 /home/danielpclark/dev/faster_path/test/benches/dirname_benchmark.rb
      280 /home/danielpclark/dev/faster_path/test/benches/entries_benchmark.rb
      281 /home/danielpclark/dev/faster_path/test/benches/entries_compat_benchmark.rb
      282 /home/danielpclark/dev/faster_path/test/benches/extname_benchmark.rb
      283 /home/danielpclark/dev/faster_path/test/benches/has_trailing_separator_benchmark.rb
      284 /home/danielpclark/dev/faster_path/test/benches/plus_benchmark.rb
      285 /home/danielpclark/dev/faster_path/test/benches/relative_benchmark.rb
    
    * Process memory map:
    
    560be12cb000-560be12cc000 r-xp 00000000 08:01 2508784                    /usr/share/rvm/rubies/ruby-2.3.4/bin/ruby
    560be14cb000-560be14cc000 r--p 00000000 08:01 2508784                    /usr/share/rvm/rubies/ruby-2.3.4/bin/ruby
    560be14cc000-560be14cd000 rw-p 00001000 08:01 2508784                    /usr/share/rvm/rubies/ruby-2.3.4/bin/ruby
    560be214e000-560be325a000 rw-p 00000000 00:00 0                          [heap]
    7f220c000000-7f220c021000 rw-p 00000000 00:00 0 
    7f220c021000-7f2210000000 ---p 00000000 00:00 0 
    7f2213fb8000-7f2213fb9000 ---p 00000000 00:00 0 
    7f2213fb9000-7f22140b9000 rw-p 00000000 00:00 0 
    7f2216344000-7f2217056000 r--s 00000000 08:01 136902                     /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.24.so
    7f221705c000-7f2217222000 r--s 00000000 08:01 1848942                    /lib/x86_64-linux-gnu/libc-2.24.so
    7f2217224000-7f2217ffa000 r--s 00000000 08:01 2508786                    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3.0
    7f2218000000-7f2218021000 rw-p 00000000 00:00 0 
    7f2218021000-7f221c000000 ---p 00000000 00:00 0 
    7f221c0b9000-7f221c1ba000 rw-p 00000000 00:00 0 
    7f221c1ba000-7f221c1bb000 ---p 00000000 00:00 0 
    7f221c1bb000-7f221c3bc000 rw-p 00000000 00:00 0 
    7f221c3bc000-7f221c3d0000 r-xp 00000000 08:01 2638813                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/bigdecimal.so
    7f221c3d0000-7f221c5d0000 ---p 00014000 08:01 2638813                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/bigdecimal.so
    7f221c5d0000-7f221c5d1000 r--p 00014000 08:01 2638813                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/bigdecimal.so
    7f221c5d1000-7f221c5d2000 rw-p 00015000 08:01 2638813                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/bigdecimal.so
    7f221c5d4000-7f221c5d9000 r-xp 00000000 08:01 139755                     /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
    7f221c5d9000-7f221c7d8000 ---p 00005000 08:01 139755                     /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
    7f221c7d8000-7f221c7d9000 r--p 00004000 08:01 139755                     /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
    7f221c7d9000-7f221c7da000 rw-p 00005000 08:01 139755                     /usr/lib/x86_64-linux-gnu/libXdmcp.so.6.0.0
    7f221c7dc000-7f221c7de000 r-xp 00000000 08:01 139744                     /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
    7f221c7de000-7f221c9de000 ---p 00002000 08:01 139744                     /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
    7f221c9de000-7f221c9df000 r--p 00002000 08:01 139744                     /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
    7f221c9df000-7f221c9e0000 rw-p 00003000 08:01 139744                     /usr/lib/x86_64-linux-gnu/libXau.so.6.0.0
    7f221c9e4000-7f221ca56000 r-xp 00000000 08:01 1839739                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
    7f221ca56000-7f221cc55000 ---p 00072000 08:01 1839739                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
    7f221cc55000-7f221cc56000 r--p 00071000 08:01 1839739                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
    7f221cc56000-7f221cc57000 rw-p 00072000 08:01 1839739                    /lib/x86_64-linux-gnu/libpcre.so.3.13.3
    7f221cc5c000-7f221cc7d000 r-xp 00000000 08:01 141278                     /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
    7f221cc7d000-7f221ce7c000 ---p 00021000 08:01 141278                     /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
    7f221ce7c000-7f221ce7d000 r--p 00020000 08:01 141278                     /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
    7f221ce7d000-7f221ce7e000 rw-p 00021000 08:01 141278                     /usr/lib/x86_64-linux-gnu/libxcb.so.1.1.0
    7f221ce84000-7f221ceb5000 r-xp 00000000 08:01 140791                     /usr/lib/x86_64-linux-gnu/libpng16.so.16.25.0
    7f221ceb5000-7f221d0b4000 ---p 00031000 08:01 140791                     /usr/lib/x86_64-linux-gnu/libpng16.so.16.25.0
    7f221d0b4000-7f221d0b5000 r--p 00030000 08:01 140791                     /usr/lib/x86_64-linux-gnu/libpng16.so.16.25.0
    7f221d0b5000-7f221d0b6000 rw-p 00031000 08:01 140791                     /usr/lib/x86_64-linux-gnu/libpng16.so.16.25.0
    7f221d0bc000-7f221d0e3000 r-xp 00000000 08:01 1849005                    /lib/x86_64-linux-gnu/libexpat.so.1.6.2
    7f221d0e3000-7f221d2e3000 ---p 00027000 08:01 1849005                    /lib/x86_64-linux-gnu/libexpat.so.1.6.2
    7f221d2e3000-7f221d2e5000 r--p 00027000 08:01 1849005                    /lib/x86_64-linux-gnu/libexpat.so.1.6.2
    7f221d2e5000-7f221d2e6000 rw-p 00029000 08:01 1849005                    /lib/x86_64-linux-gnu/libexpat.so.1.6.2
    7f221d2ec000-7f221d3fe000 r-xp 00000000 08:01 1840353                    /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2
    7f221d3fe000-7f221d5fd000 ---p 00112000 08:01 1840353                    /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2
    7f221d5fd000-7f221d5fe000 r--p 00111000 08:01 1840353                    /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2
    7f221d5fe000-7f221d5ff000 rw-p 00112000 08:01 1840353                    /lib/x86_64-linux-gnu/libglib-2.0.so.0.5000.2
    7f221d5ff000-7f221d600000 rw-p 00000000 00:00 0 
    7f221d604000-7f221d631000 r-xp 00000000 08:01 140306                     /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
    7f221d631000-7f221d830000 ---p 0002d000 08:01 140306                     /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
    7f221d830000-7f221d831000 r--p 0002c000 08:01 140306                     /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
    7f221d831000-7f221d832000 rw-p 0002d000 08:01 140306                     /usr/lib/x86_64-linux-gnu/libgomp.so.1.0.0
    7f221d834000-7f221d83c000 r-xp 00000000 08:01 140564                     /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1
    7f221d83c000-7f221da3c000 ---p 00008000 08:01 140564                     /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1
    7f221da3c000-7f221da3d000 r--p 00008000 08:01 140564                     /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1
    7f221da3d000-7f221da3e000 rw-p 00009000 08:01 140564                     /usr/lib/x86_64-linux-gnu/libltdl.so.7.3.1
    7f221da44000-7f221da5d000 r-xp 00000000 08:01 1835252                    /lib/x86_64-linux-gnu/libz.so.1.2.8
    7f221da5d000-7f221dc5c000 ---p 00019000 08:01 1835252                    /lib/x86_64-linux-gnu/libz.so.1.2.8
    7f221dc5c000-7f221dc5d000 r--p 00018000 08:01 1835252                    /lib/x86_64-linux-gnu/libz.so.1.2.8
    7f221dc5d000-7f221dc5e000 rw-p 00019000 08:01 1835252                    /lib/x86_64-linux-gnu/libz.so.1.2.8
    7f221dc64000-7f221dc73000 r-xp 00000000 08:01 1839610                    /lib/x86_64-linux-gnu/libbz2.so.1.0.4
    7f221dc73000-7f221de72000 ---p 0000f000 08:01 1839610                    /lib/x86_64-linux-gnu/libbz2.so.1.0.4
    7f221de72000-7f221de73000 r--p 0000e000 08:01 1839610                    /lib/x86_64-linux-gnu/libbz2.so.1.0.4
    7f221de73000-7f221de74000 rw-p 0000f000 08:01 1839610                    /lib/x86_64-linux-gnu/libbz2.so.1.0.4
    7f221de74000-7f221dfa9000 r-xp 00000000 08:01 139740                     /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0
    7f221dfa9000-7f221e1a8000 ---p 00135000 08:01 139740                     /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0
    7f221e1a8000-7f221e1a9000 r--p 00134000 08:01 139740                     /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0
    7f221e1a9000-7f221e1ad000 rw-p 00135000 08:01 139740                     /usr/lib/x86_64-linux-gnu/libX11.so.6.3.0
    7f221e1b4000-7f221e1c5000 r-xp 00000000 08:01 139757                     /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0
    7f221e1c5000-7f221e3c4000 ---p 00011000 08:01 139757                     /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0
    7f221e3c4000-7f221e3c5000 r--p 00010000 08:01 139757                     /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0
    7f221e3c5000-7f221e3c6000 rw-p 00011000 08:01 139757                     /usr/lib/x86_64-linux-gnu/libXext.so.6.4.0
    7f221e3cc000-7f221e473000 r-xp 00000000 08:01 132633                     /usr/lib/x86_64-linux-gnu/libfreetype.so.6.12.3
    7f221e473000-7f221e672000 ---p 000a7000 08:01 132633                     /usr/lib/x86_64-linux-gnu/libfreetype.so.6.12.3
    7f221e672000-7f221e678000 r--p 000a6000 08:01 132633                     /usr/lib/x86_64-linux-gnu/libfreetype.so.6.12.3
    7f221e678000-7f221e679000 rw-p 000ac000 08:01 132633                     /usr/lib/x86_64-linux-gnu/libfreetype.so.6.12.3
    7f221e67c000-7f221e6b9000 r-xp 00000000 08:01 140159                     /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.9.0
    7f221e6b9000-7f221e8b8000 ---p 0003d000 08:01 140159                     /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.9.0
    7f221e8b8000-7f221e8ba000 r--p 0003c000 08:01 140159                     /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.9.0
    7f221e8ba000-7f221e8bf000 rw-p 0003e000 08:01 140159                     /usr/lib/x86_64-linux-gnu/libfontconfig.so.1.9.0
    7f221e8c4000-7f221eaae000 r-xp 00000000 08:01 140143                     /usr/lib/x86_64-linux-gnu/libfftw3.so.3.4.4
    7f221eaae000-7f221ecad000 ---p 001ea000 08:01 140143                     /usr/lib/x86_64-linux-gnu/libfftw3.so.3.4.4
    7f221ecad000-7f221ecc1000 r--p 001e9000 08:01 140143                     /usr/lib/x86_64-linux-gnu/libfftw3.so.3.4.4
    7f221ecc1000-7f221ecc2000 rw-p 001fd000 08:01 140143                     /usr/lib/x86_64-linux-gnu/libfftw3.so.3.4.4
    7f221ecc4000-7f221ecdb000 r-xp 00000000 08:01 140560                     /usr/lib/x86_64-linux-gnu/liblqr-1.so.0.3.2
    7f221ecdb000-7f221eeda000 ---p 00017000 08:01 140560                     /usr/lib/x86_64-linux-gnu/liblqr-1.so.0.3.2
    7f221eeda000-7f221eedb000 r--p 00016000 08:01 140560                     /usr/lib/x86_64-linux-gnu/liblqr-1.so.0.3.2
    7f221eedb000-7f221eedc000 rw-p 00017000 08:01 140560                     /usr/lib/x86_64-linux-gnu/liblqr-1.so.0.3.2
    7f221eedc000-7f221ef2e000 r-xp 00000000 08:01 140538                     /usr/lib/x86_64-linux-gnu/liblcms2.so.2.0.7
    7f221ef2e000-7f221f12d000 ---p 00052000 08:01 140538                     /usr/lib/x86_64-linux-gnu/liblcms2.so.2.0.7
    7f221f12d000-7f221f12e000 r--p 00051000 08:01 140538                     /usr/lib/x86_64-linux-gnu/liblcms2.so.2.0.7
    7f221f12e000-7f221f132000 rw-p 00052000 08:01 140538                     /usr/lib/x86_64-linux-gnu/liblcms2.so.2.0.7
    7f221f132000-7f221f133000 rw-p 00000000 00:00 0 
    7f221f134000-7f221f375000 r-xp 00000000 08:01 134270                     /usr/lib/x86_64-linux-gnu/libMagickCore-6.Q16.so.2.0.0
    7f221f375000-7f221f574000 ---p 00241000 08:01 134270                     /usr/lib/x86_64-linux-gnu/libMagickCore-6.Q16.so.2.0.0
    7f221f574000-7f221f588000 r--p 00240000 08:01 134270                     /usr/lib/x86_64-linux-gnu/libMagickCore-6.Q16.so.2.0.0
    7f221f588000-7f221f5c7000 rw-p 00254000 08:01 134270                     /usr/lib/x86_64-linux-gnu/libMagickCore-6.Q16.so.2.0.0
    7f221f5c7000-7f221f5e6000 rw-p 00000000 00:00 0 
    7f221f5ec000-7f221f657000 r-xp 00000000 00:30 3433692                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rmagick-2.16.0/lib/RMagick2.so
    7f221f657000-7f221f857000 ---p 0006b000 00:30 3433692                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rmagick-2.16.0/lib/RMagick2.so
    7f221f857000-7f221f859000 r--p 0006b000 00:30 3433692                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rmagick-2.16.0/lib/RMagick2.so
    7f221f859000-7f221f85b000 rw-p 0006d000 00:30 3433692                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/rmagick-2.16.0/lib/RMagick2.so
    7f221f85b000-7f221f85c000 rw-p 00000000 00:00 0 
    7f221f85c000-7f221f872000 r-xp 00000000 08:01 1839651                    /lib/x86_64-linux-gnu/libgcc_s.so.1
    7f221f872000-7f221fa71000 ---p 00016000 08:01 1839651                    /lib/x86_64-linux-gnu/libgcc_s.so.1
    7f221fa71000-7f221fa72000 r--p 00015000 08:01 1839651                    /lib/x86_64-linux-gnu/libgcc_s.so.1
    7f221fa72000-7f221fa73000 rw-p 00016000 08:01 1839651                    /lib/x86_64-linux-gnu/libgcc_s.so.1
    7f221fa74000-7f221fa7b000 r-xp 00000000 08:01 1848959                    /lib/x86_64-linux-gnu/librt-2.24.so
    7f221fa7b000-7f221fc7a000 ---p 00007000 08:01 1848959                    /lib/x86_64-linux-gnu/librt-2.24.so
    7f221fc7a000-7f221fc7b000 r--p 00006000 08:01 1848959                    /lib/x86_64-linux-gnu/librt-2.24.so
    7f221fc7b000-7f221fc7c000 rw-p 00007000 08:01 1848959                    /lib/x86_64-linux-gnu/librt-2.24.so
    7f221fc7c000-7f221fd76000 r-xp 00000000 00:30 5270280                    /home/danielpclark/dev/faster_path/target/release/libfaster_path.so
    7f221fd76000-7f221ff75000 ---p 000fa000 00:30 5270280                    /home/danielpclark/dev/faster_path/target/release/libfaster_path.so
    7f221ff75000-7f221ff7e000 r--p 000f9000 00:30 5270280                    /home/danielpclark/dev/faster_path/target/release/libfaster_path.so
    7f221ff7e000-7f221ff7f000 rw-p 00102000 00:30 5270280                    /home/danielpclark/dev/faster_path/target/release/libfaster_path.so
    7f221ff84000-7f221ff8d000 r-xp 00000000 08:01 2638791                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/fiddle.so
    7f221ff8d000-7f222018c000 ---p 00009000 08:01 2638791                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/fiddle.so
    7f222018c000-7f222018d000 r--p 00008000 08:01 2638791                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/fiddle.so
    7f222018d000-7f222018e000 rw-p 00009000 08:01 2638791                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/fiddle.so
    7f2220194000-7f222019b000 r-xp 00000000 08:01 140141                     /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4
    7f222019b000-7f222039a000 ---p 00007000 08:01 140141                     /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4
    7f222039a000-7f222039b000 r--p 00006000 08:01 140141                     /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4
    7f222039b000-7f222039c000 rw-p 00007000 08:01 140141                     /usr/lib/x86_64-linux-gnu/libffi.so.6.0.4
    7f222039c000-7f22203bf000 r-xp 00000000 00:30 1331270                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi_c.so
    7f22203bf000-7f22205be000 ---p 00023000 00:30 1331270                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi_c.so
    7f22205be000-7f22205bf000 r--p 00022000 00:30 1331270                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi_c.so
    7f22205bf000-7f22205c0000 rw-p 00023000 00:30 1331270                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/ffi-1.9.18/lib/ffi_c.so
    7f22205c4000-7f22207dd000 r-xp 00000000 08:01 1835036                    /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
    7f22207dd000-7f22209dd000 ---p 00219000 08:01 1835036                    /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
    7f22209dd000-7f22209f9000 r--p 00219000 08:01 1835036                    /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
    7f22209f9000-7f2220a05000 rw-p 00235000 08:01 1835036                    /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
    7f2220a05000-7f2220a08000 rw-p 00000000 00:00 0 
    7f2220a0c000-7f2220a0d000 r-xp 00000000 08:01 3425468                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/digest/sha1.so
    7f2220a0d000-7f2220c0c000 ---p 00001000 08:01 3425468                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/digest/sha1.so
    7f2220c0c000-7f2220c0d000 r--p 00000000 08:01 3425468                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/digest/sha1.so
    7f2220c0d000-7f2220c0e000 rw-p 00001000 08:01 3425468                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/digest/sha1.so
    7f2220c14000-7f2220c18000 r-xp 00000000 08:01 2638812                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/digest.so
    7f2220c18000-7f2220e17000 ---p 00004000 08:01 2638812                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/digest.so
    7f2220e17000-7f2220e18000 r--p 00003000 08:01 2638812                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/digest.so
    7f2220e18000-7f2220e19000 rw-p 00004000 08:01 2638812                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/digest.so
    7f2220e1c000-7f2220e22000 r-xp 00000000 08:01 2638799                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/etc.so
    7f2220e22000-7f2221021000 ---p 00006000 08:01 2638799                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/etc.so
    7f2221021000-7f2221022000 r--p 00005000 08:01 2638799                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/etc.so
    7f2221022000-7f2221023000 rw-p 00006000 08:01 2638799                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/etc.so
    7f2221024000-7f2221028000 r-xp 00000000 00:30 3823617                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/io-console-0.4.6/lib/io/console.so
    7f2221028000-7f2221228000 ---p 00004000 00:30 3823617                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/io-console-0.4.6/lib/io/console.so
    7f2221228000-7f2221229000 r--p 00004000 00:30 3823617                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/io-console-0.4.6/lib/io/console.so
    7f2221229000-7f222122a000 rw-p 00005000 00:30 3823617                    /home/danielpclark/.rvm/gems/ruby-2.3.4/gems/io-console-0.4.6/lib/io/console.so
    7f222122c000-7f2221233000 r-xp 00000000 08:01 2638789                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/pathname.so
    7f2221233000-7f2221432000 ---p 00007000 08:01 2638789                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/pathname.so
    7f2221432000-7f2221433000 r--p 00006000 08:01 2638789                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/pathname.so
    7f2221433000-7f2221434000 rw-p 00007000 08:01 2638789                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/pathname.so
    7f2221434000-7f222143c000 r-xp 00000000 08:01 2638807                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/stringio.so
    7f222143c000-7f222163b000 ---p 00008000 08:01 2638807                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/stringio.so
    7f222163b000-7f222163c000 r--p 00007000 08:01 2638807                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/stringio.so
    7f222163c000-7f222163d000 rw-p 00008000 08:01 2638807                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/stringio.so
    7f2221644000-7f2221646000 r-xp 00000000 08:01 3425420                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/enc/trans/transdb.so
    7f2221646000-7f2221846000 ---p 00002000 08:01 3425420                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/enc/trans/transdb.so
    7f2221846000-7f2221847000 r--p 00002000 08:01 3425420                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/enc/trans/transdb.so
    7f2221847000-7f2221848000 rw-p 00003000 08:01 3425420                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/enc/trans/transdb.so
    7f222184c000-7f222184e000 r-xp 00000000 08:01 3425427                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/enc/encdb.so
    7f222184e000-7f2221a4d000 ---p 00002000 08:01 3425427                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/enc/encdb.so
    7f2221a4d000-7f2221a4e000 r--p 00001000 08:01 3425427                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/enc/encdb.so
    7f2221a4e000-7f2221a4f000 rw-p 00002000 08:01 3425427                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/enc/encdb.so
    7f2221a54000-7f2221d2d000 r--p 00000000 08:01 163173                     /usr/lib/locale/locale-archive
    7f2221d34000-7f2221e3c000 r-xp 00000000 08:01 1848946                    /lib/x86_64-linux-gnu/libm-2.24.so
    7f2221e3c000-7f222203b000 ---p 00108000 08:01 1848946                    /lib/x86_64-linux-gnu/libm-2.24.so
    7f222203b000-7f222203c000 r--p 00107000 08:01 1848946                    /lib/x86_64-linux-gnu/libm-2.24.so
    7f222203c000-7f222203d000 rw-p 00108000 08:01 1848946                    /lib/x86_64-linux-gnu/libm-2.24.so
    7f2222044000-7f222204d000 r-xp 00000000 08:01 1848944                    /lib/x86_64-linux-gnu/libcrypt-2.24.so
    7f222204d000-7f222224c000 ---p 00009000 08:01 1848944                    /lib/x86_64-linux-gnu/libcrypt-2.24.so
    7f222224c000-7f222224d000 r--p 00008000 08:01 1848944                    /lib/x86_64-linux-gnu/libcrypt-2.24.so
    7f222224d000-7f222224e000 rw-p 00009000 08:01 1848944                    /lib/x86_64-linux-gnu/libcrypt-2.24.so
    7f222224e000-7f222227c000 rw-p 00000000 00:00 0 
    7f222227c000-7f222227f000 r-xp 00000000 08:01 1848945                    /lib/x86_64-linux-gnu/libdl-2.24.so
    7f222227f000-7f222247e000 ---p 00003000 08:01 1848945                    /lib/x86_64-linux-gnu/libdl-2.24.so
    7f222247e000-7f222247f000 r--p 00002000 08:01 1848945                    /lib/x86_64-linux-gnu/libdl-2.24.so
    7f222247f000-7f2222480000 rw-p 00003000 08:01 1848945                    /lib/x86_64-linux-gnu/libdl-2.24.so
    7f2222484000-7f2222503000 r-xp 00000000 08:01 140282                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.1
    7f2222503000-7f2222702000 ---p 0007f000 08:01 140282                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.1
    7f2222702000-7f2222703000 r--p 0007e000 08:01 140282                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.1
    7f2222703000-7f2222704000 rw-p 0007f000 08:01 140282                     /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.1
    7f2222704000-7f222271c000 r-xp 00000000 08:01 1848957                    /lib/x86_64-linux-gnu/libpthread-2.24.so
    7f222271c000-7f222291c000 ---p 00018000 08:01 1848957                    /lib/x86_64-linux-gnu/libpthread-2.24.so
    7f222291c000-7f222291d000 r--p 00018000 08:01 1848957                    /lib/x86_64-linux-gnu/libpthread-2.24.so
    7f222291d000-7f222291e000 rw-p 00019000 08:01 1848957                    /lib/x86_64-linux-gnu/libpthread-2.24.so
    7f222291e000-7f2222922000 rw-p 00000000 00:00 0 
    7f2222924000-7f2222ae2000 r-xp 00000000 08:01 1848942                    /lib/x86_64-linux-gnu/libc-2.24.so
    7f2222ae2000-7f2222ce1000 ---p 001be000 08:01 1848942                    /lib/x86_64-linux-gnu/libc-2.24.so
    7f2222ce1000-7f2222ce5000 r--p 001bd000 08:01 1848942                    /lib/x86_64-linux-gnu/libc-2.24.so
    7f2222ce5000-7f2222ce7000 rw-p 001c1000 08:01 1848942                    /lib/x86_64-linux-gnu/libc-2.24.so
    7f2222ce7000-7f2222ceb000 rw-p 00000000 00:00 0 
    7f2222cec000-7f2222fbf000 r-xp 00000000 08:01 2508786                    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3.0
    7f2222fbf000-7f22231be000 ---p 002d3000 08:01 2508786                    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3.0
    7f22231be000-7f22231c4000 r--p 002d2000 08:01 2508786                    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3.0
    7f22231c4000-7f22231c7000 rw-p 002d8000 08:01 2508786                    /usr/share/rvm/rubies/ruby-2.3.4/lib/libruby.so.2.3.0
    7f22231c7000-7f22231d8000 rw-p 00000000 00:00 0 
    7f22231dc000-7f2223201000 r-xp 00000000 08:01 1836520                    /lib/x86_64-linux-gnu/ld-2.24.so
    7f222326c000-7f22232ac000 r--s 00000000 08:01 2638789                    /usr/share/rvm/rubies/ruby-2.3.4/lib/ruby/2.3.0/x86_64-linux/pathname.so
    7f22232ac000-7f22232cf000 r--s 00000000 08:01 2508784                    /usr/share/rvm/rubies/ruby-2.3.4/bin/ruby
    7f22232d1000-7f22233d4000 rw-p 00000000 00:00 0 
    7f22233f4000-7f22233fb000 r--s 00000000 08:01 414919                     /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
    7f22233fd000-7f22233fe000 ---p 00000000 00:00 0 
    7f22233fe000-7f2223401000 rw-p 00000000 00:00 0 
    7f2223401000-7f2223402000 r--p 00025000 08:01 1836520                    /lib/x86_64-linux-gnu/ld-2.24.so
    7f2223402000-7f2223403000 rw-p 00026000 08:01 1836520                    /lib/x86_64-linux-gnu/ld-2.24.so
    7f2223403000-7f2223404000 rw-p 00000000 00:00 0 
    7f2223404000-7f2223405000 r-xp 00000000 00:00 0 
    7f2223405000-7f222340a000 rw-p 00000000 00:00 0 
    7ffca585a000-7ffca6059000 rw-p 00000000 00:00 0                          [stack]
    7ffca6154000-7ffca6156000 r--p 00000000 00:00 0                          [vvar]
    7ffca6156000-7ffca6158000 r-xp 00000000 00:00 0                          [vdso]
    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
    

    Working Code

    An important detail to add is I have a similar implementation which does the following:

      1. get the directory contents
      1. convert strings to a RString object
      1. append each of those to an Array and return it to Ruby

    And this never segfaults for me. This helps narrow down the problem area.

    opened by danielpclark 6
  • Need for unwraps everywhere?

    Need for unwraps everywhere?

    I feel like I'm needing to unwrap() everything to pass to other functions.

    Here is what I have so far

    #[macro_use]
    extern crate ruru;
    extern crate inflector;
    
    // // dash: kebab-case
    use inflector::cases::kebabcase::to_kebab_case;
    // // underscore: snake_case
    use inflector::cases::snakecase::to_snake_case;
    // // camel_lower: camelCase
    use inflector::cases::camelcase::to_camel_case;
    // // camel: ClassCase (PascalCase)
    use inflector::cases::classcase::to_class_case;
    
    use ruru::{Class, Object, RString, Hash, Array, Symbol, AnyObject, VM};
    use ruru::types::ValueType;
    
    class!(CaseTransform);
    
    methods! (
        CaseTransform,
        itself,
    
        fn deepTransformKeys(hash: Hash, block: &Fn(String) -> String) -> Hash {
            let result = Hash::new();
    
            hash.unwrap().each(|key, value| {
                let newValue = if value.ty() == ValueType::Hash { deepTransformKeys(value, block).to_any_object() } else { value };
                let newKey = RString::new(block(key.unwrap().to_string()));
                result.store(newKey, newValue);
            });
    
            result
        }
    
        fn transformArray(value: Array, transformMethod: &Fn(AnyObject) -> AnyObject) -> Array {
            value.map(|item| transformMethod(item)).unwrap()
        }
    
        fn transformHash(value: Hash, transformMethod: &Fn(AnyObject) -> AnyObject) -> Hash {
            deepTransformKeys(value, |key| transformMethod(key))
        }
    
        fn transformSymbol(value: Symbol, transformMethod: &Fn(AnyObject) -> AnyObject) -> Symbol {
            let transformed = transformMethod(value);
            Symbol::new(transformed);
        }
    
        fn transform(
            value: AnyObject,
            objectTransform: &Fn(AnyObject) -> AnyObject,
            keyTransform: &Fn(String) -> String
        ) -> AnyObject {
            match value.unwrap().ty() {
                ValueType::Array => transformArray(value, objectTransform).to_any_object(),
                ValueType::Hash => transformHash(value, objectTransform).to_any_object(),
                ValueType::Symbol => transformSymbol(value, objectTransform).to_any_object(),
                ValueType::RString => keyTransform(value).to_any_object(),
                ValueType::Object => value
            }
        }
    
        fn toPascalCase(key: String) -> String { to_class_case(to_snake_case(key.unwrap())) }
        fn toCamelCase(key: String) -> String { to_camel_case(to_snake_case(key.unwrap())) }
        fn toDashedCase(key: String) -> String { to_kebab_case(to_snake_case(key.unwrap())) }
        fn toSnakeCase(key: String) -> String { to_snake_case(key.unwrap()) }
    
        fn camel(value: AnyObject) -> AnyObject { transform(value.unwrap().to_any_object(), &camel, &toPascalCase) }
        fn camelLower(value: AnyObject) -> AnyObject { transform(value.unwrap().to_any_object(), &camelLower, &toCamelCase) }
        fn dash(value: AnyObject) -> AnyObject { transform(value.unwrap().to_any_object(), &dash, &toDashedCase) }
        fn underscore(value: AnyObject) -> AnyObject { transform(value.unwrap(), &underscore, &toSnakeCase) }
        fn unaltered(value: AnyObject) -> AnyObject { value.unwrap().to_any_object() }
    );
    
    #[no_mangle]
    pub extern fn initialize_case_transform() {
        Class::new("CaseTransform", None).define(|itself| {
            itself.def_self("camel", camel);
            itself.def_self("camel_lower", camelLower);
            itself.def_self("dash", dash);
            itself.def_self("underscore", underscore);
            itself.def_self("unaltered", unaltered);
        });
    }
    
    

    I may also be struggling with Rust as I'm still fairly new to it -- and I may be trying too hard to adapt the ruby implementation I had of this to Rust (hence all the AnyObject / to_any_object everywhere). :-\

    Here is the full repo, if you're interested: https://github.com/NullVoxPopuli/case_transform/blob/8f017c642a254388d6ca6b4c2aaee8f10fea0d17/ext/case_transform/src/lib.rs

    question 
    opened by NullVoxPopuli 6
  • Implement Iterator support for Array

    Implement Iterator support for Array

    I implemented this a month ago but forgot to make a PR for it, after the ruby-sys PR was merged.

    Consider this a placeholder so that I remember to rebase this and so no one else duplicates my work :smile:

    opened by malept 5
  • Add AnyObject.ty

    Add AnyObject.ty

    This adds a Rust port of C macros (from Ruby 2.3.1's ruby/ruby.h) that determines the type of a given Value. AnyObject.get_type is a helper method for this implementation.

    The implementation of rb_builtin_type comes from https://github.com/jdm/ruby-mri-rs.

    I'm not convinced that the changes are organized in the best manner, so I would be happy to move things around. Otherwise, it's working pretty well in the Rust + Ruby extension I converted from a Rust + C + Ruby hybrid.

    opened by malept 5
  • Linking error (with libruby present)

    Linking error (with libruby present)

    I am experiencing the same issue as #1 but I have already built ruby with --enable-shared:

    $ rbenv version
    2.3.0 (set by /Users/wmoore/Projects/translation_middleware/.ruby-version)
    
    $ ls ~/.rbenv/versions/2.3.0/lib
    libruby.2.3.0-static.a libruby.2.3.dylib      pkgconfig
    libruby.2.3.0.dylib    libruby.dylib          ruby
    

    Error:

    error: linking with `cc` failed: exit code: 1
    note: "cc" "-m64" "-L" "/Users/wmoore/.multirust/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib" "/Users/wmoore/Projects/translation_middleware/target/debug/translation_middleware.0.o" "-o" "/Users/wmoore/Projects/translation_middleware/target/debug/libtranslation_middleware.dylib" "/Users/wmoore/Projects/translation_middleware/target/debug/translation_middleware.metadata.o" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "/Users/wmoore/Projects/translation_middleware/target/debug" "-L" "/Users/wmoore/Projects/translation_middleware/target/debug/deps" "-L" "/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib" "-L" "/Users/wmoore/.multirust/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/libruru-c125d47a5dbdbad9.rlib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/libruby_sys-9c98563f5869bd84.rlib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/liblibc-12d5d911cf5411c3.rlib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/libstd-4fda350b.rlib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/libcollections-4fda350b.rlib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/librustc_unicode-4fda350b.rlib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/librand-4fda350b.rlib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/liballoc-4fda350b.rlib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/liballoc_system-4fda350b.rlib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/liblibc-4fda350b.rlib" "-Wl,-force_load,/var/folders/tg/d0k9t6855130nzcfjv7rcq0c0000gn/T/rustc.ch7vhH2EOR7i/libcore-4fda350b.rlib" "-l" "ruby" "-l" "System" "-l" "pthread" "-l" "c" "-l" "m" "-dynamiclib" "-Wl,-dylib" "-l" "compiler-rt"
    note: Undefined symbols for architecture x86_64:
      "_rb_funcallv", referenced from:
          binding::util::call_method::hd3cb17cf82fa681azia in libruru-c125d47a5dbdbad9.rlib(ruru-c125d47a5dbdbad9.0.o)
      "_rb_sym2id", referenced from:
          binding::symbol::sym_to_id::ha5d004a08aad5d8byha in libruru-c125d47a5dbdbad9.rlib(ruru-c125d47a5dbdbad9.0.o)
      "_rb_id2sym", referenced from:
          binding::symbol::id_to_sym::h7a1479f68e6b60724ga in libruru-c125d47a5dbdbad9.rlib(ruru-c125d47a5dbdbad9.0.o)
    ld: symbol(s) not found for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    
    error: aborting due to previous error
    Could not compile `translation_middleware`.
    
    To learn more, run the command again with --verbose.
    

    Using rustc 1.8.0 (db2939409 2016-04-11)

    I note that in all the -L arguments to the compiler it includes "/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib", which is no doubt the issue — I want to it to find the current rbenv ruby. Do you have any suggestions on how to get it to pick up the right ruby?

    opened by wezm 5
  • C Namespace collisions

    C Namespace collisions

    If you define a method called "gets" the code will compile, but will segfault whenever the method is called because the binding will collide with libc's gets, the latter overriding the former.

    It happened to me, and it took me an hour or two before realizing what was going on.

    So I had code like this:

    class!(InputStream);
    methods!(InputStream, itself,
         fn gets() -> AnyObject {
            NilClass::new().to_any_object()
         }
    )
    
    #[no_mangle]
    pub extern fn init() {
        Class::new("InputStream", None).define(|itself| {
                    itself.def("gets", gets);
        }
    }
    

    When I discovered what was going on (by using GDB to get backtraces) the workaround was clear, renaming gets to InputStream_gets did the trick. I did not see mention of this in the docs, so one solution could be to just add a warning to the docs. A more robust solution would be to prefix the C function names automatically, maybe with something like __ruru_.

    I-bug T-ruru A-class-definition 
    opened by tinco 4
  • Use travis-cargo to run tests & build docs

    Use travis-cargo to run tests & build docs

    This will allow @d-unseductable to automatically upload docs when there are new commits to master (assuming he adds an after_success section and the encrypted GH_TOKEN per the travis-cargo docs).

    opened by malept 4
  • Refactor &str to CString conversions

    Refactor &str to CString conversions

    • Create util::str_to_cstring function

    @steveklabnik, a small clean up for the hacking session #4 😄

    Trying to DRY up the CString handling. Similar approach worked fine for Vec -> ptr conversions (1b9932904646741229a683d86a0e7761ab02a41f)

    opened by d-unseductable 4
  • worker thread cleanup and `Drop`

    worker thread cleanup and `Drop`

    I haven't been able to find any documentation about how worker threads which don't interact directly with ruby objects are handled in terms of Drop. In my case I have existing rust code which establishes a long-running thread worker to handle incoming "jobs" via a channel. The thread "lives" in a struct that implements Drop, which tells the thread to stop waiting for new messages and terminate when it's dropped (glossing over details here). In this case, my expectation is the rust/ruru interface to ruby can cleanly send data (perhaps copied data) from ruby over the channel to the thread worker. Would the thread worker need to be setup with the Thread struct in ruru (Thread::call_without_gvl)? Or could I use std::thread? Will Drop be called when the parent struct is destroyed?

    Thanks for any help you can provide.

    opened by jstrong-tios 0
  • Project forked and continued at danielpclark/rutie

    Project forked and continued at danielpclark/rutie

    Ruru has been inactive for some time so an official fork has been made called Rutie . Much additional work and development has been done now in Rutie and it's actively maintained.

    opened by danielpclark 0
  • Why is the `RString` API using Rust's `String`/`str` instead of `Vec<u8>`/`[u8]`?

    Why is the `RString` API using Rust's `String`/`str` instead of `Vec`/`[u8]`?

    My understanding is that Ruby's strings are sequences of arbitrary bytes, even if the associated encoding is UTF-8. So the natural mapping to Rust would be as [u8] and Vec<u8> instead of str and String for most purposes. A couple of helpers using str should be fine (e.g. the from_utf8 function).

    Functions which convert a ruby string to &str or String without verifying UTF-8 validity must be marked unsafe, otherwise they're unsound.

    opened by CodesInChaos 1
  • Ruby 2.5 Warnings on Data classes

    Ruby 2.5 Warnings on Data classes

    The docs recommend inheriting from Data following this idiom:

    let data_class = Class::from_existing("Data");
    Class::new("MyClass", Some(&Data)).define(...)
    

    On Ruby 2.5, this prints warning: constant ::Data is deprecated every time Data is accessed. I guess that there is some way to access this via the C extension API but I haven't found it yet.

    opened by grncdr 4
Owner
Dmitry Gritsay
Dmitry Gritsay
ruby-build is a command-line utility that makes it easy to install virtually any version of Ruby, from source.

ruby-build ruby-build is a command-line utility that makes it easy to install virtually any version of Ruby, from source. It is available as a plugin

null 3.7k Jan 5, 2023
“The Tie Between Ruby and Rust.”

Rutie Rutie — /ro͞oˈˌtī/rOOˈˌtI/rüˈˌtaI/ Integrate Ruby with your Rust application. Or integrate Rust with your Ruby application. This project allows

Daniel P. Clark 726 Jan 2, 2023
Fast state-of-the-art tokenizers for Ruby

Fast state-of-the-art tokenizers for Ruby

Andrew Kane 34 Dec 15, 2022
Rust bindings for writing safe and fast native Node.js modules.

Rust bindings for writing safe and fast native Node.js modules. Getting started Once you have the platform dependencies installed, getting started is

The Neon Project 7k Jan 4, 2023
Rust bindings to the Java Native Interface — JNI

JNI Bindings for Rust This project provides complete JNI bindings for Rust, allowing to: Implement native Java methods for JVM and Android in Rust Cal

null 768 Dec 30, 2022
Native webview bindings for Node.js

webview-native Native webview bindings for Node.js Installing webview-native Installing webview-native requires a supported version of Node and Rust.

SnowflakeDev Community ❄️ 7 Nov 16, 2022
A script language like Python or Lua written in Rust, with exactly the same syntax as Go's.

A script language like Python or Lua written in Rust, with exactly the same syntax as Go's.

null 1.4k Jan 1, 2023
An npm scripts runner written in Rust.

dum replaces npm run. Instead of waiting 200ms for your npm client to start, it will start immediately. ?? You can help the author become a full-time

EGOIST 1.3k Jan 9, 2023
swc is a super-fast compiler written in rust; producing widely-supported javascript from modern standards and typescript.

Make the web (development) faster. SWC (stands for Speedy Web Compiler) is a super-fast TypeScript / JavaScript compiler written in Rust. It's a libra

swc 25.4k Dec 31, 2022
A Web-App written in Rust with Yew, using the same SyntaxHighlighter from Google Code Archive as planetb.ca

PlanetB SyntaxHighlighter About This is a small app, providing static files to have a frontend to format your code so you can paste it with styles to

Christof Weickhardt 2 Dec 14, 2022
A simple Pascal interpreter written in rust.

rascal A simple Pascal interpreter written in rust. Usage Download the latest rascal executable from the release page. Run the executable. rascal.exe

null 47 Dec 7, 2022
My 'Lugli' language compiler for learning purposes, written in rust. 🥰🤠

Lugli language compiler My 'Lugli' language compiler for learning purposes, written in rust. This language is to be a subset for other purposes, for e

Vinicios Lugli 3 Nov 2, 2022
A parser, compiler, and virtual machine evaluator for a minimal subset of Lua; written from scratch in Rust.

lust: Lua in Rust This project implements a parser, compiler, and virtual machine evaluator for a minimal subset of Lua. It is written from scratch in

Phil Eaton 146 Dec 16, 2022
RustPython - A Python Interpreter written in Rust

RustPython A Python-3 (CPython >= 3.9.0) Interpreter written in Rust ?? ?? ?? . Usage Check out our online demo running on WebAssembly. RustPython req

null 13.3k Jan 2, 2023
A JVM written in Rust.

Kate Kate is a JVM written in Rust, it's a passion project that aims to improve my knowledge of systems development and JVM internals. Contributions a

Amy 20 Dec 21, 2022
A simple interpreter language written in Rust.

Glang Backstory Hello and welcome to the Glang git repository. Game Slang or in short Glang is a super simple interpreted language written in Rust wit

null 6 Nov 12, 2022
A lightweight sandbox sim written in Rust.

Rusty Sandbox A lightweight sandbox sim written in Rust. Play via Browser (WASM) | Compile by yourself This is a quick hobby project written to practi

JSKitty 25 Oct 23, 2022
⚡ Fast Web Security Scanner written in Rust based on Lua Scripts 🌖 🦀

⚡ Fast Web Security Scanner written in Rust based on Lua Scripts ?? ??

Rusty Sec 14 Nov 28, 2022
Lua bytecode parser written in Rust using nom, part of metaworm's lua decompiler

luac-parser (中文) lua字节码解析器, 目前支持 lua51, lua53, lua54 这是目前效果最好的lua反编译器 metaworm's luadec 的一部分 可以基于此代码定制你所需的lua字节码解析器,编译成WASM,让metaworm's luadec加载使用,来反编

metaworm 4 Mar 16, 2023