IOCCC回归:人类C语言大师代码混淆仍胜AI
在中断四年之后,国际混淆C语言代码大赛(IOCCC)于今年 triumphant 强势回归,以史无前例的23个获奖作品,创下历史新高。这一创纪录的获奖数量证明了提交作品的超高品质,展示了全球程序员对C语言非凡的掌握。其中引人注目的获奖作品包括一个巧妙利用不可见Unicode字符打印完整三文鱼食谱的程序,以及另一个令人难忘地“Rickroll”了评委的程序,它通过精心重现Atari 2600的8位音乐和图形端口实现了这一效果。
评委,包括大赛创始人Landon Curt Noll,透露他们曾尝试使用大型语言模型(LLMs)来分析提交的代码。然而,这些AI模型的结果好坏参半,最终并未用于最终的评审过程。评委们强调,人类程序员创作代码的能力远远超出了当前人工智能的水平。一个引人注目的例子是其中一位获奖者开发的750字节LLM推理引擎,Noll认为当前的AI模型无法复制这一壮举。所有获奖作品的源代码,包括臭名昭著的“Rickroll”,现在都已在专门的GitHub仓库公开,IOCCC计划于2025年12月再次回归。正如Noll所观察到的:“每次比赛都会出现我以前不知道可以用C语言实现的新东西,人们展示了他们能做到!”
今年的赛事还恢复了一项有40年历史的传统:现场公布获奖者。这可以追溯到20世纪80年代,当时获奖者通常在Usenix会议的一个特别会议上公布,通常紧随最新BSD版本的发布演示之后。Noll幽默地回忆起那些早期日子,他通过“在透明胶片上打印东西,并使用投影仪”来展示结果,这与今天的数字投影形成了鲜明对比。此后,大赛组织者对基础设施进行了现代化改造,现在提供视频演示编译后的获奖作品通常奇特而精彩的输出。Noll在David McInnis的帮助下,于2025年策划了一场精心制作的颁奖典礼,其中包括多个视频和音频源以及原创音乐,确保每个获奖作品都得到了应有的关注。
Noll认为,延长的四年中断无意中为参赛者提供了更多时间来完善他们的作品,从而导致了高质量作品数量的激增。虽然过去的比赛通常颁发12到15个奖项,但今年23个获奖作品超越了所有之前的记录。大量优秀作品意味着没有单一的“最佳表演奖”或“大奖”得主,因为太多作品被认为值得最高荣誉。
关于AI的影响,两届IOCCC获奖者兼资深评委Leonid A. Broukhis指出,中断使他们能够测试LLMs进行代码分析。虽然一些模型可以根据整体结构或数学逻辑模糊地推断某些作品的用途,但其他模型则“完全不知所措”。Noll明确表示,LLMs未用于评审,他也不建议将其用于创作未来的参赛作品。他警告说,为这种细致入微的比赛生成的AI代码很可能是“垃圾”,常常无法编译,或者外观像C语言但功能不符。Noll回顾他40年的评审经验,赞扬人类程序员是“C语言大师”,能够付出巨大的努力和技能,将复杂的想法浓缩成微小、混淆的代码块。虽然LLMs最终可能对未来的参赛者有所帮助——也许是为了测试他们的代码是否真的让AI无法理解——但Noll强调,人的因素仍然至关重要。
由程序员Vince Weaver提交的臭名昭著的Rickroll作品是一个亮点。评委们描述了他们解密代码时困惑的过程,其中包括大量的常量声明、一个分叉的子进程和战略性延迟,然后才意识到他们已经成为了这个有数十年历史的互联网恶作剧的受害者。该程序是Atari 2600版本的一个粗略移植,配有8位音乐和图形。另一个令人惊叹的作品来自传奇的混淆C语言程序员Yusuke Endoh,他的程序显示了旋转物体的精美ASCII动画,展示了旋转刚体的真实物理特性。Endoh甚至巧妙地将一个陀螺的图像嵌入到他高度混淆的源代码的空白处。Adrian Cable除了他的LLM推理引擎外,还提交了第二个获奖作品:一个看似无害的15行程序。这段代码,包含一个误导性的变量声明(unsigned int *salmon = U" is very yummy";
),神奇地打印出了一份完整的烤三文鱼食谱。其中的诀窍在于隐藏在标准文本编辑器中的不可见Unicode字符,它们形成了额外的代码行,以及一个令人困惑、从未执行的诱饵for
循环。这份巧妙的提交作品赢得了大赛的“浑水奖”。
展望未来,这个特殊的GitHub仓库现在托管着自1984年以来所有IOCCC的源代码,使得混淆C语言的历史易于访问。未来的计划包括展示过去获奖者的短视频、更新参赛作品打包工具,以及改进大赛的服务器基础设施。下一届IOCCC的注册期预计将于2025年12月开放,组织者计划根据他们最近的评审经验修订和完善比赛规则。目前,评委们自2020年12月以来已为该项目投入了数千小时,他们正在享受应得的休息,期待着放松并享受参赛者惊人作品的成果。