Giter Club home page Giter Club logo

helix's Introduction

Travis Build Status AppVeyor Build Status

Helix

⚠️ Deprecated ⚠️

Sadly, we have made the decision to deprecate this project. While we had hoped to bootstrap the project to a point where it could flourish as a community project, unfortunately we ran into a number of roadblocks along the way, along with the need for significant architectural overhaul. While these issues are solvable on a technical level, doing so correctly requires more resources than we have been able to provide and progress has stalled.

One of our goals was also to integrate our own Skylight agent with Helix, aligning the company's priorities with the project. While the Skylight agent is still written in Rust with a thin layer of C bindings (which is the part Helix would replace), we were not able to get the project to the point where we felt comfortable running it on our customer's servers. We did not identify any specific blockers that would prevent us from doing this, but ultimate, we did not have the necessary time and resources to realize this.

Since we are a small team, it is unlikely that we will be able to provide the necessary investment in the foreseeable future to achieve our ambitions for the project. At this point, we believe it is in everyone's best interest to formally deprecate the project, accurately reflecting its effective state. Meanwhile, others in the Ruby and Rust communities have continued to explore in the adjacent research areas. Some of them have made great progress and brought new ideas and innovations to the table. We look forward to seeing these new ideas come to fruition and fill the void we are leaving.

Helix allows you to write Ruby classes in Rust without having to write the glue code yourself.

ruby! {
    class Console {
        def log(string: String) {
            println!("LOG: {}", string);
        }
    }
}
$ rake build
$ bundle exec irb
>> require "console"
>> Console.log("I'm in your Rust")
LOG: I'm in your Rust
 => nil

Why Helix?

Read the Introducing Helix blog post for a quick introduction to the project!

Getting Started

https://usehelix.com/getting_started

Demos

https://usehelix.com/demos

Roadmap

https://usehelix.com/roadmap

Compatibility

Helix has been tested with the following, though other combinations may also work.

  • cargo 0.18.0 (fe7b0cdcf 2017-04-24)
  • rustc 1.17.0 (56124baa9 2017-04-24)
  • ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16]
  • Bundler version 1.14.6

Contributing

If you'd like to experiment with Helix, you can start with some of the examples in this repository.

Clone and download the Helix repository:

$ git clone https://github.com/tildeio/helix
$ cd helix

Navigate to the console example folder and bundle your Gemfile:

$ cd examples/console
$ bundle install

Run rake irb to build and start irb:

$ bundle exec rake irb

Try running some of the methods defined in examples/console/src/lib.rs:

> c = Console.new
Console { helix: VALUE(0x7fdacc19a6a0) }
 =>
> c.hello
hello
 => nil
> c.loglog('hello', 'world')
hello world
 => nil

helix's People

Contributors

aergonaut avatar alyssais avatar chancancode avatar dsh0416 avatar frewsxcv avatar hone avatar kivikakk avatar konstin avatar lautis avatar mhelmetag avatar neb avatar paul avatar ryman avatar sbeckeriv avatar sgrif avatar steveklabnik avatar wagenet avatar wycats avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

helix's Issues

License?

Hi, I just learned about Helix, but I couldn't find any license information in this repository.
Is this available under some kind of free software license?

Maybe I'm just not looking to the right places :(

Thanks.

Documentation example doesn't compile (in several different ways)

I'm trying to compile this example from the documentation:

#[use_macros]
extern crate helix;

ruby! {
    class Line {
        struct {
            p1: Point,
            p2: Point
        }

        def initialize(helix, p1: Point, p2: Point) {
            Line { helix, p1, p2 }
        }

        def distance(&self) {
            let (dx, dy) = (self.p1.x - self.p2.x, self.p1.y - self.p2.y);
            dx.hypot(dy)
        }
    }

    class Point {
        struct {
            x: f64,
            y: f64
        }

        def initialize(helix, x: f64, y: f64) {
            Point { helix, x, y }
        }

        join(&self, second: &Point) -> Line {
            
            Line {
                p1: Point { x: self.x, y: self.y },
                p2: Point { x: second.x, y: second.y }
            }
        }
    }
}

I get this error:

error: cannot find macro `ruby!` in this scope
 --> src/lib.rs:4:1
  |
4 | ruby! {
  | ^^^^

error: aborting due to previous error

I'm new to Rust, so working out exactly what's going on here is difficult for me, but I worked out that I should probably replace #[use_macros] with #[macro_use] since that's what the Rails generator does. Making that change, I instead get this error:

error: no rules expected the token `parse_methods`
  --> src/lib.rs:4:1
   |
4  | / ruby! {
5  | |     class Line {
6  | |         struct {
7  | |             p1: Point,
...  |
38 | |     }
39 | | }
   | |_^
   |
   = note: this error originates in a macro outside of the current crate

Now, if I comment out all the method definitions apart from Point#initialize, and the Line struct, it compiles, but when I try to add any other methods — those that use other Helix classes, I get an error like this:

error[E0277]: the trait bound `helix::<unnamed>::VALUE: helix::UncheckedValue<Point>` is not satisfied
  --> src/lib.rs:5:1
   |
5  | / ruby! {
6  | |
7  | |     class Line {
8  | |         struct {
...  |
41 | |
42 | | }
   | |_^ the trait `helix::UncheckedValue<Point>` is not implemented for `helix::<unnamed>::VALUE`
   |
   = help: the following implementations were found:
             <helix::<unnamed>::VALUE as helix::UncheckedValue<&'a [usize]>>
             <helix::<unnamed>::VALUE as helix::UncheckedValue<std::string::String>>
             <helix::<unnamed>::VALUE as helix::UncheckedValue<bool>>
             <helix::<unnamed>::VALUE as helix::UncheckedValue<u64>>
           and 9 others
   = note: required by `helix::UncheckedValue::to_checked`
   = note: this error originates in a macro outside of the current crate

error[E0277]: the trait bound `helix::CheckedValue<Point>: helix::ToRust<_>` is not satisfied
  --> src/lib.rs:5:1
   |
5  | / ruby! {
6  | |
7  | |     class Line {
8  | |         struct {
...  |
41 | |
42 | | }
   | |_^ the trait `helix::ToRust<_>` is not implemented for `helix::CheckedValue<Point>`
   |
   = help: the following implementations were found:
             <helix::CheckedValue<&'a [usize]> as helix::ToRust<&'a [usize]>>
             <helix::CheckedValue<std::string::String> as helix::ToRust<std::string::String>>
             <helix::CheckedValue<bool> as helix::ToRust<bool>>
             <helix::CheckedValue<u64> as helix::ToRust<u64>>
           and 9 others
   = note: required by `helix::ToRust::to_rust`
   = note: this error originates in a macro outside of the current crate

error[E0277]: the trait bound `helix::CheckedValue<Point>: helix::ToRust<_>` is not satisfied
  --> src/lib.rs:5:1
   |
5  | / ruby! {
6  | |
7  | |     class Line {
8  | |         struct {
...  |
41 | |
42 | | }
   | |_^ the trait `helix::ToRust<_>` is not implemented for `helix::CheckedValue<Point>`
   |
   = help: the following implementations were found:
             <helix::CheckedValue<&'a [usize]> as helix::ToRust<&'a [usize]>>
             <helix::CheckedValue<std::string::String> as helix::ToRust<std::string::String>>
             <helix::CheckedValue<bool> as helix::ToRust<bool>>
             <helix::CheckedValue<u64> as helix::ToRust<u64>>
           and 9 others
   = note: required by `helix::ToRust::to_rust`
   = note: this error originates in a macro outside of the current crate

error: aborting due to 3 previous errors

My guess is this is (partially?) just out-of-date documentation. I'm really excited about this project, and am looking forward to seeing how it develops. :)

Can't use `cargo test`

When using Helix, I do most of my testing from Ruby. Sometimes, however, I want to test behaviour that I don't want to expose to Ruby, but still involves Helix objects. To do this, I expected to be able to use cargo test, something like this:

#[macro_use]
extern crate helix;

ruby! {
    class HelixTest {
        struct {
            message: String,
        }

        def initialize(helix, message: String) {
            HelixTest { helix, message }
        }
    }
}

#[test]
fn hello() {
    HelixTest::new("hello world".to_string());
}

cargo test manages to compile this, but it won't run:


cargo test --verbose
       Fresh cstr-macro v0.1.0
       Fresh libc v0.2.22
       Fresh cslice v0.3.0
       Fresh libcruby-sys v0.6.0
       Fresh helix v0.6.0
   Compiling helix_test v0.1.0 (file:///Users/alyssa/desktop/helix_test)
     Running `rustc --crate-name helix_test src/lib.rs --emit=dep-info,link -C debuginfo=2 --test -C metadata=0feaea9da66f2f4d -C extra-filename=-0feaea9da66f2f4d --out-dir /Users/alyssa/desktop/helix_test/target/debug/deps -L dependency=/Users/alyssa/desktop/helix_test/target/debug/deps --extern helix=/Users/alyssa/desktop/helix_test/target/debug/deps/libhelix-a44d38b1cc8a9eb4.rlib`
error: linking with `cc` failed: exit code: 1
  |
  = note: "cc" "-m64" "-L" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib" "/Users/alyssa/desktop/helix_test/target/debug/deps/helix_test-0feaea9da66f2f4d.0.o" "-o" "/Users/alyssa/desktop/helix_test/target/debug/deps/helix_test-0feaea9da66f2f4d" "-Wl,-dead_strip" "-nodefaultlibs" "-L" "/Users/alyssa/desktop/helix_test/target/debug/deps" "-L" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib" "/Users/alyssa/desktop/helix_test/target/debug/deps/libhelix-a44d38b1cc8a9eb4.rlib" "/Users/alyssa/desktop/helix_test/target/debug/deps/liblibcruby_sys-51b4faec2edea8c0.rlib" "/Users/alyssa/desktop/helix_test/target/debug/deps/libcslice-e35cab80719fd98e.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libtest-85fd397c1b504b69.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libterm-95ba05952512bff3.rlib" "/Users/alyssa/desktop/helix_test/target/debug/deps/liblibc-026076ef8cc90032.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libgetopts-ffed193a1399c490.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libstd-d19edcdb8b3582f0.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libpanic_unwind-35809200ab841b7b.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libunwind-dd5cb334048ac204.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/librand-eb0e42c8ae609eea.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libcollections-6fcbe3ecfbfa6629.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/liballoc-7f2c52501770c1c7.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/liballoc_jemalloc-ea49ffd3fee5264c.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/liblibc-4ac31620c28c3400.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libstd_unicode-7e35037032e227eb.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libcore-10c94a1f2bd23f41.rlib" "/Users/alyssa/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/x86_64-apple-darwin/lib/libcompiler_builtins-1afcf087346e8edb.rlib" "-l" "System" "-l" "pthread" "-l" "c" "-l" "m"
  = note: Undefined symbols for architecture x86_64:
            "_HELIX_Qnil", referenced from:
                helix_test::Init_native::_$LT$impl$u20$helix_test..HelixTest$GT$::new::h199cb45eb4b33d59 in helix_test-0feaea9da66f2f4d.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

error: Could not compile helix_test.

Caused by:
process didn't exit successfully: rustc --crate-name helix_test src/lib.rs --emit=dep-info,link -C debuginfo=2 --test -C metadata=0feaea9da66f2f4d -C extra-filename=-0feaea9da66f2f4d --out-dir /Users/alyssa/desktop/helix_test/target/debug/deps -L dependency=/Users/alyssa/desktop/helix_test/target/debug/deps --extern helix=/Users/alyssa/desktop/helix_test/target/debug/deps/libhelix-a44d38b1cc8a9eb4.rlib (exit code: 101)

Unable to sucessfully build examples (calculator, turbo_blank)

I am on Ubuntu 16.04
using Ruby 2.4.1p111 and Rust 1.16.0
and bundler 1.14.6.

I followed the README.md on Running the examples, then cded into the calculator directory, and ran:

bundle install
bundle exec rake

And wound up with macro failures:


$ bundle exec rake build

Building helix runtime

bundle exec rake compile:native

Runtime built

{"HELIX_LIB_DIR"=>"/development/rust_proj/helix/ruby/windows_build"}
cargo rustc --release -- -C link-args=-Wl,-undefined,dynamic_lookup
Compiling helix_runtime v0.5.0-alpha-3 (file:///development/rust_proj/helix)
error: expected identifier, found keyword pub
--> /development/rust_proj/helix/src/macros/parser.rs:123:19
|
123 | pub: $pub:tt,
| ^^^

error: expected identifier, found keyword pub
--> /development/rust_proj/helix/src/macros/parser.rs:132:23
|
132 | pub: $pub,
| ^^^

error: expected identifier, found keyword pub
--> /development/rust_proj/helix/src/macros/parser.rs:143:19
|
143 | pub: $pub:tt,
| ^^^
...
error: aborting due to 70 previous errors

error: Could not compile helix_runtime.

To learn more, run the command again with --verbose.
rake aborted!
native source doesn't exist, run cargo_build first; source=/development/rust_proj/helix/target/release/libturbo_blank.so
/development/rust_proj/helix/ruby/lib/helix_runtime/project.rb:109:in copy_native' /development/rust_proj/helix/ruby/lib/helix_runtime/project.rb:116:in build'
/development/rust_proj/helix/ruby/lib/helix_runtime/build_task.rb:65:in block in define' /home/alveric/.rbenv/versions/2.4.1/bin/bundle:22:in load'
/home/alveric/.rbenv/versions/2.4.1/bin/bundle:22:in `

'
Tasks: TOP => build
(See full trace by running task with --trace)


I am new to Rust, but have been doing Ruby development (and a number of other languages) for years. It appears I've missed a critical step for the macro installation, but I missed this step in the docs.

I am looking to incorporate Helix support in Jeweler in order to promote doing Ruby gems in Rust. Any help here would be greatly appreciated. Also, a full step-by.step example of creating a Ruby gem with Rust would be cool, but I think I can get there once I can get the examples working!!!!

Thanks.

Try to avoid copying when using strings

I'm leaving this here more as a note to myself and also to maybe get some early feedback.

Currently helix copies a ruby strings contents in order to use it in rust. I want to change that.

There is a pair of functions, namely rb_gc_register_address(VALUE *addr) and rb_gc_unregister_address(VALUE *addr), which can be used to prevent the GC from freeing some memory and allow it to be freed again later.

Maybe it could be used to improve perf considerably. I will open a PR as soon as I've something worth reviewing. Also this project is awesome.

Doesn't build with 1.8.0

$ rustc --version
rustc 1.8.0 (db2939409 2016-04-11)

errors:

src/macros.rs:99:127: 99:138 error: `$ret:ty` is followed by `$body:block`, which is not allowed for `ty` fragments
src/macros.rs:99     { $cls:ident; ($($mimpl:tt)*) ; ($($mdef:tt)*) ; def $name:ident( $self_arg:tt , $($arg:ident : $argty:ty),* ) -> $ret:ty $body:block $($rest:tt)* } => {
                                                                                                                                               ^~~~~~~~~~~

Any ideas?

Is there a way to implement a method on any object?

Here is an example in RuRu:
https://github.com/NullVoxPopuli/case_transform-rust-extensions/blob/30c7394562c07d0034b66e297a65dcf3fd718403/ext/case_transform/src/lib.rs#L80

Basically, it just allows passing of any type to a method, and you try converting to something until you get what you want.

Maybe there is a way to do this with Generics?

I know the implementation of each method I want per type -- just not sure how to go about it (String, Symbol, Array, and Hash)

Helix always crash ("[BUG] Segmentation fault") with dynamic libraries build by Windows rustc installed with x86_64-pc-windows-gnu (gcc compiler)

When install Rust using rustup-init.exe, with x86_64-pc-windows-msvc, helix can run. However, with x86_64-pc-windows-gnu (choose custom install) it always crash (Tested with msvc compiler not installed in the OS).

To reproduce, try the flipper application from https://usehelix.com/getting_started. ( Or attached here: flipper.zip )
Running "rake irb" under folder "D:/dev/flipper/crates/text_transform" got this crash:

$ bundle exec rake irb
   Compiling cstr-macro v0.1.0
   Compiling cslice v0.3.0
   Compiling libcruby-sys v0.6.4
   Compiling libc v0.2.31
   Compiling helix v0.6.4
   Compiling text_transform v0.1.0 (file:///D:/dev/flipper/crates/text_transform)
    Finished release [optimized] target(s) in 3.67 secs
D:/dev/flipper/crates/text_transform/lib/text_transform/native.so: [BUG] Segmentation fault
ruby 2.4.2p198 (2017-09-14 revision 59899) [x64-mingw32]

-- Control frame information -----------------------------------------------
c:0011 p:-7918332 s:0047 e:000046 TOP    [FINISH]
c:0010 p:---- s:0044 e:000043 CFUNC  :require
c:0009 p:0019 s:0039 e:000038 TOP    D:/dev/flipper/crates/text_transform/lib/text_transform.rb:4 [FINISH]
c:0008 p:---- s:0036 e:000035 CFUNC  :require
c:0007 p:0016 s:0031 e:000030 BLOCK  C:/Ruby24-x64/lib/ruby/2.4.0/irb/init.rb:281 [FINISH]
c:0006 p:---- s:0027 e:000026 CFUNC  :each
c:0005 p:0016 s:0023 e:000022 METHOD C:/Ruby24-x64/lib/ruby/2.4.0/irb/init.rb:279
c:0004 p:0068 s:0017 e:000016 METHOD C:/Ruby24-x64/lib/ruby/2.4.0/irb/init.rb:21
c:0003 p:0056 s:0012 e:000011 METHOD C:/Ruby24-x64/lib/ruby/2.4.0/irb.rb:378
c:0002 p:0030 s:0006 e:000005 EVAL   C:/Ruby24-x64/bin/irb.cmd:19 [FINISH]
c:0001 p:0000 s:0003 E:000b40 (none) [FINISH]

-- Ruby level backtrace information ----------------------------------------
C:/Ruby24-x64/bin/irb.cmd:19:in `<main>'
C:/Ruby24-x64/lib/ruby/2.4.0/irb.rb:378:in `start'
C:/Ruby24-x64/lib/ruby/2.4.0/irb/init.rb:21:in `setup'
C:/Ruby24-x64/lib/ruby/2.4.0/irb/init.rb:279:in `load_modules'
C:/Ruby24-x64/lib/ruby/2.4.0/irb/init.rb:279:in `each'
C:/Ruby24-x64/lib/ruby/2.4.0/irb/init.rb:281:in `block in load_modules'
C:/Ruby24-x64/lib/ruby/2.4.0/irb/init.rb:281:in `require'
D:/dev/flipper/crates/text_transform/lib/text_transform.rb:4:in `<top (required)>'
D:/dev/flipper/crates/text_transform/lib/text_transform.rb:4:in `require'

-- C level backtrace information -------------------------------------------
C:\WINDOWS\SYSTEM32\ntdll.dll(ZwWaitForSingleObject+0x14) [0x00007ffad3735424]
C:\WINDOWS\System32\KERNELBASE.dll(WaitForSingleObjectEx+0x9f) [0x00007ffad081988f]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_print_backtrace+0x36) [0x0000000067b029e6]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_bugreport+0x65) [0x0000000067b02a55]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_bug_context+0x69) [0x00000000679dce29]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_check_safe_obj+0x6ac) [0x0000000067a988ec]
 [0x0000000000402467]
C:\WINDOWS\SYSTEM32\ntdll.dll(_C_specific_handler+0x96) [0x00007ffad3726466]
C:\WINDOWS\SYSTEM32\ntdll.dll(_chkstk+0x11d) [0x00007ffad373a07d]
C:\WINDOWS\SYSTEM32\ntdll.dll(RtlLookupFunctionEntry+0xab8) [0x00007ffad36a9c58]
C:\WINDOWS\SYSTEM32\ntdll.dll(KiUserExceptionDispatcher+0x2e) [0x00007ffad37390fe]
C:\WINDOWS\System32\msvcrt.dll(strlen+0x10) [0x00007ffad288c170]
D:\dev\flipper\crates\text_transform\lib\text_transform\native.so(Init_native+0xef9d) [0x000000006ea121fd]
D:\dev\flipper\crates\text_transform\lib\text_transform\native.so(Init_native+0x1bf3) [0x000000006ea04e53]
D:\dev\flipper\crates\text_transform\lib\text_transform\native.so(Init_native+0xb) [0x000000006ea0326b]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(dln_load+0x1b9) [0x00000000679815e9]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_call_cfunc+0xaf) [0x0000000067afe97f]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_require_internal+0x3a4) [0x0000000067a19b14]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_require_safe+0xd) [0x0000000067a19fcd]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_error_arity+0x10c) [0x0000000067ae8cfc]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_invoke_proc+0x9e8) [0x0000000067af6d88]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_localjump_error+0x4b1) [0x0000000067aee2a1]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_localjump_error+0x66c3) [0x0000000067af44b3]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_iseqw_local_variables+0xb95) [0x0000000067a18465]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_require_internal+0x795) [0x0000000067a19f05]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_require_safe+0xd) [0x0000000067a19fcd]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_error_arity+0x10c) [0x0000000067ae8cfc]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_invoke_proc+0x9e8) [0x0000000067af6d88]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_localjump_error+0x4b1) [0x0000000067aee2a1]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_localjump_error+0x66c3) [0x0000000067af44b3]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_yield+0x36c) [0x0000000067afdf0c]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_ary_each+0x3d) [0x0000000067983a8d]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_error_arity+0x10c) [0x0000000067ae8cfc]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_invoke_proc+0x9e8) [0x0000000067af6d88]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_localjump_error+0x63b) [0x0000000067aee42b]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_vm_localjump_error+0x66c3) [0x0000000067af44b3]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(rb_call_end_proc+0x17e) [0x00000000679dfdde]
C:\Ruby24-x64\bin\x64-msvcrt-ruby240.dll(ruby_run_node+0x59) [0x00000000679e2a09]
 [0x0000000000402d57]
 [0x00000000004013f7]
 [0x000000000040152b]
C:\WINDOWS\System32\KERNEL32.DLL(BaseThreadInitThunk+0x14) [0x00007ffad2972774]

-- Other runtime information -----------------------------------------------

* Loaded script: irb.cmd

* Loaded features:

    0 enumerator.so
    1 thread.rb
    2 rational.so
    3 complex.so
    4 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/enc/encdb.so
    5 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/enc/trans/transdb.so
    6 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/enc/big5.so
    7 C:/Ruby24-x64/lib/ruby/2.4.0/unicode_normalize.rb
    8 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/rbconfig.rb
    9 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/compatibility.rb
   10 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/defaults.rb
   11 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/deprecate.rb
   12 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/errors.rb
   13 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/version.rb
   14 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/requirement.rb
   15 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/platform.rb
   16 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/basic_specification.rb
   17 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/stub_specification.rb
   18 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/util/list.rb
   19 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/stringio.so
   20 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/specification.rb
   21 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/exceptions.rb
   22 C:/Ruby24-x64/lib/ruby/site_ruby/2.4.0/ruby_installer/runtime/singleton.rb
   23 C:/Ruby24-x64/lib/ruby/site_ruby/2.4.0/ruby_installer/runtime.rb
   24 C:/Ruby24-x64/lib/ruby/site_ruby/2.4.0/ruby_installer/runtime/msys2_installation.rb
   25 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/fiddle.so
   26 C:/Ruby24-x64/lib/ruby/2.4.0/fiddle/function.rb
   27 C:/Ruby24-x64/lib/ruby/2.4.0/fiddle/closure.rb
   28 C:/Ruby24-x64/lib/ruby/2.4.0/fiddle.rb
   29 C:/Ruby24-x64/lib/ruby/site_ruby/2.4.0/ruby_installer/runtime/dll_directory.rb
   30 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/enc/utf_16le.so
   31 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/enc/trans/utf_16_32.so
   32 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/defaults/operating_system.rb
   33 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/dependency.rb
   34 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_gem.rb
   35 C:/Ruby24-x64/lib/ruby/2.4.0/monitor.rb
   36 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb
   37 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems.rb
   38 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/path_support.rb
   39 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/version.rb
   40 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/core_ext/name_error.rb
   41 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/levenshtein.rb
   42 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/jaro_winkler.rb
   43 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checker.rb
   44 C:/Ruby24-x64/lib/ruby/2.4.0/delegate.rb
   45 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
   46 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
   47 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
   48 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
   49 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/spell_checkers/null_checker.rb
   50 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean/formatter.rb
   51 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/did_you_mean-1.1.0/lib/did_you_mean.rb
   52 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/pathname.so
   53 C:/Ruby24-x64/lib/ruby/2.4.0/pathname.rb
   54 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/constants.rb
   55 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/util.rb
   56 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/io/console.so
   57 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/user_interaction.rb
   58 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/etc.so
   59 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/config_file.rb
   60 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/rubygems_integration.rb
   61 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/current_ruby.rb
   62 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/shared_helpers.rb
   63 C:/Ruby24-x64/lib/ruby/2.4.0/fileutils.rb
   64 C:/Ruby24-x64/lib/ruby/2.4.0/tmpdir.rb
   65 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/errors.rb
   66 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/environment_preserver.rb
   67 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/plugin/api.rb
   68 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/plugin.rb
   69 C:/Ruby24-x64/lib/ruby/2.4.0/uri/rfc2396_parser.rb
   70 C:/Ruby24-x64/lib/ruby/2.4.0/uri/rfc3986_parser.rb
   71 C:/Ruby24-x64/lib/ruby/2.4.0/uri/common.rb
   72 C:/Ruby24-x64/lib/ruby/2.4.0/uri/generic.rb
   73 C:/Ruby24-x64/lib/ruby/2.4.0/uri/ftp.rb
   74 C:/Ruby24-x64/lib/ruby/2.4.0/uri/http.rb
   75 C:/Ruby24-x64/lib/ruby/2.4.0/uri/https.rb
   76 C:/Ruby24-x64/lib/ruby/2.4.0/uri/ldap.rb
   77 C:/Ruby24-x64/lib/ruby/2.4.0/uri/ldaps.rb
   78 C:/Ruby24-x64/lib/ruby/2.4.0/uri/mailto.rb
   79 C:/Ruby24-x64/lib/ruby/2.4.0/uri.rb
   80 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/digest.so
   81 C:/Ruby24-x64/lib/ruby/2.4.0/digest.rb
   82 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/source/git.rb
   83 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/source/installed.rb
   84 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/source/specific_file.rb
   85 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/source/local.rb
   86 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/source/lock.rb
   87 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/source/vendor.rb
   88 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/source.rb
   89 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/gem_helpers.rb
   90 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/match_platform.rb
   91 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/rubygems_ext.rb
   92 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/version.rb
   93 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler.rb
   94 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/settings.rb
   95 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/ext/builder.rb
   96 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/source.rb
   97 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/digest/sha1.so
   98 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/source/path.rb
   99 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/source/git.rb
  100 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/source/rubygems.rb
  101 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/lockfile_parser.rb
  102 C:/Ruby24-x64/lib/ruby/2.4.0/set.rb
  103 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/definition.rb
  104 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/dependency.rb
  105 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/ruby_dsl.rb
  106 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/dsl.rb
  107 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/source_list.rb
  108 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/index.rb
  109 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/source/gemspec.rb
  110 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/lazy_specification.rb
  111 C:/Ruby24-x64/lib/ruby/2.4.0/tsort.rb
  112 C:/Ruby24-x64/lib/ruby/2.4.0/forwardable/impl.rb
  113 C:/Ruby24-x64/lib/ruby/2.4.0/forwardable.rb
  114 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/spec_set.rb
  115 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/ui.rb
  116 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/ui/silent.rb
  117 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/ui/rg_proxy.rb
  118 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/text.rb
  119 C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/util/licenses.rb
  120 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/remote_specification.rb
  121 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/gem_version_promoter.rb
  122 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/runtime.rb
  123 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/dep_proxy.rb
  124 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/stub_specification.rb
  125 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/endpoint_specification.rb
  126 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/ruby_version.rb
  127 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/bundler-1.15.4/lib/bundler/setup.rb
  128 C:/Ruby24-x64/lib/ruby/2.4.0/e2mmap.rb
  129 C:/Ruby24-x64/lib/ruby/2.4.0/irb/init.rb
  130 C:/Ruby24-x64/lib/ruby/2.4.0/irb/workspace.rb
  131 C:/Ruby24-x64/lib/ruby/2.4.0/irb/inspector.rb
  132 C:/Ruby24-x64/lib/ruby/2.4.0/irb/output-method.rb
  133 C:/Ruby24-x64/lib/ruby/2.4.0/irb/context.rb
  134 C:/Ruby24-x64/lib/ruby/2.4.0/irb/extend-command.rb
  135 C:/Ruby24-x64/lib/ruby/2.4.0/irb/notifier.rb
  136 C:/Ruby24-x64/lib/ruby/2.4.0/irb/slex.rb
  137 C:/Ruby24-x64/lib/ruby/2.4.0/irb/ruby-token.rb
  138 C:/Ruby24-x64/lib/ruby/2.4.0/irb/ruby-lex.rb
  139 C:/Ruby24-x64/lib/ruby/2.4.0/irb/src_encoding.rb
  140 C:/Ruby24-x64/lib/ruby/2.4.0/irb/magic-file.rb
  141 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/enc/euc_jp.so
  142 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/enc/windows_31j.so
  143 C:/Ruby24-x64/lib/ruby/site_ruby/rbreadline/version.rb
  144 C:/Ruby24-x64/lib/ruby/site_ruby/rbreadline.rb
  145 C:/Ruby24-x64/lib/ruby/site_ruby/readline.rb
  146 C:/Ruby24-x64/lib/ruby/2.4.0/irb/input-method.rb
  147 C:/Ruby24-x64/lib/ruby/2.4.0/irb/locale.rb
  148 C:/Ruby24-x64/lib/ruby/2.4.0/irb.rb
  149 C:/Ruby24-x64/lib/ruby/site_ruby/2.4.0/irbrc_predefiner.rb
  150 C:/Ruby24-x64/lib/ruby/2.4.0/irb/ext/save-history.rb
  151 C:/Ruby24-x64/lib/ruby/2.4.0/irb/completion.rb
  152 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/helix_runtime-0.6.4/lib/helix_runtime/version.rb
  153 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/helix_runtime-0.6.4/lib/helix_runtime/platform.rb
  154 C:/Ruby24-x64/lib/ruby/2.4.0/x64-mingw32/date_core.so
  155 C:/Ruby24-x64/lib/ruby/2.4.0/date.rb
  156 C:/Ruby24-x64/lib/ruby/2.4.0/time.rb
  157 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/slice.rb
  158 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/cause.rb
  159 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/source/line_cache.rb
  160 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/source.rb
  161 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/can_flatten.rb
  162 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/context.rb
  163 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/dsl.rb
  164 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/base.rb
  165 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/named.rb
  166 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/lookahead.rb
  167 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/alternative.rb
  168 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/sequence.rb
  169 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/repetition.rb
  170 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/re.rb
  171 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/str.rb
  172 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/entity.rb
  173 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/capture.rb
  174 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/dynamic.rb
  175 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms/scope.rb
  176 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/atoms.rb
  177 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/pattern.rb
  178 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/pattern/binding.rb
  179 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/transform.rb
  180 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/parser.rb
  181 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/error_reporter/tree.rb
  182 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/error_reporter/deepest.rb
  183 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/error_reporter.rb
  184 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet/scope.rb
  185 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/parslet-1.5.0/lib/parslet.rb
  186 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/toml-0.1.2/lib/toml/version.rb
  187 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/toml-0.1.2/lib/toml/key.rb
  188 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/toml-0.1.2/lib/toml/table.rb
  189 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/toml-0.1.2/lib/toml/parslet.rb
  190 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/toml-0.1.2/lib/toml/transformer.rb
  191 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/toml-0.1.2/lib/toml/parser.rb
  192 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/toml-0.1.2/lib/toml/generator.rb
  193 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/toml-0.1.2/lib/toml.rb
  194 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/helix_runtime-0.6.4/lib/helix_runtime/project.rb
  195 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/helix_runtime-0.6.4/lib/helix_runtime/parent_project.rb
  196 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/helix_runtime-0.6.4/lib/helix_runtime/native.so
  197 C:/Ruby24-x64/lib/ruby/gems/2.4.0/gems/helix_runtime-0.6.4/lib/helix_runtime.rb

[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html


This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.

More info

  • 64-bit Windows 10
  • Tested mainly using MSYS2 (64-bit) with mingw64 gcc compiler for rustc
  • Ruby 2.4.1 or 2.4.2 (64-bit version)
  • Rails 5.1.x
  • Run "rake irb" on Window's "Command Prompt" also crash

Auto-release can hit a race condition when publishing the helix crate

The helix crate depends on the libcruby-sys crate being published. crates.io apparently has a slight delay in the publish status showing up so trying to publish helix right after libcruby-sys can cause an error about libcruby-sys not being the correct version on crates.io. This might be as simple as adding a retry with sleep.

Improve Windows Scripting

@wagenet did a great job with #29; it's great for now.

Before shipping 1.0, we should review the PR again to see if there are any ways to simplify the way it works. @wagenet: would you mind jotting down any ideas you have for future improvements here?

"libcsys-ruby version (0.6.1) doesn't match helix_runtime version (0.6.0)"

I get the following error when attempting to require a gem that was built with Helix on Linux (specifically Ubuntu trusty, 14.04.5):

irb(main):001:0> require 'humanname'
thread '<unnamed>' panicked at 'libcsys-ruby version (0.6.1) doesn't match helix_runtime version (0.6.0).', /home/travis/.cargo/registry/src/github.com-1ecc6299db9ec823/libcruby-sys-0.6.1/src/lib.rs:15

The gem was built on Travis per this .travis.yml and can be downloaded from GitHub.

(I tried checking in a Cargo.lock which includes both at 0.6.1 but it didn't help.)

Cross Compiling Gem

Hi, Is there a way to cross precompile the gem for linux and OSX? So i could only provided the compiled gem instead of rebuilding it on every server or dev machine ...

Thanks

Unable to use the return type Vec<[f64; 2]>

I'm looking to interop with a rust library for decoding polylines. It however returns a type of Vec<[f64; 2]> which seems to be an unsupported conversion.

#[macro_use]
extern crate helix;
extern crate polyline;

ruby! {
    class Polyline {
        def decode_polyline(text: String) -> Vec<[f64; 2]> {
            polyline::decode_polyline(text, 5).unwrap();
        }
    }
}

Which during the build step gives me this

error[E0277]: the trait bound `std::vec::Vec<[f64; 2]>: helix::ToRuby` is not satisfied
  --> src/lib.rs:5:1
   |
5  |   ruby! {
   |  _^ starting here...
6  | |     class Polyline {
7  | |         def decode_polyline(text: String) -> Vec<[f64; 2]> {
8  | |             polyline::decode_polyline(text, 5).unwrap();
9  | |         }
10 | |     }
11 | | }
   | |_^ ...ending here: the trait `helix::ToRuby` is not implemented for `std::vec::Vec<[f64; 2]>`
   |
   = note: required by `helix::ToRuby::to_ruby`
   = note: this error originates in a macro outside of the current crate

According to the documentation the function definition seems correct. However, is there a way to define new coercions or possibly another way to approach this?

Though #46 might be a blocker here as well.

Segmentation fault when re-building

It builds without error on first rake build run, but then I get segmentation fault on the following rake build runs. Error dissapears when I run rake clobber before each run to clean stuff. Even when segmentation fault error shows, it looks like it's doing a good build. It seems to be consistently happening across all Ruby versions for me and is caused by the require of native.so.

Output for ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]:

$ rake build
Building hello_world
{}
cargo rustc --release -- -C link-args=-Wl,-undefined,dynamic_lookup
    Finished release [optimized] target(s) in 0.0 secs
[BUG] Segmentation fault at 0x00000000003780
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

-- Machine register context ------------------------------------------------
 RIP: 0x0000000000003780 RBP: 0x00007ffda040a440 RSP: 0x00007ffda040a228
 RAX: 0x00007fec25490e18 RBX: 0x00007fec2fb76180 RCX: 0x0000000000000000
 RDX: 0x0000000000000000 RDI: 0x00007fec25693040 RSI: 0x0000000000000000
  R8: 0x0000000000000000  R9: 0x00007fec2bdabe88 R10: 0x00007fec25693038
 R11: 0x00007fec2ba234a0 R12: 0x00007fec2548f848 R13: 0x000000000000002c
 R14: 0x0000000000000000 R15: 0x00007ffda040a230 EFL: 0x0000000000010202

-- C level backtrace information -------------------------------------------
Segmentation fault (core dumped)

Output for ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]:

$ rake build
Building hello_world
{}
cargo rustc --release -- -C link-args=-Wl,-undefined,dynamic_lookup
    Finished release [optimized] target(s) in 0.0 secs
[BUG] Segmentation fault at 0x00000000003780
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]

-- Machine register context ------------------------------------------------
 RIP: 0x0000000000003780 RBP: 0x00007ffca715fd80 RSP: 0x00007ffca715fb68
 RAX: 0x00007fc61006de18 RBX: 0x00007fc61b3d0200 RCX: 0x0000000000000000
 RDX: 0x0000000000000000 RDI: 0x00007fc61049a4e8 RSI: 0x0000000000000000
  R8: 0x0000000000000000  R9: 0x00007fc6165c2e88 R10: 0x00007fc61049a1c0
 R11: 0x00007fc61623a4a0 R12: 0x00007fc61006c848 R13: 0x000000000000002c
 R14: 0x0000000000000000 R15: 0x00007ffca715fb70 EFL: 0x0000000000010202

-- C level backtrace information -------------------------------------------
Segmentation fault (core dumped)

Output for ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]:

$ rake build
Building text_transform
{}
cargo rustc --release -- -C link-args=-Wl,-undefined,dynamic_lookup
    Finished release [optimized] target(s) in 0.0 secs
[BUG] Segmentation fault at 0x00000000003720
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux]

-- C level backtrace information -------------------------------------------
Segmentation fault (core dumped)

example : cannot load such file -- helix_runtime/native

rust nightly 1.10.0

$ cd apps/helix/example/console
 cargo build
   Compiling libc v0.2.9
   Compiling libcruby-sys v0.1.0 (file:///vagrant_data/apps/helix/crates/libcruby-sys)
   Compiling cslice v0.1.0 (https://github.com/rustbridge/neon#f28e32c7)
   Compiling helix v0.1.0 (file:///vagrant_data/apps/helix)
   Compiling console v0.1.0 (file:///vagrant_data/apps/helix/examples/console)
note: link against the following native artifacts when linking against this static library
note: the order and any duplication can be significant on some platforms, and so may need to be preserved
note: library: dl
note: library: pthread
note: library: gcc_s
note: library: c
note: library: m
note: library: rt
note: library: util
helix/examples/console$   bundle exec rake irb
cargo build --release
gcc -Wl,-force_load,target/release/libconsole.a --shared -Wl,-undefined,dynamic_lookup -o lib/console/native.bundle
/vagrant_data/apps/helix/ruby/lib/helix_runtime.rb:2:in `require':LoadError: cannot load such file -- helix_runtime/native

Empty lib.rs causes unclear Ruby error

Here's an example:

/Users/peterwagenet/Development/Rust/helix_examples/helix-multi-crate/crates/turbo_blank/lib/turbo_blank.rb:2:in `require': dlsym(0x7fe0bf1a4ad0, Init_native): symbol not found -  /Users/peterwagenet/Development/Rust/helix_examples/helix-multi-crate/crates/turbo_blank/lib/turbo_blank/native.bundle (LoadError)

This is almost certainly because without a declare_types! we don't ever define an Init_native method. We should always make a stub for this.

template for public gems using Helix?

It would be nice if there were instructions on how to get to a point where "gem install $gem_that_uses_helix" will "just work" for at least a large subset of users.

This might take the form of instructions on how to create an extconf.rb that will build the gem on most platforms, but I think ideally it would take the form of instructions on how to create binaries as part of a build process, say with Travis, so that users on mainstream platforms don't have to install a Rust compiler in order to use your gem. It seems like it should be possible to do this for Linux and OS X, at least.

Motivation: I have a public gem which I've converted from FFI to use Helix: https://github.com/djudd/human-name-rb

The code conversion was pretty straightforward and I got a 100+% speed improvement, which was great! But I've since spent more time trying to get at-least-kinda-reproducible binary builds set up using Travis than I did on the original conversion, and it's been a slog.

I would be happy to collaborate on this, if folks find the approach I've taken roughly right and want to help me get it to the point where it could be something recommended in Helix docs.

Deal with the explosion of serialization protocols that work with uninitialized instances

  • Psych.load
  • json_create
  • initialize_copy
  • initialize_clone
  • ...

The problem is that many of these APIs have a fallback for pure Ruby objects that just installs instance variables, which of course won't work in Rust. We would like people who reimplement Ruby classes in Rust to not be hit with a list of protocols to implement that weren't required in the pure-Ruby version.

Ideally, we would find a smaller protocol that people could implement that would work for all of the various serialization protocols. In an ideal world, we could use the fields we have in the macro to generate a good default for you, but TBD.

Error at compiling in nightly 1.12

I'm always getting this error when compiling, i'm using nightly because stable or beta doesn't seems to work either ...

<helix macros>:20:1: 20:55 error: the trait bound `helix::libcruby_sys::VALUE: helix::UncheckedValue<&str>` is not satisfied [E0277]
<helix macros>:20 $ crate :: UncheckedValue :: < $ argty > :: to_checked ( $ arg ) ) ; ) * $ (
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<helix macros>:19:13: 20:67 note: in this expansion of try! (defined in <std macros>)
<helix macros>:50:43: 52:35 note: in this expansion of init! (defined in <helix macros>)
<helix macros>:5:1: 25:47 note: in this expansion of class_definition! (defined in <helix macros>)
<helix macros>:35:1: 37:65 note: in this expansion of class_definition! (defined in <helix macros>)
<helix macros>:5:1: 5:60 note: in this expansion of class_definition! (defined in <helix macros>)
<helix macros>:9:1: 11:40 note: in this expansion of define_class! (defined in <helix macros>)
src/lib.rs:11:1: 17:2 note: in this expansion of declare_types! (defined in <helix macros>)
<helix macros>:20:1: 20:55 help: run `rustc --explain E0277` to see a detailed explanation
<helix macros>:20:1: 20:55 help: the following implementations were found:
<helix macros>:20:1: 20:55 help:   <helix::libcruby_sys::VALUE as helix::UncheckedValue<&'a [usize]>>
<helix macros>:20:1: 20:55 help:   <helix::libcruby_sys::VALUE as helix::UncheckedValue<std::string::String>>
<helix macros>:20:1: 20:55 help:   <helix::libcruby_sys::VALUE as helix::UncheckedValue<bool>>
<helix macros>:20:1: 20:55 note: required by `helix::UncheckedValue::to_checked`
<helix macros>:21:13: 21:41 error: the trait bound `helix::CheckedValue<&str>: helix::ToRust<_>` is not satisfied [E0277]
<helix macros>:21 let $ arg = $ crate :: ToRust :: to_rust ( $ arg ) ; ) * Ok (
                              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
<helix macros>:50:43: 52:35 note: in this expansion of init! (defined in <helix macros>)
<helix macros>:5:1: 25:47 note: in this expansion of class_definition! (defined in <helix macros>)
<helix macros>:35:1: 37:65 note: in this expansion of class_definition! (defined in <helix macros>)
<helix macros>:5:1: 5:60 note: in this expansion of class_definition! (defined in <helix macros>)
<helix macros>:9:1: 11:40 note: in this expansion of define_class! (defined in <helix macros>)
src/lib.rs:11:1: 17:2 note: in this expansion of declare_types! (defined in <helix macros>)
<helix macros>:21:13: 21:41 help: run `rustc --explain E0277` to see a detailed explanation
<helix macros>:21:13: 21:41 help: the following implementations were found:
<helix macros>:21:13: 21:41 help:   <helix::CheckedValue<&'a [usize]> as helix::ToRust<&'a [usize]>>
<helix macros>:21:13: 21:41 help:   <helix::CheckedValue<std::string::String> as helix::ToRust<std::string::String>>
<helix macros>:21:13: 21:41 help:   <helix::CheckedValue<bool> as helix::ToRust<bool>>
<helix macros>:21:13: 21:41 note: required by `helix::ToRust::to_rust`
error: aborting due to 2 previous errors

windows build not finding helix_runtime

OS Name: Microsoft Windows 7 Enterprise
OS Version: 6.1.7601 Service Pack 1 Build 7601

c:\Dominic\programming\rails\flipper>gem list helix

*** LOCAL GEMS ***

helix-rails (0.5.0)
helix_runtime (0.5.0)

c:\Dominic\programming\rails\flipper>rake build
Unable to load text_transform/native. Please run rake build
Building text_transform
rake aborted!
HelixRuntime::MissingDllError: Unable to find helix-runtime-0-5-0.dll in $PATH.

"No implicit conversion" message is misleading

When I have a Helix class like this:

ruby! {
    class Thing {
        struct {
            a_string: String
        }

        def initialize(helix, a_string: String) {
            Thing { helix, a_string }
        }
    }
}

If I try to pass a non-String object into this class from Ruby, I get an error message:

Thing.new(Object.new)
TYPE ERROR: "No implicit conversion of #<Object:0x007f88920cc688> into String"

So far, so good.

But, No implicit conversion of […] into String suggests to me that if I pass an object that is implicitly convertible to a String, the implicit conversion will be performed. So let's try that:

class TestString
  def initialize(string)
    @string = string
  end

  def to_str
    @string
  end
end

Thing.new(TestString.new("hello world"))

I get the same error, No implicit conversion of […] into String, even though I've defined an implicit conversion!

I think that either this message should be rephrased, or (preferably) Helix should attempt to use Ruby's implicit conversion protocols to convert arguments to Rust types, just like Ruby itself does.

Active Work

  • Static methods
  • Allocating the Ruby wrapper in Rust
  • Constructor arguments
  • Chaining APIs (returning the declared type back to ruby)
  • Lifetime annotations
  • Numeric coercions

Idea: short-hand to alias Ruby methods?

For example, you might want to define both a length/size method that shares the same implementation (like Ruby's Array/String classes).

This seems like a pretty common pattern in Ruby – when browsing through the standard library docs, there are fair number of Alias for: ... floating around.

One idea is to support something like Ruby's alias_method syntax in the macro/DSL. Another approach is to add a #[ruby_alias = "..."] that could appear 0 to N times, similar to how #[ruby_name = "..."] works.

If we are doing this, I suspect option 2 is what we want, since it doesn't seem as common to want to define alias for Rust methods. (If anyone want to try implementing it, the commit to add #[ruby_name = "..."] is probably a good place to draw inspiration.)

Support for modules?

Hey so this is really awesome and I'd like to try it out, unfortunately my use case is that I only have ruby modules, not classes. Are you planning to add support for reopen_module syntax too?

Active project?

Hi!

I'm extremely interested in this project and it would be awesome to see it feature complete.
I'd like to help but although I'm pretty fluent in Ruby, my C is extremely bad and rusty (pun almost intended) and I'm pretty new to rust. Is there still a way that I could contribute?
Is the project still active? The last commit goes back to June...

gem/bundler error when I run the 'console' workflow in the README

Really looking forward to incorporating Rust into my Ruby codebase :)

I took a look at this section: https://github.com/tildeio/helix#getting-started-with-helix-examples

I followed the instructions using Ruby 2.4.0 and here's how far I got:

> bundle exec rake build


Building helix runtime

bundle exec rake compile:native
Could not find gem 'rake-compiler (~> 0.9.7)' in any of the gem sources listed in your Gemfile.
Run `bundle install` to install missing gems.
rake aborted!
Command failed with status (7): [bundle exec rake compile:native...]
/private/tmp/helix/examples/console/Rakefile:15:in `block (4 levels) in <top (required)>'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler.rb:286:in `block in with_clean_env'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler.rb:521:in `with_env'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler.rb:286:in `with_clean_env'
/private/tmp/helix/examples/console/Rakefile:14:in `block (3 levels) in <top (required)>'
/private/tmp/helix/examples/console/Rakefile:12:in `chdir'
/private/tmp/helix/examples/console/Rakefile:12:in `block (2 levels) in <top (required)>'
/private/tmp/helix/ruby/lib/helix_runtime/build_task.rb:39:in `block in define'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:74:in `load'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:74:in `kernel_load'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli/exec.rb:27:in `run'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli.rb:335:in `exec'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli.rb:20:in `dispatch'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/cli.rb:11:in `start'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/exe/bundle:32:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/lib/bundler/friendly_errors.rb:121:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.4.0/gems/bundler-1.14.6/exe/bundle:24:in `<top (required)>'
/usr/local/bin/bundle:22:in `load'
/usr/local/bin/bundle:22:in `<main>'
Tasks: TOP => build => helix:pre_build
(See full trace by running task with --trace)

Failure to build fresh install

I'm trying to follow the getting started tutorial, but I'm having issues.

I first run rails generate helix:crate text_transform, which executes fine. Next, I run rake irb, which tells me "Unable to load text_transform/native. Please run rake build" then aborts the rake task. When I run rake build though, it throws further errors, saying "error: aborting due to 70 previous errors error: Could not compile helix." Full error messages here. As part of that, it recommends that I run cargo build. This provides
the same error messages

I'm running Sierra v10.12.3, ruby 2.3.0p0, Rails 5.0.2, cargo 0.13.0-nightly, and rustc 1.12.0-nightly

We need tests

Tests are definitely necessary for this repo, IMHO.

I'm not sure how to go about this, as it's currently not possible to run scripts as tests, see here.

But what about some ruby tests, rspec maybe? We need to test if the results on the ruby side are correct anyway ;)

Extraneous output (`{}`) when running `BuildTask`

I believe this line is intended for printing the command we are about to execute. However, when called in this form it causes the console output to look like this:

{}
cargo rustc --release -- -C link-args=-Wl,-undefined,dynamic_lookup

...or sometimes...

{"HELIX_LIB_DIR"=>"/Users/godfrey/Code/helix/ruby/windows_build"}
cargo rustc --release -- -C link-args=-Wl,-undefined,dynamic_lookup

Is there a list of supported objects?

I'm wanting to re-write https://github.com/NullVoxPopuli/case_transform/blob/master/lib/case_transform.rb as a rust-extension.

Basically, each method does

      case value
      when Array then ...
      when Hash then ...
      when Symbol then ...
      when String then ...
      else value
      end

Does helix support these 4 objects? (I guess I know it does Strings, based on the fast blank example)

But also (and maybe this is more of a rust question / I need to dive deeper in to the rust docs) for hash, case_transform uses deep_transform_keys!, is that something that would be exposed via helix? would I implement that in rust if it doesn't exist yet?

Any plans to make helix language-generic?

I skimmed the source and it looks like you could probably reuse a great deal of the code for Python. Are there any plans to expand Helix to have the capability of generating other languages' libraries?

Streamline version updating

If you update the helix_runtime gem, but don't update the crate you'll have a version mismatch that will cause a panic. We need to provide clear guidance on how to resolve this. Also, if loading the Rakefile ends up requiring the generated helix native bundle it will crash and be unable to run any rake tasks.

Two minor Ruby interpreter warnings while running tests on a helix library

First things first... awesome talk today at RailsConf. I'm super excited about Helix.

I just noticed two Ruby interpreter warnings while playing around with Helix. I'm sure these will pop up often as development is so rapid (and minor warnings aren't really an issue)... but I can help clean them up 😄 (especially as I read more about how Helix works).

cacpweb-maxhelm:levenshtein maxhelmetag$ bundle exec rake test
{}
cargo rustc --release -- -C link-args=-Wl,-undefined,dynamic_lookup
    Finished release [optimized] target(s) in 0.0 secs
/Users/maxhelmetag/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/helix_runtime-0.5.0/lib/helix_runtime.rb:23: warning: shadowing outer local variable - dir
/Users/maxhelmetag/.rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/helix_runtime-0.5.0/lib/helix_runtime/project.rb:128: warning: `*' interpreted as argument prefix
Run options: --seed 19511

# Running:

..

Finished in 0.001453s, 1376.4626 runs/s, 1376.4626 assertions/s.

2 runs, 2 assertions, 0 failures, 0 errors, 0 skips

Building gems on Windows?

Hello,

I use Ruby quite a lot, but exclusively for scripting and without Rails (I use it for scripting scientific computing and calling other programs)... so I basically know nothing about Rails and all its conventions.

Is it possible to build a gem using Helix without all the rails part? I started a new rust project, added the Helix crate, and when running 'cargo build' it obviously tells me that 'helix-runtime-0.6.0' must exist.

I understand this file is generated when 'bundle install' is executed on a gem... how can I generate it in my case?

THANKS IN ADVANCE!

Foundational Work Tracking Issue

  • Numeric coercions (and specifically, dealing with overflow idiomatically)
  • Static methods
  • Allocating Ruby wrapper in Rust (methods that need Duration.new in Rust)
  • Constructor arguments
  • Chaining APIs (either via taking and returning &mut or via consumption-style chaining)
  • Lifetime annotations on methods (def something<'a>(&self, other &'a Other) -> &'a Other)
  • Multiple classes in one package work

Other important work items:

  • Defining coercions for all of the primary Ruby types (related: #19)
  • Taking Ruby objects (or hybrid objects) instead of coercing to Rust types in methods
  • Ergonomic invocation of Ruby methods on Ruby objects
  • Propagating Ruby exceptions through Rust (and properly handling unwinding)
  • Raising exceptions when type checking fails (currently we log the failure and return nil)
  • Dynamically enforced ownership, &T and &mut T (similar to RefCell)
  • Allowing access to the internals of basic Ruby types (like String) and locking further access to those values (options: freeze, lock the VM, ...)
  • Ergonomically creating Ruby method wrappers for complex features like keyword arguments.
  • Idioms for calling into Rust and trying a pure Ruby implementation if type checking fails (via prepend probably, for completeness when porting a pure-Ruby API with non-performant edge-cases, for example when types rely on Bignum overflow).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.