一些有趣的软件趣闻

Hillel Wayne — Computer Things 新闻

摘要

一系列有趣且鲜为人知的软件趣闻,包括在康威生命游戏中实现的俄罗斯方块、Vim 的图灵完备性以及反斜杠字符的历史。

<p>今年的最后一期通讯!</p> <p>首先是一些关于《Logic for Programmers》的消息。感谢所有向 <a href="https://buttondown.com/hillelwayne/archive/get-logic-for-programmers-50-off-support-chicago" target="_blank">feedchicago 慈善活动</a> 捐款的人!我们总共为芝加哥食品银行筹集了 2250 美元。凭证见<a href="https://link.fndrsp.net/CL0/https:%2F%2Fgiving.chicagosfoodbank.org%2Freceipts%2FBMDDDCAF%3FreceiptType=oneTime%26emailLog=YS699MZW/2/0100019ae2b7eb92-7c917ad0-c94e-4fe2-8ee1-1b9dc521c607-000000/brmxoTOvoJN94I9nQH26s7fRrmyFDj_Jir1FySSoxCw=434" target="_blank">此处</a>。</p> <p>如果你错过了在慈善活动中以极低价格购买《Logic for Programmers》,你仍然可以使用节日优惠码 <a href="https://leanpub.com/logic/c/hannukah-presents" target="_blank">hannukah-presents</a> 享受 10 美元折扣。此优惠从即日起持续到年底。之后,我会将价格从 25 美元提高到 30 美元。</p> <p>不管怎样,为了让这封信不只是记录一下,我们以轻松的内容结尾吧。我是那种喜欢听各种‘趣闻’的人。所以这里有一些我多年来积累的关于软件的随机趣闻:</p> <ul> <li>2017 年,一个由八名以上程序员组成的团队成功在<a href="https://en.wikipedia.org/wiki/Conway's_Game_of_Life" target="_blank">康威生命游戏模拟</a>中<a href="https://codegolf.stackexchange.com/questions/11880/build-a-working-game-of-tetris-in-conways-game-of-life" target="_blank">实现了俄罗斯方块</a>。该生命游戏的网格面积达 30 万亿像素,并且作为项目的一部分,实现了一个完整的可编程 CPU。</li> </ul> <ul> <li>计算机系统必须处理闰秒,以保持 UTC(一天为 86,400 秒)与 UT1(一天恰好是地球完整自转一次)同步。相关负责人员最近通过了一项决议,计划在 2035 年前废除闰秒,让 UTC 和 UT1 逐渐不同步。</li> </ul> <ul> <li><a href="https://buttondown.com/hillelwayne/archive/vim-is-turing-complete/" target="_blank">Vim 是图灵完备的</a>。</li> </ul> <div class="subscribe-form"></div> <ul> <li>反斜杠字符在 1930 年之前的书写中基本不存在,并且<a href="http://dump.deadcodersociety.org/ascii.pdf" target="_blank">只被添加到 ASCII</a> 中,以便数学家(以及 ALGOL 使用者)可以编写 <code>/\</code> 和 <code>\/</code>。它在计算中的广泛使用完全源于它是键盘上一个无用的键。</li> </ul> <ul> <li><a href="https://en.wikipedia.org/wiki/Galactic_algorithm" target="_blank">银河算法</a> 是理论上比我们使用的算法更快,但只在使其不切实际的规模下才有效的算法。例如,NxN 矩阵乘法通常的复杂度是 <a href="https://en.wikipedia.org/wiki/Strassen_algorithm" target="_blank">O(N^2.81)</a>。<a href="https://www-auth.cs.wisc.edu/lists/theory-reading/2009-December/pdfmN6UVeUiJ3.pdf" target="_blank">Coppersmith Winograd</a> 算法的复杂度是 O(N^2.38),但过于复杂,以至于即使对于 <a href="https://mathoverflow.net/questions/1743/what-is-the-constant-of-the-coppersmith-winograd-matrix-multiplication-algorithm" target="_blank">10,000 x 10,000 的矩阵</a> 也慢得多。不过,它在推进我们对算法的数学理解方面仍然很有意义!</li> </ul> <ul> <li>Cloudflare 生成随机数的方式之一是<a href="https://www.cloudflare.com/learning/ssl/lava-lamp-encryption/" target="_blank">拍摄 100 盏熔岩灯的照片</a>。</li> </ul> <ul> <li>归并排序比冒泡排序更古老。快速排序比冒泡排序稍晚,但比‘冒泡排序’这个术语更古老。顺便一提,冒泡排序<a href="https://buttondown.com/hillelwayne/archive/when-would-you-ever-want-bubblesort/" target="_blank">确实有一些用途</a>。</li> </ul> <ul> <li>说到归并排序,2006 年之前的大多数归并排序实现<a href="https://research.google/blog/extra-extra-read-all-about-it-nearly-all-binary-searches-and-mergesorts-are-broken/" target="_blank">都是有缺陷的</a>。基本上问题在于,‘找到列表中间位置’这一步骤在列表足够大时*可能*会溢出。对于使用 32 位有符号整数的 C 语言来说,‘足够大’意味着超过十亿个元素,这就是为什么这个错误长期未被发现。</li> </ul> <ul> <li><a href="https://nibblestew.blogspot.com/2023/09/circles-do-not-exist.html" target="_blank">PDF 的绘图模型无法渲染完美的圆形</a>。</li> </ul> <ul> <li>人们嘲笑插 USB 需要翻转三次才能插进电脑,但实际上应该有一个指导:根据标准,USB 应该*标识面朝上*插入。当然,这假设接口也是正面朝上,这就是为什么 USB-C 只是对称的。</li> </ul> <ul> <li>我本想写一个趣闻,说所有电子表格软件都把 1900 年当作闰年,这是 Lotus 1-2-3 的一个 bug,并且大家都保持了向后兼容性。但我检查后发现 Google Sheets 认为它是平年。所以我想这个趣闻就是事情已经变了!</li> </ul> <ul> <li>说到电子表格错误,2020 年<a href="https://www.engadget.com/scientists-rename-genes-due-to-excel-151748790.html" target="_blank">生物学家更改了 27 个基因的官方命名</a>,因为 Excel 总是将它们的名称解析为日期。例如,MARCH1 被重命名为 MARCHF1,以避免被解析为‘3 月 1 日’。微软在三年后推出了修复程序……</li> </ul> <ul> <li>可以用仅包含 <code>()+[]!</code> 的字符编码任何有效的 JavaScript 程序。这种编码被称为 <a href="https://en.wikipedia.org/wiki/JSFuck" target="_blank">JSFuck</a>,曾用于在 <a href="https://arstechnica.com/information-technology/2016/02/ebay-has-no-plans-to-fix-severe-bug-that-allows-malware-distribution/" target="_blank">Ebay</a> 上分发恶意软件。</li> </ul> <p>祝大家节日快乐,2026 年再见!</p> <div class="footnote"> <hr/> <ol> <li id="fn:status"> <p>当前状态更新:我终于完成了逐行结构编辑,结果发现了许多改进点,所以我正在进行比预期更多的重写。 <a class="footnote-backref" href="#fnref:status" title="跳回正文中的脚注 1">↩</a></p> </li> </ol> </div>
查看原文
查看缓存全文

缓存时间: 2026/05/16 03:40

# 一些有趣的软件趣闻 来源:https://buttondown.com/hillelwayne/archive/some-fun-software-facts 本年度最后一期通讯! 首先播报一下 *《程序员逻辑》* 的消息。感谢所有为芝加哥食物银行慈善募捐活动(https://buttondown.com/hillelwayne/archive/get-logic-for-programmers-50-off-support-chicago)捐款的朋友!我们一共为芝加哥食物银行筹集了 2250 美元。凭证在此(https://link.fndrsp.net/CL0/https:%2F%2Fgiving.chicagosfoodbank.org%2Freceipts%2FBMDDDCAF%3FreceiptType=oneTime%26emailLog=YS699MZW/2/0100019ae2b7eb92-7c917ad0-c94e-4fe2-8ee1-1b9dc521c607-000000/brmxoTOvoJN94I9nQH26s7fRrmyFDj_Jir1FySSoxCw=434)。 如果你错过了慈善活动中 *《程序员逻辑》* 的超低价,现在仍可使用假日优惠码 hannukah-presents(https://leanpub.com/logic/c/hannukah-presents)享受 10 美元优惠。优惠从即日起持续到今年年底。之后我会将价格从 25 美元提高到 30 美元。 好了,为了让这期通讯不只是记账,我们轻松收尾吧。我是那种喜欢听各种"冷知识"的人。这里分享一些多年来我收集的关于软件的冷知识: - 2017 年,一个由 8 名程序员组成的团队成功在康威生命游戏(https://en.wikipedia.org/wiki/Conway's_Game_of_Life)中实现了俄罗斯方块(https://codegolf.stackexchange.com/questions/11880/build-a-working-game-of-tetris-in-conways-game-of-life)。该生命游戏网格面积达 30 万亿像素,并且作为项目的一部分,实现了一颗可编程的完整 CPU。 - 计算机系统必须处理闰秒,以便 UTC(一天 86,400 秒)与 UT1(一天恰好是地球自转一圈)保持同步。负责部门最近通过了一项决议,计划在 2035 年前取消闰秒,让 UTC 和 UT1 逐渐漂移不同步。 - Vim 是图灵完备的(https://buttondown.com/hillelwayne/archive/vim-is-turing-complete/)。 - 反斜杠字符在 1930 年以前几乎不存在于书写中,它之所以被加入 ASCII(http://dump.deadcodersociety.org/ascii.pdf),完全是为了让数学家(以及 ALGOL 程序员)能写出 `/\\` 和 `\\/`。它在计算中的广泛使用纯属因为在键盘上是个无用的键。 - 银河算法(https://en.wikipedia.org/wiki/Galactic_algorithm)指的是理论上比我们常用算法更快,但只在规模大到不切实际时才适用的算法。例如,N×N 矩阵乘法通常(https://en.wikipedia.org/wiki/Strassen_algorithm)是 O(N^2.81)。Coppersmith-Winograd 算法(https://www-auth.cs.wisc.edu/lists/theory-reading/2009-December/pdfmN6UVeUiJ3.pdf)是 O(N^2.38),但极其复杂,即使对于 10,000×10,000 的矩阵(https://mathoverflow.net/questions/1743/what-is-the-constant-of-the-coppersmith-winograd-matrix-multiplication-algorithm)也慢得多。不过它对于推动算法的数学理解仍有意义! - Cloudflare 生成随机数的方法之一是——对着 100 盏熔岩灯拍照(https://www.cloudflare.com/learning/ssl/lava-lamp-encryption/)。 - 归并排序比冒泡排序更古老。快速排序比冒泡排序稍年轻,但比"冒泡排序"这个术语更古老。顺便一提,冒泡排序确实有些用途(https://buttondown.com/hillelwayne/archive/when-would-you-ever-want-bubblesort/)。 - 说到归并排序,2006 年之前的大多数归并排序实现都是有 bug 的(https://research.google/blog/extra-extra-read-all-about-it-nearly-all-binary-searches-and-mergesorts-are-broken/)。根本问题在于"寻找列表中点"这一步在列表足够大时可能会溢出。对于使用 32 位有符号整数的 C 语言,这个"足够大"意味着超过十亿个元素,这也是这个 bug 长期未被发现的原因。 - PDF 的绘图模型无法渲染完美的圆形(https://nibblestew.blogspot.com/2023/09/circles-do-not-exist.html)。 - 人们总嘲笑 USB 需要翻转三次才能插进电脑,但按理说是有指引的:根据标准,USB 应该标志面朝上插入。当然,这还得假设端口也是正面的,所以 USB-C 直接对称了。 - 本来我想写一个冷知识,说所有电子表格软件都把 1900 年当作闰年,这是 Lotus 1-2-3 的一个 bug,所有后续软件都保持了向后兼容。但是我查了一下谷歌表格,它认为 1900 年是平年。所以有趣的事实或许是:时代变了! - 说到电子表格的错误,2020 年生物学家正式修改了 27 个基因的命名(https://www.engadget.com/scientists-rename-genes-due-to-excel-151748790.html),因为 Excel 一直把它们的名字解析成日期。例如 MARCH1 被重命名为 MARCHF1,以免被解析为"3月1日"。微软在三年后推出了修复补丁。 - 可以用仅包含字符 `() + []!` 的字符串编码任何有效的 JavaScript 程序。这种编码被称为 JSFuck(https://en.wikipedia.org/wiki/JSFuck),曾用于在 eBay 上分发恶意软件(https://arstechnica.com/information-technology/2016/02/ebay-has-no-plans-to-fix-severe-bug-that-allows-malware-distribution/)。 祝大家节日快乐,我们 2026 年再见! *如果你是在网页上阅读本文,可以在此订阅(https://buttondown.com/hillelwayne)。每周更新一次。我的主站是这里(https://www.hillelwayne.com/)。* *我的新书《程序员逻辑》现已开放早期访问!在此获取(https://leanpub.com/logic/)。*

相似文章

vi 家族

Hacker News Top

本文对 vi 系列文本编辑器及其衍生克隆版本进行了历史回顾和分类整理,涵盖了从 1977 年的原始版本到 Vim 等现代衍生版本。

告别一行APL代码

Hacker News Top

作者反思了在其体素游戏中使用的一行APL代码,用于检查暴露的区块面,并解释了其灵感来源于康威生命游戏及其性能表现。

Soul Player C64 – 在 1 MHz Commodore 64 上运行的真正 Transformer

Hacker News Top

# gizmo64k/soulplayer-c64 来源:[https://github.com/gizmo64k/soulplayer-c64](https://github.com/gizmo64k/soulplayer-c64) # Soul Player C64 **一款在 1 MHz Commodore 64 上运行的真实 Transformer。** ``` .-------. | O O | | V | |..|---|..| # SOUL PLAYER C64 2.5万个参数。 2 层网络。 真实的 Transformer。 从软盘加载运行。 你> 嗨 C64> 你好!这声音不错。真神奇! ``` 一个 2 层仅解码器(Decoder-Only)Transformer —— 与 ChatGPT、Claude 和 Gemini 背后的架构相同 —— 采用手写 6502/

MuZero:软件1.0的终结者?

ML at Berkeley

本文探讨了谷歌 DeepMind 的 MuZero 算法作为“软件2.0”的典型案例,认为尽管深度学习在性能上超越了传统软件,但它仍然依赖于博弈树搜索等经典计算技术。

Acorn Archimedes 上的 PipeDream

Hacker News Top

本文探讨了 Acorn Archimedes 及其 RISC OS 的历史,以 PipeDream 生产力套件为例,聚焦于这种偏离标准 WIMP 界面的早期计算创新。