《Logic for Programmers》食物募捐活动只剩一周
摘要
Hillel Wayne为其书籍《Logic for Programmers》提供折扣,以此推广为Greater Chicago Food Depository举办的募捐活动,并分享了关于结构化并发和goto语句历史的技术笔记。
<p>几周前,我为<a href="https://www.chicagosfoodbank.org/" target="_blank">Greater Chicago Food Depository</a>发起了一项募捐活动:购买<a href="https://leanpub.com/logic/c/feedchicago" target="_blank">《Logic for Programmers》享五折优惠</a>,所有版税将捐给慈善机构。<sup id="fnref:royalties"><a class="footnote-ref" href="#fn:royalties">1</a></sup> 自那以后,我们已经筹集了超过1600美元。你们太棒了!</p>
<p>募捐活动将持续到11月底,所以你们还有一周时间以超低价购买这本书。</p>
<p>连续两期通讯都放广告而不放点干货,我感觉有点过意不去,所以这里分享一个旧项目的预告,我真的很需要抽空继续做这个。文章《<a href="https://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/#what-is-a-goto-statement-anyway" target="_blank">结构化并发笔记</a>》认为,旧语言有一种“旧约式的地狱烈火般的<code>goto</code>”,它可以将控制流发送到任何地方,比如从一个函数体跳到另一个函数体。文章称,这种“野生goto”正是Dijkstra在《<a href="https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf" target="_blank">Go To Statement Considered Harmful</a>》中痛斥的,而现代的goto语句则受限制得多,可以说是“驯服的”,不会再惹怒Dijkstra。</p>
<p>我多次分享过这个关于Dijkstra的历史事实,但最近有两个<a href="https://without.boats/blog/" target="_blank">不同</a>的<a href="https://matklad.github.io/" target="_blank">人</a>告诉我这说不通:Dijkstra使用的是ALGOL-60,而ALGOL-60<em>早就</em>有了驯服的goto。他提出的所有关于<code>goto</code>的问题即使对驯服的goto也成立,没有一个是野生goto独有的。所以……</p>
<p>这让我开始研究哪些语言(如果有的话)曾经有过野生goto。我将其定义为任何允许从外部跳入循环或函数作用域的goto。结果发现,FORTRAN从一开始就只有驯服的goto,BASIC有野生goto,而COBOL则是一种故意设计来吓唬我的胡言乱语语言。我是说,看看这个:</p>
<p><img alt="COBOL的ALTER语句,它重新定义了goto的目标" class="newsletter-image" src="https://assets.buttondown.email/images/e4dfa0fd-fdd5-4fef-b813-4053a183be2f.png?w=960&fit=max"/></p>
<p>COBOL的ALTER语句<em>在运行时改变了<code>goto</code>的目标</em>。</p>
<p>(早期的COBOL只有驯服的goto,但那只是因为技术上如此:COBOL中没有嵌套作用域,因此无法从外部跳入嵌套作用域。)</p>
<p>不管怎样,我需要写出完整的故事(并且更多地吐槽COBOL),但这已经很棒了!提醒一下,<a href="https://leanpub.com/logic/c/feedchicago" target="_blank">募捐活动在这里</a>。让我们把它筹到2000美元。</p>
<div class="footnote">
<hr/>
<ol>
<li id="fn:royalties">
<p>版税是80%,所以如果你已经拥有这本书,直接向GCFD捐款会更划算。<a class="footnote-backref" href="#fnref:royalties" title="跳转回正文中的脚注1">↩</a></p>
</li>
</ol>
</div>
查看缓存全文
缓存时间: 2026/05/16 03:41
# 《程序员逻辑》食品捐赠活动还剩一周
来源:https://buttondown.com/hillelwayne/archive/one-more-week-to-the-logic-for-programmers-food
几周前,我为大芝加哥食品库(Greater Chicago Food Depository,https://www.chicagosfoodbank.org/)发起了一个筹款活动:购买《程序员逻辑》享受五折优惠(https://leanpub.com/logic/c/feedchicago),所有版税将捐给慈善机构¹(https://buttondown.com/hillelwayne/archive/one-more-week-to-the-logic-for-programmers-food#fn:royalties)。截至目前,我们已经筹集了超过1600美元。大家太棒了!
本次活动将持续到11月底,所以您还有一周的时间以非常便宜的价格买到这本书。
对于两次 newsletter 广告都没有附带实质内容,我有点不好意思,所以这里分享一个旧项目的预告,我很想继续推进它。
《结构化并发笔记》(https://vorpus.org/blog/notes-on-structured-concurrency-or-go-statement-considered-harmful/#what-is-a-goto-statement-anyway)指出,旧语言中存在一种“旧约式的、烈火硫磺般的 `goto`”,它可以将控制流发送到任何地方,比如从一个函数的内部跳到另一个函数的内部。文章称,迪克斯特拉(Dijkstra)在《Go To 语句有害论》(https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.pdf)中强烈反对的正是这种“野性 goto”,而现代的 goto 语句则受到更多限制,可以说是“温顺”的,不会引起迪克斯特拉的怒火。
我多次分享过关于迪克斯特拉的这个历史事实,但最近有两个人(一位来自 https://without.boats/blog/,另一位来自 https://matklad.github.io/)告诉我这说不通:迪克斯特拉使用的是 ALGOL-60,它*已经*拥有了温顺的 goto。他提出的所有关于 `goto` 的问题,即使对于温顺的 goto 也成立,没有哪个问题是野性 goto 独有的。所以……
这促使我去研究,到底有哪些语言曾经拥有过野性 goto。我将野性 goto 定义为:能从外部跳入一个循环或函数作用域的 goto。结果发现,FORTRAN 从一开始就只有温顺的 goto,BASIC 有野性 goto,而 COBOL 则是一种蓄意设计来吓唬我的无厘头语言。我是说,看看这个:
COBOL 的 ALTER 语句,它会重定义 goto 的目标
COBOL 的 ALTER 语句可以在运行时*改变 `goto` 的目标*。
(早期 COBOL 有温顺的 goto 但只是技术上的:因为 COBOL 没有嵌套作用域,所以无法从外部跳入嵌套作用域。)
总之,我需要把完整的故事写出来(并且再多抱怨一下 COBOL),但这确实很有意思!提醒一下,筹款活动在这里(https://leanpub.com/logic/c/feedchicago)。让我们把它冲到2000美元吧。
相似文章
面向程序员的逻辑学 v0.15,现场编程
Hillel Wayne 宣布其著作《Logic for Programmers》的 0.15 候选版本,并重点介绍了一场以 Strudel 和 CLAVIER-36 为特色的现场编程聚会,用于音乐编程。
Logic for Programmers 额外内容
Hillel Wayne 为其著作《Logic for Programmers》发布补充章节,涵盖并发进程、一阶逻辑、Liskov 历史规则及排序等主题。
Logic for Programmers 已完成
Hillel Wayne 宣布其著作 'Logic for Programmers' 完成并发布 1.0 版本,这是一本关于在软件开发中使用逻辑的指南,现已提供印刷版,早期电子书购买者可免费更新。
《Logic for Programmers》新版本(以及本通讯的未来)
Hillel Wayne 宣布其著作《Logic for Programmers》推出 0.14 版本,并透露将加入 Antithesis 担任开发者教育家,计划继续运营本通讯,但侧重点有所调整,频率可能降低。
《程序员逻辑》新版发布与下一步计划
Hillel Wayne 宣布其著作《程序员逻辑》发布 v0.13 版本,包含大量重写和新内容,并概述了迈向印刷版的下一步计划。