Whitespace
定义
Whitespace是一种只以空白字符构成语法的深奥编程语言,其指令由空格、制表符与换行三种字符的排列组合表示[2]。除这三种字符之外的任何字符都会被解释器忽略,因此可以当作注释使用[3]。在一段没有附注的Whitespace程序中,源代码在屏幕上是完全不可见的[1]。
它属于指令式的堆栈型语言,运行程序的虚拟机器维护一个堆栈和一个堆,堆栈用于存放与运算数据,堆则充当变量的长期存储区[2]。这种语言具备与控制流、子程序、算术与输入输出相关的完整指令集,是一种图灵完备的语言[4]。
原理
Whitespace把一条指令拆成三个部分:指令修饰参数(Instruction Modification Parameter,IMP)、具体操作以及可选参数。IMP决定这条指令属于哪一类,共有五种取值:空格代表堆栈操作,制表符加空格代表算术运算,制表符加制表符代表堆访问,换行代表流程控制,制表符加换行代表输入输出[5]。堆栈操作包含压入、复制、交换和丢弃等命令,算术运算包含加、减、乘、整数除法与取模,流程控制则借助标签实现跳转与子程序调用[6]。
数值以二进制方式书写:空格表示 0,制表符表示 1,首个字符用于表示正负号,空格为正、制表符为负,整串数字以换行结束[7]。例如空格、制表符、空格、空格、制表符、空格、制表符、制表符、换行这一串字符表示二进制数 1001011,即十进制的 75[7]。标签同样由一串空格与制表符组成并以换行结束,由于只有单一命名空间,所有标签必须互不重复[2]。
程序的执行过程相当于在一个简单抽象机器上运行:指令按顺序读取,遇到算术或堆操作时则弹出堆栈顶端的若干元素参与计算,再把结果压回堆栈[8]。因为指令与数据都由空白字符编码,源码文件必须由专门的处理工具读取,普通文本编辑器难以直接辨认其内容[5]。
发展历程
这一构想并非凭空出现。早在1997年,C++的设计者比雅尼·斯特劳斯特鲁普曾以玩笑方式提出,可以把空白字符用作C++的运算符,为后来的Whitespace提供了思路来源[2]。
2002年,杜伦大学的埃德温·布雷迪与克里斯·莫里斯实际设计了这门语言,两人后来也参与了Kaya与Idris等语言的开发[2]。语言于2003年4月1日公开发布,当天恰逢愚人节,科技新闻站点Slashdot刊出了相关报道,不少读者把它当作玩笑看待,但语言本身是可运行的真实实现[7]。
作者随语言一同提供了以Haskell编写的原型解释器及源代码[2]。0.3版本补充了复制与滑移等堆栈操作,此后出现的 0.4 版本则加入了自定义的堆栈重排指令[5]。此后陆续出现用Python、Java、JavaScript、R等多种语言编写的解释器或编译器实现[9]。
应用
由于解释器会跳过所有非空白字符,Whitespace程序可以被嵌入到其他语言的源代码、普通文本或网页文件的空白处,从而使同一份文件成为多语言混写程序[4]。这种特性使它在隐写方向上有实际用途,可以在看起来无关的文字中隐藏一段可执行代码[1]。
作者提供的示例程序涵盖计算器、阶乘、汉诺塔、随机排列与打印问候语等,用于演示语言的功能范围。在编程谜题与竞赛中,Whitespace也常被用作素材,因为识别并还原隐藏其中的代码本身就是一类挑战[5]。此外,它被用于检验程序语言模型处理与自然语言无关的语法结构的能力[10]。
局限
源码不可见是Whitespace最主要的限制。缺少专门的显示工具时,程序无法用肉眼阅读,调试与排错也因此变得困难[11]。空白字符在传输与显示过程中容易受损,例如某些浏览器会按制表位调整制表符的显示宽度,部分软件还会把制表符替换成数量不等的空格,从而改变程序的语义[7]。
这门语言在工业界没有实际应用,被归类为由好奇心驱动的实验性项目,不用于生产环境中的软件开发工具链。它的抽象机器只提供读取与写出字符的基本接口,不包含与操作系统交互的系统调用能力[12]。此外,不同实现在输入解析、越界索引等细节上并不完全一致,同一段程序在不同解释器下的行为可能存在差异。
参见
参考资料
- 维基百科,自由的百科全书 - Whitespace[编辑] [引用日期2026-10-14]
- Whitespace (programming language) [引用日期2026-10-14]
- Whitespace [引用日期2026-10-14]
- Whitespace (programming language) [引用日期2026-10-14]
- Whitespace [引用日期2026-10-14]
- kosei28-javascript [引用日期2026-10-14]
- Whitespace (programming language) - Reading on Wikiwand [引用日期2026-10-14]
- arxiv.org 上的网页 [引用日期2026-10-14]
- whitespace [引用日期2026-10-14]
- arxiv.org 上的网页 [引用日期2026-10-14]
- ⚪ Whitespace — The Language You Can’t See - DEV Community [引用日期2026-10-14]
- view-source [引用日期2026-10-14]