翻译《重新审视 <GOTO 语句被认为有害>》的感想

  1. 前言
  2. 对原文的感想
    1. 介绍与背景
    2. Dijkstra 的信与评论。
    3. 对各种语言的分析与总结
  3. 翻译工作的感想

goto
Credit: xkcd

前言

感谢 David R. Tribble 写的原文,有了这篇原文我才能翻译出译文。请勿随意转载。

对原文的感想

我认为正文分了四个部分,分别是:

  1. 介绍和背景。
  2. Dijkstra 的信与评注。
  3. 对各种结构化语言的分析与最后的总结。

介绍与背景

介绍与背景中,作者阐明了那个时代的计算机科学与编程工作的状况,让我们在历史背景下的情况下讨论这封信。此处原文的总结已经足够丰富,所以不多说了。

Dijkstra 的信与评论。

Dijkstra 论证 GOTO 语句有害的逻辑如下:

  1. 因为程序员需要掌控程序流程,所以需要掌握程序流程的进度。
  2. 程序语言里有了结构化语句也还可以用各种方法表示程序流程的进度。
  3. 一旦滥用 GOTO ,有可能什么方法都没法表示流程的进度了。

我能想到的 GOTO 的滥用有:

  1. 用 goto 从一个循环跑进另一个循环。
  2. 直接离开子过程(C 语言里的 longjump)。

这些滥用在 Dijkstra 的文中都被认为会破坏运行状态,导致流程进度不能被轻易地表示。

流程进度是这封信中的一个关键词,意思其实类似于语言的控制流或者执行过程。Dijkstra 认为程序员在编写程序的时候要对程序的各种可能执行过程保证了如于心才能少出问题,而滥用 goto 会让程序员难以分析执行过程。

Dijkstra 在文中也说将 goto 用于异常处理是合理的,而这篇文章还补充说明了用 goto 退出多层循环的合理性。如果没有合理的设施(如 Java 中用label标记的循环,try-catch 语句,RAII 等),有些情况下使用 goto 成为了提高程序表达能力的唯一方式。毕竟,这些设施的底层也是用机器码的 jump 指令实现的。

对各种语言的分析与总结

的确,我们不应只是死板遵守某个不了解的规定而应当清楚地了解为什么和怎么做。而 David R. Tribble 的评论与补充让我们能够一瞥编程语言的历史背景和很多相关知识。

后面对语言结构的分析让我对程序语言的发展与结构有了更深的了解。作者讨论了很多语言的结构以及很多常用的编程时的使用 goto 的情况,对我来说可以算是大开眼界吧。

文章的最后部分的 LR parser 的例子给我带来了另一个启发:在模拟一个有限自动机的时候,使用 goto 来做状态转移应该也是一种描述状态转移的方式。

翻译工作的感想

最令我惊奇的是使用各种搜索引擎之后发现 Dijkstra 这篇经典的论文在中文世界只有两篇翻译,而且翻译的也不太好。这让我萌生了翻译 David R. Tribble 这篇文章的念头。在疫情肆虐大学生被迫待机期间,我终于有时间将翻译的愿望变为现实。

Dijkstra的正文比较晦涩且学术气浓重。我花了5天苦苦翻译加润色,最后得到了12000字长的中文文本。这么长的文本,看来也只有我这种放假的学生有时间无偿进行翻译。最终的成果我也只做到了正确的(自以为)传达原意而不能完全做到通畅,希望之后还能多次改进这个翻译。

翻译的工作第二难的是理解作者意思,第一难的是用恰当的母语表达出原文的意思。这次,我的遣词用句受到谷歌翻译的很大帮助,因为我发现谷歌翻译已经可以用改换句式等方法让翻译看上去更通畅。但有时谷歌翻译并不能理解文意从而翻译出通顺但意思完全错误的句子。换句话来说,谷歌翻译的唬人能力已经很出色了。

这次翻译过程中,我发现英文的伴随状语+各种从句挺难翻译的。一开始我用的方法是尽力把全部的意思塞进一句中文,后来发现这样很影响阅读。后来我采用了消除意义相同的定语+多分几个句子的方法。翻译质量我给自己打三颗星吧,译文可信,损失了一点点达但远远达不到雅。

此外,我在这次翻译中更加了解了“用爱发电”、“拖延症的解决在于立刻开始”等言论。我的人生中有了这件作品,应该也死而无憾了。


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以邮件至 [email protected]

Title:翻译《重新审视 <GOTO 语句被认为有害>》的感想

Count:1.2k

Author:emon100

Created At:2020-02-10, 23:17:00

Updated At:2020-08-13, 04:39:42

Url:https://blog.emon100.me/2020/02/10/%E7%BF%BB%E8%AF%91%E3%80%8A%E9%87%8D%E6%96%B0%E5%AE%A1%E8%A7%86-GOTO-%E8%AF%AD%E5%8F%A5%E8%A2%AB%E8%AE%A4%E4%B8%BA%E6%9C%89%E5%AE%B3-%E3%80%8B%E7%9A%84%E6%84%9F%E6%83%B3/

Copyright: 'Attribution-non-commercial-shared in the same way 4.0' Reprint please keep the original link and author.