应该没弃坑吧,之前3月份在twitter上有说明
可能遇到什么问题,在攻克吧
感觉 advice 机制,就是从clos得到灵感的,个人感觉,基于广义函数的面向对象比大多数人熟悉的面向对象,更符合直觉
基于广义函数的面向对象,我感觉就是一种组织分支的方法
这个值得期待!莫名高兴起来 ♪(^∇^*)
用 spacemacs 已经有感情了
我有个问题……
为啥叫double dot……
commit message 说效果不理想,要换一条路线
double dot 有一个含义是指comming soon,估计作者本来希望新功能弄好就准备推出0.3吧
这个的出处是?我 Google 了一下没找到
终于又有动作了:
这是离月球又近一步了吗?
现在已经可以测试了,大家要不要试试? Checkout the moon branch
见新帖:
太好了,作者没有弃坑
底层储存上EIEIO object和struct都依赖与emacs里的record object。然而比较讽刺的是你只能用aref aset和下标来操作record object(通常能用名字访问才叫record)。和vector不一样的是record的容量最大只有4096,而且下标0的位置必然是一个指示该record type的symbol(type-of返回值)。
struct只能通过生成的accessor来访问,所以编译时会计算好该accessor对应访问的record下标。而object要支持oref oset这种通用访问,所以下标值是运行时动态计算的。而且struct生成的accessor默认是inlinable的,某种意义上说访问struct比访问object高效。用:accessor为object slot指定的accessor是method,可以用来简化一些get set的boilerplate。
顺带一提oref oset是Elispism,CLOS默认的是slot-value set-slot-value(EIEIO也有)
开始的时候eieio一个重要功能是提供generics分发,实现多态函数,后来又有大佬重写了cl-generic加入Emacs,于是现在struct也可以有多态函数了。
EIEIO支持多继承,然而EIEIO没有CLOS的方法组合系统,于是你会遇到菱形继承的方法调用问题,所以谨慎使用多继承。
我用defclass主要是可以为slot指定docstring,用struct的话就只能手动写一堆注释