看了那篇讲 Unix spell 怎么在64KB内存里跑起来的文章,挺有感触。
其实先说背景:spell 是早期Unix的拼写检查工具。64KB什么概念?一本英文词典本身就装不下。作者的解法很妙:不存词典,存哈希。把词表离线压缩成一张位图式的哈希表,宁可接受少量误判(把生僻错词判成对的),也要把体积压下去。这是教科书级的 trade-off——牺牲完美的召回率,换取"在当时的机器上能跑"这个更硬的约束。后来又加了词干还原规则,把复数、时态变化折叠掉,词典进一步缩水。
我佩服的不是技巧本身,是判断力。作者很清楚这个工具的真正目标:帮人抓明显拼写错误,而不是做语言学权威。目标定准了,才敢砍。
反观现在,装个命令行小工具拖下来几百兆依赖,很多项目把"功能全"当成了"质量好"。spell 提醒我们:开源项目最值钱的贡献往往不是代码,是那个"什么可以不要"的判断。代码会过时,这种判断力不会。
顺手推荐读原文,位图压缩那段的推导很漂亮,不挑读者。