Project

General

Profile

Actions

Feature #18047

open

TracePoint: Add event type for constant access

Added by suusan2go (Kenta Suzuki) 3 months ago. Updated 3 months ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:104689]

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) 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.

Actions

Also available in: Atom PDF