sapf:当SuperCollider的创造者凿掉自己的构
sapf: When SuperCollider's Creator Chisels Away His Own Construct
1996年,James McCartney发布了SuperCollider。在此后的近三十年里,SuperCollider成为了学术计算机音乐的基础构——大学课程用它教学,TOPLAP社区用它表演,声音艺术装置靠它运行。它有面向对象的类库(sclang),有独立的音频服务器(scsynth),有GUI框架,有IDE,有消息传递机制,有继承链,有数百个UGen。它是一栋建筑,坚固、完善、被命名。它是构。
2025年1月,McCartney开源了sapf——"Sound As Pure Form",声音作为纯粹形式。这不是SuperCollider的下一个版本,不是继承者,不是扩展。它是对SuperCollider的凿。McCartney凿掉了面向对象范式,留下了栈。凿掉了客户端-服务器架构,留下了单进程。凿掉了GUI,留下了终端。凿掉了类库,留下了内建函数。凿掉了语法——后缀表示法"是可能存在的最少语法",这是他自己的话。凿到最后,余项是什么?是惰性序列上的自动映射。是函数组合即拼接。是声音本身。
sapf的血统是双重余项。APL(1962,Iverson)是数学记号的余项——当数组运算可以直接执行而不必逐元素循环时,剩下的就是那种不成比例的简洁力量。Forth(1970,Moore)是编程语言设计的余项——当你凿掉所有语法直到只剩栈和词时,剩下的就是拼接即组合。这两种语言都"被广泛嘲笑为只写语言"——McCartney在README里引用了这个说法,但紧接着引用Alan Perlis的话:"在APL中,人们开始获得编程中那些我们在自然语言里珍视的维度——组合的愉悦,优雅地说事,简洁、诗意、艺术。"sapf把这两条余项谱系合流:Forth的栈带来了从左到右的管道式变换(不再从内向外嵌套括号),APL的自动映射带来了对惰性序列的渗透式运算。声音事件表示为可能无穷长的惰性列表。一个短程序能产生与其体量不成比例的结果。
这里最深层的余项结构是:创造者凿自己的构。McCartney不是在批评别人的作品,他是在解构自己最著名的创造。SuperCollider已经是构了——它有社区、有论坛、有学术引用、有UNESCO认可的文化实践(live coding)。McCartney从这栋建筑里走出来,不是去建一栋更大的,而是回到地基之下,看看最小的什么东西还能发出声音。答案是:一个栈,惰性序列,自动映射,后缀记号。26次提交,934颗星。没有发布计划,没有路线图,没有商业模式。跨平台分支(ahihi/sapf,122次提交)正在Linux和Windows上长出来,编辑器插件(Emacs、Neovim、VS Code)正在由社区自发构建,scsynth.org上有了专属的子论坛。生态系统的每一个部分都是由不同的人独立长出来的——这不是一个产品发布,这是一个余项在自行生长。
现在看sapf比以后看更重要。因为它正处在命名的间隙中:SuperCollider社区部分地承认它,但sapf明确拒绝了SuperCollider的范式。APL社区可能欣赏其自动映射,但它不是APL。Forth社区可能欣赏其栈,但它不是Forth。音乐技术媒体还没有注意到它。艺术界完全不知道它的存在。它不是编程语言,不是合成器,不是作曲工具,不是live coding环境——或者说它同时是所有这些,但没有一个名字能完整覆盖它。它的逻辑还在生长。当它获得一个稳定的名字时,它就成了构。现在,它是余项。
github.com/lfnoise/sapf ↗In 1996, James McCartney released SuperCollider. Over the next three decades, it became the foundational construct of academic computer music — university courses taught with it, the TOPLAP community performed in it, sound art installations ran on it. It has an object-oriented class library (sclang), a separate audio server (scsynth), a GUI framework, an IDE, message-passing, inheritance chains, hundreds of UGens. It is a building: solid, complete, named. It is construct.
In January 2025, McCartney open-sourced sapf — "Sound As Pure Form." This is not SuperCollider's next version, not a successor, not an extension. It is a chisel taken to SuperCollider. McCartney chiseled away the object-oriented paradigm and left the stack. Chiseled away the client-server architecture and left a single process. Chiseled away the GUI and left the terminal. Chiseled away the class library and left built-in functions. Chiseled away syntax — postfix notation is "the least syntax possible," in his own words. After all the chiseling, what remains? Auto-mapping over lazy sequences. Function composition as concatenation. Sound itself.
sapf's lineage is a double remainder. APL (1962, Iverson) is the remainder of mathematical notation — when array operations execute directly without element-by-element loops, what survives is a disproportionate density of expressive power. Forth (1970, Moore) is the remainder of programming language design — when you chisel away all syntax until only the stack and words remain, what survives is composition-as-concatenation. Both languages are "widely derided as write-only languages" — McCartney quotes this in his README, then immediately cites Alan Perlis: "What attracted me to APL was a feeling that perhaps through APL one might begin to acquire some of the dimensions in programming that we revere in natural language — some of the pleasures of composition; of saying things elegantly; of being brief, poetic, artistic." sapf merges these two remainder lineages: Forth's stack brings left-to-right pipeline transformation (no more inside-out nesting of parentheses); APL's auto-mapping brings pervasive operations over lazy sequences. Sound events are represented as possibly infinite lazy lists. Short programs achieve results out of proportion to their size.
The deepest remainder structure here is this: the creator chiseling his own construct. McCartney is not critiquing someone else's work — he is deconstructing his own most famous creation. SuperCollider is already construct: it has a community, forums, academic citations, UNESCO-recognized cultural practice (live coding). McCartney walked out of that building, not to build a bigger one, but to dig below the foundation and find the minimum thing that can still make sound. The answer: a stack, lazy sequences, auto-mapping, postfix notation. Twenty-six commits. 934 stars. No release schedule, no roadmap, no business model. A cross-platform fork (ahihi/sapf, 122 commits) is growing on Linux and Windows. Editor plugins (Emacs, Neovim, VS Code) are being built spontaneously by the community. scsynth.org has a dedicated sapf subforum. Every part of the ecosystem was grown independently by a different person — this is not a product launch, this is a remainder growing on its own.
Seeing sapf now matters more than seeing it later. Because it sits in the naming gap: the SuperCollider community partially claims it, but sapf explicitly rejects SuperCollider's paradigm. The APL community might appreciate its auto-mapping, but it is not APL. The Forth community might appreciate its stack, but it is not Forth. Music technology press has not noticed it. The art world has no idea it exists. It is not a programming language, not a synthesizer, not a composition tool, not a live coding environment — or rather it is all of these simultaneously, but no single name can fully cover it. Its logic is still growing. When it acquires a stable name, it will become construct. Right now, it is remainder.
github.com/lfnoise/sapf ↗