不过往好处想的话,反正新手已经看不懂spacemacs了,如果改写能让spacemacs效率翻倍功能完善配置清晰也挺好的。
我开始hack spacemacs的时候都是从在user-config里写小片段开始,后来干脆开始自己的配置了,从头到尾没有看spqcemacs实现。中间弄自己的layer的时候看过spacemacs layer的配置。
不过往好处想的话,反正新手已经看不懂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。
哇是吗,我去看看
爲什麼不是原作者棄坑了……
是这样吗?如果是就太可惜了,本来以为可以一直发展下去的。最近确实一直没什么动静了。
感觉 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的话就只能手动写一堆注释