本文介绍 rust编写一个vim

rust编写一个vim

This article was original written by Jin Tian, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu

关于rust的安装以及国内换源的一些铺垫操作,参考manaai社区的帖子.

rust能干啥?能打败C++?能不能打败C++我们不讨论,我只想告诉大家,rust一门未来你一定要学会的语言。至于理由,我只给出两点:

  • 够快,堪比C而不是C++;
  • 优雅。

这个优雅,怎么说,来自于两方面,一方面是它从关键字到函数名甚至编程风格都很精简,比如定义函数就一个fn, 简单吧?另外一个方便,没有C++恶心的头文件和动态链接库版本混乱。rust有从零开始构建的包管理工具,每一个项目都有。如果用一句话来形容rust,我想这么说:

融合了Python的极客和C的快速的终极语言。

那么今天,我们从零实现一个vim。天下苦vim久已,但是大家应该都还没有牛逼到写一个vim的地步,但是相信我,看完本文,你至少可以实现一个你自己的nano。

高屋建甄

当然我们没有必要从零去实现它。我们可以在已有的但是至今没有维护的版本上去构建,延伸。我采用的项目是itoa 这个项目到目前为止已经没有维护了。用cargo编译出错:

Compiling iota-editor v0.1.0 (/Volumes/xs/tools/transfer/rust/iota)
error[E0554]: #![feature] may not be used on the stable release channel
 --> src/iota/lib.rs:9:1
  |
9 | #![feature(fn_traits)] 
  | ^^^^^^^^^^^^^^^^^^^^^^

error: aborting due to previous error

For more information about this error, try `rustc --explain E0554`.
error: Could not compile `iota-editor`.

To learn more, run the command again with --verbose.

据说这是因为rust compiler太新导致了。运行这个:

rustup override set nightly

这啥意思?

编译在这个库卡了很久:

 Compiling termbox-sys v0.2.10
    Building [================================================>        ] 31/36: ter...

我们看看termbox-sys 这个库是干啥的?