From: "cfis (Charlie Savage)" Date: 2021-08-21T06:27:18+00:00 Subject: [ruby-core:105038] [Ruby master Bug#17643] Ruby 3 embedded - no GC methods? Issue #17643 has been updated by cfis (Charlie Savage). I don't want to do either of those things. Instead I would like to embed Ruby into a C++ program and then use it run tests. Specifically, this is for Rice. The embed Ruby code: https://github.com/jasonroelofs/rice/blob/master/test/embed_ruby.cpp Then tests, for example: https://github.com/jasonroelofs/rice/blob/master/test/test_Array.cpp The reason I'd like to have access to the GC methods is to enable GC stress. That helps verify that Rice is correctly correctly managing memory when integrating with the interpreter. This used to work fine in Ruby 2.x but not 3.x. I believe this is a regression and should be fixed. ---------------------------------------- Bug #17643: Ruby 3 embedded - no GC methods? https://bugs.ruby-lang.org/issues/17643#change-93447 * Author: cfis (Charlie Savage) * Status: Rejected * Priority: Normal * Assignee: nobu (Nobuyoshi Nakada) * ruby -v: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x64-mingw32] * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- The following code works on Ruby 2.x, but not on Ruby 3.0.0. ``` c // Initialize Ruby VM int argc = 0; char* argv = (char*)malloc(1); argv[0] = 0; char** pArgv = &argv; ruby_sysinit(&argc, &pArgv); ruby_init(); ruby_init_loadpath(); // Try to call GC.start int state; VALUE result = rb_eval_string_protect("GC.start", &state); VALUE err = rb_errinfo(); VALUE rubyMessage = rb_funcall(err, rb_intern("message"), 0); char* message = RSTRING_PTR(rubyMessage); message is "undefined method `start' for GC:Module" ``` This is true for all the GC methods (stop, stress, etc). Note if you create a Ruby script that contains GC.start and run it using the Ruby interpreter all is well. Is there some new special way Ruby 3 needs to be embedded? Note I tested this on mingw, MSVC and gcc (Fedora). All the same. Like I said above, this code works fine on Ruby 2.7 and earlier. ---Files-------------------------------- Screenshot 2021-04-02 013926.png (194 KB) Screenshot 2021-04-02 013926.png (194 KB) Screenshot 2021-04-02 013926.png (194 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: