复制 intervals 可以不简单,会重新平衡 interval tree,text property 多的 buffer 可以消耗几秒钟的时间。 关于 coding system,是我错了,从 Emacs 内部换 unicode 之后就没有单独解码了。
这个是上面 make_buffer_string_both
里面 if (props)
运行的內容,我找了个 tree-sitter 的 emacs 绑定实现看了下,实际上调用的是 buffer-substring-no-properties
,props
会设为 0
,不会对 text property 相关的內容进行操作。
不过 tree-sitter 本身有 bug 不能实现整合是另一回事了。
我这里没啥感觉,用的下面的。估计配置差異。
(add-hook 'post-command-hook
(lambda () (buffer-substring-no-properties (point-max) (point-min))))
而且 after-change-functions
就行了,post-command-hook
有点过了。
即使使用 `buffer-substring-no-properties’,也会创建新 string,复制一次,次数多了也会导致 GC
我在 post-command-hook 中加上了 `buffer-substring-no-properties’,然后就开始不停的 GC,无法接受
说白了,不管 memcpy 速度如何,通过复制 buffer 内容来实现 incremental parsing 就不是正确的实现方式,正确的实现方式是在 Emacs 内置 tree-sitter,而 Emacs 这边的工作已经做的差不多了,只剩下等 tree-sitter 开发者修 bug
我有个小问题,内置 tree-sitter 是指以 C 代码形式加到 Emacs 吗?这样是不是让 Emacs C 代码部分变大了?以及这种变大会有坏处吗?问题纯属好奇。
没有,就是和别的库一样变成编译时可选依赖。
tree sitter要改allocator必须从源码编译,估计得加入emacs源码树
照你这么说,gcc emacs merge 以后得把 gcc 也整进 emacs 代码里了, 因为 libgccjit 也要改 gcc 编译参数(
casouri 主页里 tree-sitter 的一些相关介绍
邮件列表上的讨论
单集成而言,某种意义上应该算得上是已经完成了,剩余的部分更多的我觉得应该归类到对 tree-sitter
的运用?可能就像另一个贴子里 oldosfan 说的那样或许是在等待 tree-sitter 的开发者解决一些关于 malloc 的问题?
tree-sitter 改 allocator 是通过 preprocessor 覆盖
比如这样
#define ts_malloc my_custom_malloc
#include lib.c
不像 gmp, 是通过 mp_set_memories_function
改 allocator 。当然了这样做的代价是,当另外一个库也引用了 gmp 并且通过这个函数修改 allocator,你自己的 allocator 就被覆盖了
不改应该也有办法,这是讨论了改的情况
libgccjit,记得几个为了 gccemacs 改的补丁都是直接被上游合并了
mac 下编译出错。 gcc ./src/parser.c ./src/scanner.cc -fPIC -I./ --shared -o vue.so -v
“/Library/Developer/CommandLineTools/usr/bin/ld” -demangle -lto_library /Library/Developer/CommandLineTools/usr/lib/libLTO.dylib -no_deduplicate -dynamic -dylib -arch x86_64 -macosx_version_min 10.15.0 -syslibroot /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk -o vue.so /var/folders/mr/_vf8pfn14_sbg5szyxc259040000gp/T/parser-afb469.o /var/folders/mr/_vf8pfn14_sbg5szyxc259040000gp/T/scanner-ebe213.o -L/usr/local/lib -lSystem /Library/Developer/CommandLineTools/usr/lib/clang/11.0.0/lib/darwin/libclang_rt.osx.a Undefined symbols for architecture x86_64:
不知道是哪里出错了
没有mac,不晓得哇
你好,在lazycat emacs的配置里面怎样把tree-sitter-vue的模块去掉 Error running timer: (error “Cannot find shared library for language: vue”)
按照 GitHub - manateelazycat/grammatical-edit: Grammatical edit base on tree-sitter 底部三段话执行一遍就可以了。
最新的 tree-sitter 从 tree-sitter/langs/bin 加载动态库,原来是 tree-sitter-langs/bin 这个目录