Allow binding instance/internal vars to fields#8804
Draft
headius wants to merge 2 commits intojruby:masterfrom
Draft
Allow binding instance/internal vars to fields#8804headius wants to merge 2 commits intojruby:masterfrom
headius wants to merge 2 commits intojruby:masterfrom
Conversation
This is an extension of the existing mechanism for reification of Ruby classes, allowing us to use normal Java fields for either instance or internal variables. The logic here is largely unchanged from the original reification logic except for enhancements to allow actively requesting a specific binding: * Allow specifying a Ruby name to be used in the variable table, so that both instance vars (@var) and internal vars (no @) can be tied to a specific field. * Allow the direct field configuration to aggregate a Lookup object so that private fields can bound. The example usage here binds the "args" internal variable on NoMethodError to the "args" field on RubyNoMethodError, allowing it to be seen by marshal dumping and fixing one of the DRb issues in ruby/drb#36. The reification change was not strictly necessary to fix that issue, but the alternative converts it into a slow-path internal variable lookup which is less than ideal. Assuming this change is safe, all other instance and internal variables used by concrete JRuby core classes can be converted with the following process: * Set the reified class (the real concrete class) at definition time. * Request the direct field with a Java name and either the @var or bar var name, providing an appropriate Lookup object if the field shoud be private. Enhancements to this feature could include: * Allow binding read-only variables. Currently both a read and write path are expected. * Enhance conversion logic to allow variables to be a more natural Java type. The logic for this exists but has not been heavily tested. See Java logic for treating fields as instance variables.
f9b2c22 to
e9e0cb9
Compare
Member
Author
|
This API should be cleaned up and simplified before applying it elsewhere. |
This was referenced Apr 30, 2025
This hides the plumbing of defining an internal or instance variable accessor that binds directly to a Java instance field. In NoMethodError, it is used to bind the "args" field so that it is seen by Marshal.dump. In other classes, it can be used to avoid the overhead of dynamically retrieving instance variables when a field would fit the code better.
695f9ad to
e8f387c
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is an extension of the existing mechanism for reification of Ruby classes, allowing us to use normal Java fields for either instance or internal variables.
The logic here is largely unchanged from the original reification logic except for enhancements to allow actively requesting a specific binding:
The example usage here binds the "args" internal variable on NoMethodError to the "args" field on RubyNoMethodError, allowing it to be seen by marshal dumping and fixing one of the DRb issues in ruby/drb#36. The reification change was not strictly necessary to fix that issue, but the alternative converts it into a slow-path internal variable lookup which is less than ideal.
Assuming this change is safe, all other instance and internal variables used by concrete JRuby core classes can be converted with the following process:
Enhancements to this feature could include: