“混淆 C 代码”竞赛再度回归

国际模糊 C 代码大赛再次回归,旨在让 C++ 代码比以往更难阅读。 enter image description here 经过四年的中断,“国际混淆C代码大赛”将于2025年辉煌回归。

IOCCC 的目标:

在规则范围内编写最晦涩/最模糊的 C 程序。 以讽刺的方式展示编程风格的重要性。 使用不寻常的代码来强调 C 编译器。 来说明一下 C 语言的一些微妙之处。 和 C 一起玩得开心! 随着乐趣再次升温,评委将从 1 月 31 日开始接受精彩的新“模糊 C”程序(他们的窗口将于 4 月 1 日——愚人节关闭)。但他们也在过去四年中大量更新了比赛的网站——因此,即使是过去 40 年存档的获奖作品现在也具有“合理的现代 Unix/Linux 系统能够编译甚至运行它们的能力”。

更新后的常见问题解答中承认,该网站不再让代码保持模糊,而是“转向更具教育意义的主题”。 也许组织者终于认识到了自己作为文化偶像的地位——他们持续不断地用令人难以置信的复杂性和创造力的例子激励年轻的程序员,同时也见证他们自己的编程历史。

尽管如此,本着真正的比赛精神,有时他们似乎在边走边创造一些东西。 当巧克力遇上隐写术 这种玩笑似乎无处不在——最终具有感染力。官方指南指出:“多年来,不止一位 IOCCC 评委通过提供一些优质巧克力来贿赂另一位 IOCCC 评委,让他们投票支持获胜作品。”因此,2012 年的一项参赛作品通过使用一些美味巧克力的照片展示了其隐写术应用——将源代码隐藏在图像中。 enter image description here 官方规则的第 26 条规定,参赛者只能使用字母表中的全部 26 个字母,并且只使用一次。同时,比赛的官方常见问题解答为诸如为什么他们使用 Mastodon等问题提供了俏皮的答案。“IOCCC 不再使用 Twitter,或者现在那些似乎冲动控制能力较差的人(据称)对他们平台的称呼。IOCCC 更喜欢居住在fediverse中。”

比赛是如何开始的? “那是一个漆黑而暴风雨的夜晚……”

争当最差 故事背景始于 1984 年 3 月 23 日,当时 23 岁的 Landon Curt Noll 正在与美国国家半导体公司的 Larry Bassel 合作,将UNIX移植到公司的微控制器上。Bassel 当时正在努力解决 Bourne shell 中的一个错误,而 Noll 则在研究早期 BSD 中的 finger 命令的一个版本。不久,他们宣布举办一场比赛“与周围最差的 C 黑客一较高下”,第一批参赛者开始蜂拥而至。

诺尔在常见问题解答中写道:“当我们开始接收来自美国以外地区的消息时,拉里和我决定在名称中加入国际一词。” enter image description here 甚至在第一年,他们就看到了编程界一些大人物的参赛作品,包括贝尔实验室程序员David Korn、Korn shell 的创建者(1987 年)和Perl 编程语言的创建者Larry Wall(1986 年、1987 年)。随着比赛的进行,它设定了一个很高的标准。

在过去的 40 年里,评委们已经选出了 197 位不同的获奖者。其中几位获奖者在维基百科上有自己的条目:

谷歌 DeepMind 研究员Nicholas Carlini荣获 2020 年“最佳展示:滥用 libc”奖。 1989 年,“最佳展示奖”颁给了Ora Lassila,他因在语义网和 RDF 规范方面的早期工作而闻名。Lassila 现在是 W3C 顾问委员会的长期成员和 AWS 的首席图形技术专家,他因编写了压缩 Lisp 解释器而于 1989 年获奖。 其他获奖者也是 C 语言社区的杰出人物,包括D 编程语言和 Zortech C++ 编译器的创建者Walter Bright以及Tiny C 编译器的创建者Fabrice Bellard 。 还有一些著名的计算机科学学者,包括 David Applegate、 Lennart Augustsson、 Daniel J. Bernstein、 Vern Paxson、 Diomidis Spinellis和 John Tromp。

该指导方针甚至包括一条专门针对密歇根大学名誉教授彼得·霍尼曼的特殊规定:

“过去,有些人曾试图通过添加著名互联网人物(如彼得·霍尼曼)的评论来混淆自己的身份。评委们看穿了这个伎俩,因此认为任何声称来自霍尼曼的混淆来源或数据文件都不是霍尼曼的。”

这条信息似乎意味着,经过精心混淆的 C 代码也应该是匿名的混淆 C 代码 — — 至少在评审结束之前。这导致了1990 年的一项获奖作品出现了有趣而惊人的巧合。评委的评论认为,ANSI C 标准现在包括三个字符的“三字母”,这“使程序变得难以阅读”。因此,他们为程序员Larry Jones设立了一个特别奖项,表彰他编写了 46 行起伏不平的 C 代码,其中充斥着数十个令人厌恶的三个字符(大部分是问号)。

enter image description here 在获得“ANSI 委员会对 C 语言最严重滥用奖”后,琼斯向评委们提出了一个简单的问题:“你们知道我是委员会成员吗?”

评委向他保证这只是巧合,琼斯补充说,他“非常感激”这个奖项。尽管他“真的希望能得到‘最接近线路噪音’这样的奖项。”

但尽管充满了欢乐,模糊 C 语言竞赛仍然几乎意外地成为每一代程序员的年鉴,将他们聚集在一起,展示我们自己的集体历史。同样做出贡献的还有Mary Ann Horton,她是一位 BSD 贡献者,被描述为“Usenet 和互联网先驱”,也是跨性别权利的早期活动家。“发明电子邮件附件是一回事,”Horton 在2022 年的传记中说道。“在从男性转变为女性的过程中做到这一点,并为跨性别者在工作场所的权利铺平道路,则是另一回事。”

乔治·西克曼 (George Sicherman)也在其中,他因在 1978 年创建了一种替代的骰子编号方案而闻名,该方案仍产生与普通骰子相同的概率分布。 enter image description here

历代以来 这些都是该活动悠久而传奇的历史的一部分。指南警告说:“我们建议您避免尝试‘最小的自复制’源”,因为有人已经凭借 0 字节大小的条目获胜。

但其他里程碑也同样古怪且难以预测:

程序员托马斯·科维尔将比赛第一位获胜者的代码纹在了自己的手臂上。 1993 年,比尔·盖茨在一次知识竞赛中向参赛者征询“最难读、最有创意、最怪异但最能运行的 C 语言程序”的名称,其中一位参赛者回答说“Windows”。那一年的竞赛新增了纪念比尔·盖茨奖。 甚至新网站的徽标也链接到2011 年 IOCCC 参赛作品,这是一个光线追踪程序,其默认输出是... 该网站的徽标。(它赢得了 2011 年“最闪亮”奖。) 感觉任何事情都有可能发生,也许是因为评委们真的是在边做边想。“当提交的作品数量减少到 25 件左右时,我们就开始确定奖项类别,”官方指南解释道。因此,每年最终奖项的名称“将根据我们收到的作品类型而有所不同。”

有一些专门针对 C 语言的奖项类别,例如“对 C 预处理器的最严重滥用”和“最不可能成功编译”。2020年的参赛作品因仔细地将其代码调整到右边距而获得了“最具误导性的缩进”奖。

但随着程序变得越来越疯狂,类别名称也变得越来越疯狂:

2001 年的一款作品获得了“最佳滥用用户行为奖”。(其存储库页面警告称,该程序“会干扰您的鼠标”,并且还会“导致难以退出该程序”。) 2006 年,一份参赛作品因打印出动画甜甜圈而赢得了新设立的“荷马最喜爱奖”。 2012 年的参赛作品因根据康威的“生命游戏”制作了一款街机风格的视频游戏而获得了“失去生命的最佳方式”的荣誉。 2015 年,程序员克里斯托弗·米尔斯 (Christopher Mills) 因重新制作手机游戏《Flappy Bird》而荣获“For the Birds!”奖,该游戏提供了自定义选项,可以改变小鸟世界中的物理现象。 展望未来 是什么让这一切得以继续下去?评委们从哪里找到激情,连续四十年不断研究一堆模糊的 C 代码?这一切疯狂的目的何在?

在网上搜索一段时间,你会在 Landon Curt Noll 的个人网站上找到线索。网站上有一些他担任 SGI 密码学家/数论学家时的旧照片,以及一张 Noll 担任加利福尼亚州桑尼维尔市议员时的官方照片。

但它也让我们看到了他对算法艺术的独特欣赏。“我认为数学既是一门艺术,也是一门科学,”诺尔写道。

“有些人在打电话时涂鸦,会画‘兔子’。我喜欢涂鸦方程式和图表,通常使用 Mathematica 工具。”

但比赛的回归几乎就像是失散多年的亲戚的重聚——一种延续到未来的极客另类历史。

2025 年新一批获奖者名单将以一种独特的、令人惊奇的方式公布 — — 由评委通过 git push 发布新获奖者名录,并在新的 @IOCCC Fostodon 源上发布公告。

评论