有人看过 spacemacs 新的 double dot layer system 了吗?

spacemacs

#21

应该没弃坑吧,之前3月份在twitter上有说明


可能遇到什么问题,在攻克吧


#22

感觉 advice 机制,就是从clos得到灵感的,个人感觉,基于广义函数的面向对象比大多数人熟悉的面向对象,更符合直觉


#23

基于广义函数的面向对象,我感觉就是一种组织分支的方法


#24

这个值得期待!莫名高兴起来 ♪(^∇^*)

用 spacemacs 已经有感情了


#25

我有个问题……

为啥叫double dot……


#26

commit message 说效果不理想,要换一条路线


#27

double dot 有一个含义是指comming soon,估计作者本来希望新功能弄好就准备推出0.3吧


#28

这个的出处是?我 Google 了一下没找到


#29

终于又有动作了:

image

这是离月球又近一步了吗? :joy:

现在已经可以测试了,大家要不要试试? Checkout the moon branch

见新帖:


#30

太好了,作者没有弃坑


#31

底层储存上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的话就只能手动写一堆注释