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

不过往好处想的话,反正新手已经看不懂spacemacs了,如果改写能让spacemacs效率翻倍功能完善配置清晰也挺好的。

我开始hack spacemacs的时候都是从在user-config里写小片段开始,后来干脆开始自己的配置了,从头到尾没有看spqcemacs实现。中间弄自己的layer的时候看过spacemacs layer的配置。

是指用宏批量生成函数然后find-function找不到的那些么?

defmethod 也算这类吧。

如果是 (defmethod foo () ...) 这种形式,出来的函数名仍然是 foo,还是能跳转的。 find-function 是先切换到定义所在的文件,然后正则表达式全文查找,所以只要往 find-function-regexp{,-alist} 添加规则就能匹配到。

如果定义 (definitfun foo () ...),然后生成的函数名 init//foo,这种就不太好办了。

defmethod 问题在如果分了好几个文件就麻烦了。

double dot 这个分支好像也被抛弃了,现在repo owner最新的 commit 在 moon 分支上。只是也有快一个月没更新了。感觉作者在酝酿什么大招,而且不实现就暂时不合并任何 PR。

哇是吗,我去看看

爲什麼不是原作者棄坑了……

是这样吗?如果是就太可惜了,本来以为可以一直发展下去的。最近确实一直没什么动静了。

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


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

2 个赞

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

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

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

用 spacemacs 已经有感情了

我有个问题……

为啥叫double dot……

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

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

1 个赞

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

终于又有动作了:

image

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

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

见新帖:

太好了,作者没有弃坑

1 个赞

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

1 个赞