16、动态语言的只读执行

动态语言的只读执行

在动态语言的编程实践中,实现对象的只读执行是一个重要的技术需求,它能帮助我们解决诸如避免副作用、保护数据结构等问题。下面将详细介绍动态只读对象引用(DRO)的相关概念、实现方式以及应用场景。

1. 句柄:透明的每个引用代理

句柄在概念上是代表其目标对象的对象,它与目标对象具有相同的身份,但将其行为重新定义为只读。在实现层面,句柄是特殊的对象。当向句柄发送消息时,消息实际上会应用于目标对象,但采用句柄的行为,即接收者是目标对象,但方法在句柄中解析。

例如,创建只读引用的过程如下:

a
a
b := b asReadOnly
b
b
handle on o
o
o

这里,首先获取一个对象并将其赋值给变量 a b ,然后通过变量 b 要求对象变为只读,这会创建一个句柄。

句柄和对象的身份是相同的,与传统代理不同,句柄是透明的。如果没有这种透明性,可能会导致微妙的错误。例如,将目标对象和其句柄添加到集合中,如果句柄不透明,就会破坏句柄和目标对象是同一对象的假象。

2. 启用只读行为

句柄可以对同一组消息具有与目标对象不同的行为。为了在目标对象上安装句柄,我们将目标对象的方法重写并安装到句柄引用的影子类中:
1. 对全局变量和实例变量的存储访问会引发异常。
2. 对全局变量、实例变量和 self 伪变量的读取访问会动态地包装在只读引用中。 <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值