《Logic for Programmers》食物募捐活动只剩一周

Hillel Wayne — Computer Things 事件

摘要

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&amp;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 — Computer Things

Hillel Wayne 宣布其著作《Logic for Programmers》的 0.15 候选版本,并重点介绍了一场以 Strudel 和 CLAVIER-36 为特色的现场编程聚会,用于音乐编程。

Logic for Programmers 额外内容

Hillel Wayne — Computer Things

Hillel Wayne 为其著作《Logic for Programmers》发布补充章节,涵盖并发进程、一阶逻辑、Liskov 历史规则及排序等主题。

Logic for Programmers 已完成

Hillel Wayne — Computer Things

Hillel Wayne 宣布其著作 'Logic for Programmers' 完成并发布 1.0 版本,这是一本关于在软件开发中使用逻辑的指南,现已提供印刷版,早期电子书购买者可免费更新。