Feature #18047
closedTracePoint: Add event type for constant access
Description
Hi there
We've made a PR to add new :constant_access TracePoint event. https://github.com/ruby/ruby/pull/4683
Burke Libbey made some first steps on this idea a few years ago #13133 and we improved his patch based on the comment by ko1.
As mentioned in the issue above, this patch allows us to enable boundaries between packages/components.
Burke's proof-of-concept gem might help you understand more concrete usage of this patch.
The proof-of-concept gem works like the below and this will help us manage large codebases with lots of dependencies.
package 'product'
class Book < ApplicationRecord
belongs_to :user
end
package 'user'
class User < ApplicationRecord
has_many :books
end
user = User.first
user.books
# => VisibilityError (can't access Book from User)
Updated by Eregon (Benoit Daloze) over 2 years ago
Is it only on constant reads or also on constant writes/assignments?
Access is a pretty generic term and I would think it means both, but then is there a way to differentiate from the TracePoint event?
Adding docs to the TracePoint class about this event would be helpful to understand that better.
I think it would be relevant to measure the performance impact of this change:
- When the new TracePoint is not enabled vs before the PR
- When the new TracePoint is enabled but does nothing
- When the new TracePoint is enabled and does package checks like the example
Constant reads are very frequent so there might be quite some overhead to this.
Updated by ko1 (Koichi Sasada) over 2 years ago
- Status changed from Open to Feedback