Issue #22222 has been updated by Eregon (Benoit Daloze). I guess one concrete issue here with using `rb_str_new_static()` is the mmaped file/stack buffer will be freed soon after the `RubyVM::InstructionSequence.load_from_binary(String)` call, but that String object might live longer, there is no "GC this object now" (AFAIK). And potentially something could get that String via `ObjectSpace.each_object`, and then it'd segfault if the underlying buffer has been freed. ---------------------------------------- Feature #22222: Expose a C API equivalent of `RubyVM::InstructionSequence.load_from_binary` https://bugs.ruby-lang.org/issues/22222#change-118299 * Author: byroot (Jean Boussier) * Status: Open ---------------------------------------- Currently the only API to deserialize instruction sequence is `RubyVM::InstructionSequence.load_from_binary(String)`. It works fine, but isn't ideal for gems like bootsnap, as it needs to allocate a fairly large string and `memcpy` into it. I would like to be able to directly pass a `char *ptr` and `size_t len` pair, so that I can directly pass a internal buffer or even mmapped file. Proposed API: ``` VALUE rb_iseq_load_from_binary(const char *ptr, size_t len) ``` Pull request: https://github.com/ruby/ruby/pull/18136 -- https://bugs.ruby-lang.org/