Skip to content

【译】hecto:用 Rust 开发自己的文本编辑器

May 7, 2022 | 11:43 AM

2023.2.1 —— 润色语句,减少翻译腔;增加译者序。

本文翻译自:Hecto: Build your own text editor in Rust – Philipp Flenker – Engineering Manager ,封面图也来自于此。

我们会在这一系列博客中讲解怎样用 Rust 开发文本编辑器。跟这篇非常不错的 kilo 教程讲的差不多,本文的文本编辑器是 kilo 的 Rust 实现。与 kilo 教程类似,本系列文章将逐个步骤地指导你开发一个文本编辑器:hecto

基本上,你总是可以通过修改、保存和运行程序看到自己的改动。我将尽全力解释执行的每一个步骤 — 有时很详尽,不过大多是链接到其它网页。你可以随意浏览文字,忽略掉这些链接。因为通过运行修改后的代码和观察文本编辑器的变化,就能学到很多东西。

为什么?

我总是这样认为:每个软件工程师需要对至少两种程序设计语言有深入的了解。好吧,我要承认,过去这几年,我开始忘记除 JavaScript 以外的知识了。这也是我开始学 Rust 的原因。我把重新实现 kilo 作为学习过程。但是为什么呢?为了学习 Rust,我希望重新实现一个容易理解的软件,这样就能专注于语言本身,而不用沉溺于实现细节中。但是我又不想重新实现用 JavaScript 实现的东西。因为我认为 JavaScript 是为一个不同于 Rust 的方向而设计的。或者换句话说,如果你是个修水管的,你最好通过砍树来学习如何用斧子,而不是去学习疏通洗碗池。kilo 的难度足以提供一个挑战。当我阅读的时候,我也期望它也可以用 Rust 实现 — 现在它来了!

那为什么起这样一个名字呢?hecto 的目标比 kilo 更谦逊。它的志向并不是小,况且这还不是我自己的主意 — 所以给它起一个比前辈更谦逊的名字似乎合适一些。(译者注:kilo 有千的意思,hecto 表示的是百,所以『小』了。)

许可证明

修改的动机

尽管这一系列博客主要以原来的那篇教程为基础,但代码已经移植到了 Rust 。不仅调用最接近的『Rust 对应函数』,而且尝试以一种 『Rust 的方式』来解决问题。同样地,所有的解释都已经检查和审核过了。很多情况都已经以 Rust 的方式重写了。因此,这篇教程应该被看成是原来 C 程序设计语言版本的 『Rust Remix』。

反馈

你们读我的博客我会开心,也希望听见你们的意见 — 尤其是,当你们卡住了,或者找到了一个更好解决某个特定问题的方法。请记住这些对我来说主要是一个学习 Rust 的机会,所以如果有更好的方法,请务必联系我

2022 年的更新

自从我写完这篇教程后已经过了些年头了。Rust 世界中的很多东西已经变了。这意味着本教程中的代码可能不再能运行了,它可能会产生警告甚至是错误,而这些是我第一次写教程的时候没有遇到的。网友们仍然给我指出 bug,或者提交 pull request 来修复这些问题。然而,我没有时间来更新本教程中所有的代码示例。 不过,凡是需要的地方,我都至少更新了教程中的文字,并且加上了提示和建议。所以,只要付出努力,你就能完成教程。

译者序

本系列博客适用于熟悉一门程序设计语言(如 Go、Python 等),想学习一下 Rust 但是没有什么项目经验的初学者。当然如果你对类似于 vim 的编辑器感兴趣,想尝试复现一下 vim 中的功能,本系列也适用于你。其他情况,译者建议直接阅读源代码。

目录

  1. 安装环境

  2. 读取用户输入

  3. 原始输入输出

  4. 文本阅读器

  5. 文本编辑器

  6. 搜索

  7. 语法高亮