ruby - Ruby 中访问修饰符的实现和性能
问题描述
我正在对动态语言中的访问修饰符进行一些研究,我想了解更多关于 Ruby 如何实现它们的信息。我特别感兴趣的是访问控制检查是否发生在运行时,或者是否发生了任何提前或评估时优化,这可能要归功于即时编译步骤。如果在当前的 Ruby 实现中没有这样的优化,我仍然很想知道这在理论上是否可行。
此外,如果private
orprotected
方法确实需要在调用方法时进行运行时检查以确保应允许访问,那么对性能的影响有多大?我猜想所有方法调用都需要进行这种运行时检查,包括公共方法调用,这是否意味着所有方法调用本质上都比 Ruby 没有访问修饰符时要慢?
我意识到这些是关于 Ruby 解释器内部的相当技术性的问题,详细理解这一点的最佳方法是阅读 Ruby 源代码。但我不是 Ruby 开发人员,并且对学习适用于动态语言和一般访问修饰符的原则更感兴趣,所以我希望这里有人能够分享他们对 Ruby 内部的知识。
到目前为止我所做的研究:
- 关于编译器与解释器以及静态和动态类型系统的实现的一些背景阅读(我也了解访问修饰符在编译语言中的工作方式......在动态语言方面显然有点模糊)
- 我遇到了一本书(Extending a dynamic programming language and runtime environment with access control),它大体上讨论了这个问题,还讨论了用于 Ruby 的 GemStone Smalltalk VM,但我不知道它讨论的实现细节是否也是如此主要/官方的 Ruby 解释器。但需要明确的是,我并不是要求这里的任何人阅读或查看这本书,只是提供一些背景信息。
解决方案
推荐阅读
- php - 在 MySQL 中创建函数时出现错误 #1064
- angular - 角度加载页面
- php - Eloquent 将 MSSQL 数据作为字符串返回,而不是它们各自的数据类型
- python - 如何根据python中的给定数字创建多个字典?
- c# - 全局 XAML 构造
- reactjs - Flex.Item 在 Ant Design Mobile React Native 中不起作用
- authentication - 如何根据从第三方 rest API 收到的令牌管理 .net core 中的身份验证和授权?
- python-3.x - 在 Colab 中使用 NeuralCoref 的属性错误
- datastax - DSE 无法从 LCM 安装 Graph
- multithreading - c++11 2线程无锁队列