Project

General

Profile

Actions

Feature #18047

open

TracePoint: Add event type for constant access

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

Status:
Feedback
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) 4 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 #2

Updated by ko1 (Koichi Sasada) 3 days ago

  • Status changed from Open to Feedback
Actions

Also available in: Atom PDF