TracePoint: Add event type for constant access
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) 3 months 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.