Clozure CL中文版021:CLOS Metaobject协议

  • 0

Clozure CL中文版021:CLOS Metaobject协议

Category:帮助手册 Tags : 

CLOS Metaobject协议

Clozure CL支持CLOS的大多数半标准元对象协议(MOP),如“元对象协议的艺术”第5章和第6章所定义,(Kiczales等,MIT Press 1991,ISBN 0-262-61074- 4); 该规范也可在http://www.alu.org/mop/index.html在线获取

值得注意的是缺少对泛型函数调用协议的支持。

关键字:openmcl-partial-mop已启用*features*,表示存在此功能。

MOP规范中定义的所有符号(无论是否实现)都从ccl 包和包中导出openmcl-mop。

MOP实施状态
构造 状态
accessor-method-slot-definition 存取法槽清晰度 +
add-dependent 添加依赖 +
add-direct-method 加上直接法 +
add-direct-subclass 附加直子 +
add-method 添加法 +
class-default-initargs 类默认initargs +
class-direct-default-initargs 类直接默认initargs +
class-direct-slots 类直接插槽 +
class-direct-subclasses 类的直接子类 +
class-direct-superclasses 类的直接超类 +
class-finalized-p 类敲定-P +
class-prototype 类原型 +
class-slots 类型槽 +
compute-applicable-methods 计算,适用的方法
compute-applicable-methods-using-classes 计算,适用的方法,使用类
compute-class-precedence-list 计算-类优先级列表 +
compute-direct-initargs 计算,直接initargs +
compute-discriminating-function 计算辨别功能
compute-effective-method 计算有效的法 +
compute-effective-slot-definition 计算有效时隙清晰度 +
compute-slots 计算时隙 +
direct-slot-definition-class 直槽清晰度级 +
effective-slot-definition-class 有效时隙清晰度级 +
ensure-class 确保一流 +
ensure-class-using-class 确保一流-使用级 +
ensure-generic-function-using-class 确保泛型函数,使用类 +
eql-specializer-object EQL-专用函数对象 +
extract-lambda-list 提取物 – 拉姆达列表 +
extract-specializer-names 提取-专用函数,名字 +
finalize-inheritance 完成继承 +
find-method-combination 发现法组合 +
funcallable-standard-instance-access funcallable标准实例访问 +
generic-function-argument-precedence-order 通用功能参数的优先级顺序 +
generic-function-declarations 通用的功能,声明 +
generic-function-lambda-list 通用功能 – 拉姆达列表 +
generic-function-method-class 通用功能-方法级 +
generic-function-method-combination 通用功能-方法组合 +
generic-function-methods 通用功能的方法 +
generic-function-name 通用的功能名称 +
intern-eql-specializer 实习生-EQL-专用函数 +
make-method-lambda 化妆方法 – 拉姆达
map-dependents 地图家属 +
method-function 法功能 +
method-generic-function 方法泛型功能 +
method-lambda-list 方法 – 拉姆达列表 +
method-qualifiers 方法限定符 +
method-specializers 方法-specializers +
reader-method-class 读写方法级 +
remove-dependent 除去依赖 +
remove-direct-method 除去-直接方法 +
remove-direct-subclass 除去直接子类 +
remove-method 除去法 +
set-funcallable-instance-function 设置funcallable实例功能
slot-boundp-using-class 槽boundp-使用级 +
slot-definition-allocation 槽定义分配 +
slot-definition-initargs 槽定义-initargs +
slot-definition-initform 槽定义 – 在initForm +
slot-definition-initfunction 槽定义-initfunction +
slot-definition-location 槽定义定位 +
slot-definition-name 插槽定义名称 +
slot-definition-readers 插槽定义阅读器 +
slot-definition-type 槽定义型 +
slot-definition-writers 槽定义-作家 +
slot-makunbound-using-class 槽makunbound-使用级 +
slot-value-using-class 槽值使用级 +
specializer-direct-generic-functions 专用函数直接泛型函数 +
specializer-direct-methods 专用函数直接的方法 +
standard-instance-access 标准实例访问 +
update-dependent 更新依赖 +
validate-superclass 验证-超 +
writer-method-class 作家方法级 +

请注意,上表中状态为“ – ”的那些泛型函数处理泛型函数调度和方法调用(“泛型函数调用协议”)的内部。在Clozure CL中,方法功能与MOP期望的功能略有不同,目前尚不清楚该子协议是否或如何得到良好支持。

上表中标记为“+”的那些构造名义上是按MOP文档指定的那样实现的(与规范的偏差应被视为错误;请报告它们。)请注意一些广泛使用的CLOS实现(例如,PCL) )实现一些东西(ENSURE-CLASS-USING-CLASS浮现在脑海中)与MOP指定的东西略有不同。

并发问题

整个CLOS类和泛型函数层次结构实际上是一个(大型,复杂)共享数据结构; 一个线程请求对所有CLOS的独占访问,以及对CLOS层次结构的意志修改的影响(通过类重新定义,change-class在多线程环境中等)的影响并不总是易于处理。

本机线程加剧了这个问题(因为它们增加了并发修改和访问的机会。)实现应该尝试确保线程对CLOS层次结构的任何子集的视图是一致的(在可能的范围内)并且应该尝试确保层次结构的偶然修改(缓存更新等)以原子方式发生; 实现通常不可能保证线程的事物视图是正确和最新的。

如果您以最常用的方式加载代码并定义类,也就是说,通过编译器,仅使用单个线程,这些问题可能不会对您产生太大影响。

但是,如果您在运行多个操作彼此相关对象的线程时对类层次结构进行了详细的更改,则需要更加小心。在做这样的事情之前,你应该知道自己在做什么,并且已经知道要采取什么预防措施,而不是被告知。也就是说,如果你这样做,你应该认真考虑你的应用程序的关键数据是什么,并对关键代码部分使用锁。


Leave a Reply

搜索

分类目录

公 告

本网站学习论坛:

www.zhlisp.com

lisp中文学习源码:

https://github.com/zhlisp/

欢迎大家来到本站,请积极评论发言;

加QQ群学习交流。