Hello again :)
I've been experimenting with Ractors since upgrading to Ruby 3.0 for #275 but quickly ran into Ractor::UnsafeError when trying to call Ox::sax_parse in anything except the main Ractor.
Per Ruby's Ractor C extension documentation (link below):
"By default, all C extensions are recognized as Ractor-unsafe. If C extension becomes Ractor-safe, the extension should call rb_ext_ractor_safe(true) at the Init_ function and all defined method marked as Ractor-safe. Ractor-unsafe C-methods only been called from main-ractor. If non-main ractor calls it, then Ractor::UnsafeError is raised."
I don't like to open seemingly-large feature requests like this without making some attempt at it myself first,
and luckily it seems like Ox::sax_parse Just Works™ since I marked it Ractor-safe, even with the class_cache. Confirming this safety, making any remaining changes to Ox::Sax, and expanding this to the non-Sax parts of Ox are all unfortunately out of my depth as a n00b C coder, so I would appreciate if you could take this over if it interests you. I am happy with just Sax support since I have no current need for marshalling, but I imagine other Ox users wouldn't be satisfied if stratified. I have a PR incoming for this change.
Official Ractor info:
Blogs:
Hello again :)
I've been experimenting with
Ractors since upgrading to Ruby 3.0 for #275 but quickly ran intoRactor::UnsafeErrorwhen trying to callOx::sax_parsein anything except the mainRactor.Per Ruby's
RactorC extension documentation (link below):"By default, all C extensions are recognized as
Ractor-unsafe. If C extension becomesRactor-safe, the extension should callrb_ext_ractor_safe(true)at theInit_function and all defined method marked asRactor-safe.Ractor-unsafe C-methods only been called from main-ractor. If non-main ractor calls it, thenRactor::UnsafeErroris raised."I don't like to open seemingly-large feature requests like this without making some attempt at it myself first,
and luckily it seems like
Ox::sax_parseJust Works™ since I marked itRactor-safe, even with theclass_cache. Confirming this safety, making any remaining changes toOx::Sax, and expanding this to the non-Saxparts ofOxare all unfortunately out of my depth as a n00b C coder, so I would appreciate if you could take this over if it interests you. I am happy with justSaxsupport since I have no current need for marshalling, but I imagine otherOxusers wouldn't be satisfied if stratified. I have a PR incoming for this change.Official
Ractorinfo:Ractordocumentation: https://docs.ruby-lang.org/en/master/doc/ractor_md.htmlRactordocumention coveringrb_ext_ractor_safe: https://docs.ruby-lang.org/en/master/doc/extension_rdoc.html#label-Appendix+F.+Ractor+supportRactorC Extension from the creator ofRactorthat might serve as a useful example: https://github.com/ko1/ractor-tvarBlogs: