本书跟随原文截止日期:2022-04-29

前言

试水版

本译作是译者自己在学习 Rust 时,有感于国内 Rust 中文学习资源贫乏的激情之作。

译者在阅读和练习完了 Rust 的入门经典 The Rust Programming LanguageRust by Example 之后,发现自己对 Rust 非常感兴趣,就一发不可收拾地继续投入精力来深入学习。在这个继续学习的过程中译者发现自己在不断的翻阅官网的 参考手册(Reference)

直接查看英语原文的确对理解 Rust 的基础概念很有帮助,但毕竟看英文效率太低;并且原文作为专业的工具书在读者设定上对阅读者做了较高的基础知识储备和 Rust 领域知识的假设;以及由于原文并未正式完工,还在不断增补中,所以其为追求效率导致其使用的英语语法比较简略随意,对基础知识和背景知识的省略严重,导致对译者这样的非英语母语者阅读起来体验并不好。所以译者就萌生了自己对阅读理解做翻译笔记的想法。

在做翻译笔记的时候发现很多技术坎要过,需要核对一下自己的理解到底对不对,就想偷懒看看中文网内有没有业内大佬把这些资源翻译为中文的,或者这本书的直接翻译版。很遗憾,Rust 在国内不怎么流行,中文资源不多,又很零碎分散,所以很长一段时间之内,译者并没有发现,后来通过 Rust语言中文社区发现国内站点-芽之家上有Rust Reference的翻译版。小激动了一番之后发现此版本的翻译者在翻译完前几章后中途弃坑了。

此发现虽有遗憾,但也激发了译者的勇气,既然有人敢开头,那我就敢给他接力翻译几篇。但遗憾的是译者发现芽之家的译本对译者来说仍不是很好理解,也不能及时的和 Rust 官网上的 参考手册(Reference)保持同步。所以译者就依仗着有道翻译决定单干,所以本书的前期的格式和部分名词的译法参照了此版本。所以译者在此特别感谢此版本的翻译者给译者的勇气。

因为译者本身非计算机专科出身,又只是 Rust 的入门学习者,又是首次尝试这么大的翻译量,所以书中难免有不少翻译错误或者译者理解错误的地方,但译者的对 Rust 的热爱还在,对 Rust 学习的热情还在,所以就直接厚着脸皮拿出来献丑。译者这样做一是致敬 Rust,一是希望为国内 Rust 社区的繁荣尽些热心,更是为了提高译者自己的学习水平。当然也希望能激发更多学习者的热情;同时也希望读者能帮助译者进步,不止于帮助译者改进本书。

最后,因为译者实在是水平有限,对本书附录的 Macro Follow-Set Ambiguity Formal Specification 实在是无能为力了,只能翻译一半停下,希望读者中的高手能帮忙继续翻译,或者直接重新翻译,或者给译者指点一下也行。

抢救版

由于自己的才疏学浅,本译作发布之后,发现了不少翻译错误和译者对 Rust 知识点的理解错误,所以译者不得不再次鼓起勇气来检查和改正这些错误和失误。经过半个月的时间紧急抢救,现在译者终于有信心再次宣布——本译作救活了,可以一看了!

翻译说明

翻译风格

本书基本是忠于原文的直译,但针对比较晦涩的地方,本书采用了译者自己的理解的意译。但译者本身也是 Rust 的一个入门学习者,所以这里难免出错,所以这里恳请读者及时指正,以免译者贻害其他读者。

也因为大部分是直译,所以行文并不是很符合中文的阅读习惯,比如同一句话里的定语过多,比如前后两句话没有明显的承接关系等。开始时译者也想把这些修改为符合中文阅读的行文方式,但一是发现工作量有些大,再则,也是主要的,就是在修改的过程中难免加入译者过多的演绎,这样很可能偏离原作的语义,所以暂时没改。其实根据后来译者的检查阅读体验发现,这样的行文反倒是有助于提高阅读时的专注力,比如,停下来对一句话里“...的...的”划分反倒是能让读者更深入理解语义。所以译者愿意相信这百分之十几的阅读磕顿有助于提升这作为一部工具书的价值。

有时针对同一个英文原文,社区可能存在多种流行度差不多译法或译者认为自己的译法更贴切时,译者会采用格式“A译法/B译法”来同时给出这两种译法,比如,grammar 就翻译为“文法/语法”。

一个问题是译者对原文章节段落标题的翻译。这样做是原文的文档链接仍然有效,这样能有效降低译者对文档链接的维护,也能降低译者对一些名词的专门维护,还能有效提醒读者本章节段落的主题。

再一个问题是译文中的“译者注”,这里原本是译者加入的自我理解,以便降低新手的阅读门槛。但后来发现有些泛滥,并且译者的过分演绎发挥可能影响阅读体验,甚至曲解原意,所以译者删除了一部分,后续翻译也尽量克制了这一冲动。

再有就是对一些名词的翻译,译者基本上是遵循了 LearnKu 上的 Rust 语言术语中英文对照表上的约定,但也有一些译者按自己的理解做了新的翻译,这些下节和本书最后的本书术语翻译对照表中说明。

Rust 的每种句法都有自己独特的句法规则,前期译者对这部分内容做了翻译,但发现翻译后无法保持句法规则的清晰性,严重妨碍读者对其的理解,尤其是其中的 token 和[产生式(production)]如果翻译了就完全丢失了其中蕴含的格式意义,所以这部分译者就放弃了,直接拷贝了原文。

译者最近开始学习编译原理,发现本书的有不少译法跟标准的译法还是有差异,但译者最近有些精力不济了,所以译者准备等编译原理学完之后再统一改,所以再次对各位读者先说声抱歉,也欢迎各位读者提交 PR 先行修改。

待续

约定

如果一些词译者觉得只使用中文行文可能会导致读者迷惑,那译者就会使用半角的圆括号把原英文带出,比如:标称类型(nominal type)。
但有一类虽然比较浅显,译者还是采用了这种格式,比如:结构体(struct),这类是其实是原文直接使用了 Rust 文法中的简单token 来指代相关名词的方便做法。这类做法的另一个含义是这这类词代表了某种特定和关键的意义,并有可能直接出现源码中。所以译者的这种翻译方法也是为了不遗失这部分含义。
还有一类是针对比较生僻或非常专业的原文,译者可能较多的采用了意译,比如 “Macro Kleene Matcher”,可能译为“宏克林闭包匹配器”比较专业,但译者意译为“可匹配空的宏匹配器”,专业性是降低了,但也可能照顾了部分非专业读者。

译文中还有许多全角圆括号,这些有可能是原文行文中就有的括号,也可能是译者为中文行文方便添加进来的,也有是译者为补充语义、方便阅读特意添加进来的(这部分主要是译者注太多了,译者看着也烦)。

再有就是翻译难免加上译者的理解,尤其是译者有强烈的愿望希望在不降低此书作为手册之外,能尽可能的降低此书的阅读门槛,所以译者除了多处采用意译、补充原文省略词外,还采用了了在部分晦涩或译者认为需要提醒的地方采用了右上角标注跳转链接的方式,这里跳转处的解释很多都是译者自己的理解,特提请读者注意辨别。

一些不确定该如何翻译的名词,译者也遵循一般原则没有强翻。但如果一个专有名词又有中文又有英文,译者就有意没在这两个次词/字中间留有空格,例如:“trait对象”。尤其是那些原文带有 token 含义的名词,译者也一般把它们“紧密结合”在一起,比如:let语句、cfg属性等。

每章节译文开头,译者都把其对应的原文链接地址和本译文对应的 commit id 给放上了。同时也把译者最后维护的时间给放上。这些是希望将来的其他贡献者能共同遵守。
本翻译说明的开头还附上了本书最后一次维护时同步原文的时间。

待续

常用词翻译

  1. lifetime,社区一般译为“生命周期”,但在本书原文中有行文用到 lifecycle,本译作为何此词译义分开,选择翻译为“生存期”。并且译者在翻译中发现使用“生存期”在中文中行文更合适。
  2. Syntax,这个词很多译者的随意的翻译为“语法”,但在本书里它大部分时候特指单一语言部件的产生式格式,所以本书统一翻译为“句法”。在它之上一层的语言组织方式才翻译为“文法”,有时也翻译为“语法”。
  3. nominal type:标称类型。这是译者自创的一个翻译方法,首先 nominal type 在目前国内 Rust 社区里还没有合适的翻译先例,所以译者这里就蹭机器学习的热点翻译为“标称类型”,这种行径虽然降低了Rust的逼格,但在目前状态下,收益可能还是值得的。
  4. item,这个一般翻译为“项”或“条目”,译者期初为了读起来更符合习惯,选择了“项”的翻译方法,但后来发现这个方法太容易引起歧义,无法体现出其作为语法单元的特殊含义,所以又给它添了两个字,变成了“程序项”。发布后,听从网友“无聊”的建议,又统一改为“程序项”。而其他名词复合时,一般会简化翻译为“XX项”,如:“static item”,译者就翻译为“静态项”。
  5. size,社区内常把这个词在表示 Rust 数据类型的位宽时译做“大小”,但在中文语境中,有时无法把其和数值大小,以及比较意义的大小,或长度等含义快速区分开来,所以本文在表示 Rust 数据类型的位宽时统一译做“尺寸”。
  6. bit,这个通常译为“位”,但有时它会和中文中的“两位数”的“位”混淆,所以在代表二进制位宽时译者干脆保持不译。
  7. alignment,这个词在表示一种布局属性时,通常译作“对齐”,但本书由于体量较大,行文中很难把其和动词的“对齐”,以及普通意义上的“对齐”区分开来,所以在特指布局属性中的 alignment 时,统一翻译为“对齐量”。出于同样的考虑,representation 在表示类型的布局属性时统一翻译为“表形”。
  8. 更多常用词汇的翻译对照见本书术语翻译对照表

阅读建议

本译作的英文原文主语省略很严重,但基本规律是省略的主语大部分是本节的标题,所以译者也很多时候继承了这个风格,所以阅读某一具体章节的时候,请读者主动把语义范围缩小为当前讲述的话题点上。

建议:译者希望本书的读者中,那些有一定水平或有能力直接进行英文阅读的读者还是要读一读阅读英文原文,顺便也请这部分读者在对比阅读的同时本书提高翻译质量。

待续

贡献力量

译者欢迎各种形式的贡献和指导。

待续

版权说明

Nightly 版本放在国内 Gitee 上,采用 MulanPSL-2.0;stable 版放在 github 上,采用 MIT。