动态语言的只读执行
在动态语言的编程实践中,实现对象的只读执行是一个重要的技术需求,它能帮助我们解决诸如避免副作用、保护数据结构等问题。下面将详细介绍动态只读对象引用(DRO)的相关概念、实现方式以及应用场景。
1. 句柄:透明的每个引用代理
句柄在概念上是代表其目标对象的对象,它与目标对象具有相同的身份,但将其行为重新定义为只读。在实现层面,句柄是特殊的对象。当向句柄发送消息时,消息实际上会应用于目标对象,但采用句柄的行为,即接收者是目标对象,但方法在句柄中解析。
例如,创建只读引用的过程如下:
a
a
b := b asReadOnly
b
b
handle on o
o
o
这里,首先获取一个对象并将其赋值给变量 a 和 b ,然后通过变量 b 要求对象变为只读,这会创建一个句柄。
句柄和对象的身份是相同的,与传统代理不同,句柄是透明的。如果没有这种透明性,可能会导致微妙的错误。例如,将目标对象和其句柄添加到集合中,如果句柄不透明,就会破坏句柄和目标对象是同一对象的假象。
2. 启用只读行为
句柄可以对同一组消息具有与目标对象不同的行为。为了在目标对象上安装句柄,我们将目标对象的方法重写并安装到句柄引用的影子类中:
1. 对全局变量和实例变量的存储访问会引发异常。
2. 对全局变量、实例变量和 self 伪变量的读取访问会动态地包装在只读引用中。 <
超级会员免费看
订阅专栏 解锁全文
1946

被折叠的 条评论
为什么被折叠?



