查看原文
其他

Vim 作者创建分支 Vim9 以改进 Vim 的性能

IT服务圈儿 2022-09-11

IT服务圈儿

有温度、有态度的IT自媒体平台


来源:开源中国 [OSCHINA 社区 http://www.oschina.net]


2019年9月20日的HUAWEI CONNECT华为全链接大会上,华为透露其服务器操作系统EulerOS将会开源,命名为openEuler,以促进鲲鹏生态的发展。

Vim 编辑器的创建者 Bram Moolenaar 最初开发了 Vim 以作为 Vi 编辑器的“增强版”,而现在,他希望通过一个名为 Vim9 的实验性分支对 Vim 本身进行改进。


Bram Moolenaar 表示,Vim9 是 Vim 的一个实验性分支,旨在探索使 Vim 脚本更好且更快执行的方式。这也是除“弹出窗口(Popup Windows)”和“文本属性(Text Properties)”之外,开发者呼声最大的功能需求。


为了能更快执行 Vim 脚本,Bram 思考了很多并得出如下结论:当前调用和执行函数的方式(带有用于参数和局部变量的字典)永远不会很快。如果能够使速度快两倍,那么 Vim 的性能将会有明显的改进。毕竟调用和执行每一行函数的开销十分高。


Bram 认为只有通过一种与旧方法类似但属性不一样的新方法来定义函数才能使速度变快:


  • 参数只能通过名称(name)使用,而不能通过 a: dictionary 或 a:000 列表的形式使用

  • 局部变量在 l: dictionary 中不可用

  • 解决一些影响速度的问题,例如异常处理细节


对于上面的思路,Bram 提供了概念验证代码。到目前为止,对于一个简单的运行循环的 Vim 脚本,Vim 需要五秒钟的时间,Vim9 则可以在 0.07 秒内运行它,与 Lua 脚本的时间相同,并且比 Python 更快。


let sum = 0 for i in range(1, 2999999) let sum += i endfor



在更相关的代码片段中,Vim9 可以在 0.19 秒内运行脚本,而 Vim 的时间是 0.85 秒。


let totallen = 0 for i in range(1, 100000) call setline(i, ' ' .. getline(i)) let totallen += len(getline(i)) endfor



关于 Vim9 的具体实现思路和细节请查看其 GitHub 仓库,这些工作经过验证有效后会被合并到 Vim 中。


GitHub 仓库:https://github.com/brammool/vim9


原文网址:https://www.oschina.net/news/112562/vim9-improved-vim-fork




*版权声明:转载文章和图片均来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存