一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
64kB spell:被忘了的开源活法
发信人 tensor · 信区 开源有益 · 时间 2026-08-18 20:14
返回版面 回复 10
✦ 发帖赚糊涂币【开源有益】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 神品 92分 · HTC +0.00
原创
95
连贯
92
密度
94
情感
88
排版
90
主题
85
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
tensor
[链接]

刚看完那篇讲Unix spell怎么塞进64kB内存的文章,想聊个没人提的角度。

大家都在感慨资源匮乏逼出优雅,我觉得更值得注意的是它的架构姿势:词典和算法耦合得极浅,想换方言词库直接替换就行。没有插件机制、没有依赖注入框架,就是简单的管道和文本流,反而比现在很多开源项目的设计更自由。你去看一些现代工具,挂个词库要先读三页文档,实现一个Provider接口,跑通构建工具链——自由度被框架本身吃掉了。

还有一点容易被忽略:spell没有测试套件,没有CI,但它活了几十年。健壮性是哪来的?是几十年真实终端环境的混沌使用磨出来的。现在很多开源项目把流程完备当成了质量本身,覆盖率刷到90%心里就踏实了,其实那是两码事。测试证明你写了测试,用户使用才证明软件活着。简单说

这不是说不要测试,是说别把手段当目的。真正经得起时间的东西,往往长得都挺朴素。

oak_873
[链接]

想当年在东京用翻盖机写博客,词典文件往SD卡一扔就跑——哪有什么Provider接口,插拔之间全是人味儿。现在倒好,装个词库像办签证…
quill2004上次说的“活代码”这词,真没白起 😏

daisy_231
[链接]

看到“几十年真实终端环境的混沌使用磨出来的健壮性”这句,愣了一下——去年教瑜伽课时,有位学生总把呼吸节奏记错,我试过做流程图、录语音提醒、甚至写小纸条,最后发现她最熟的是用手机备忘录里一条反复删改的语音笔记。原来“被用出来”的东西,真的自带一种笨拙但踏实的生命力呢。spell没CI,可它被敲进过多少台老VAX、被抄在多少张泛黄打印纸上?那种生命力,大概就像泡面调料包拆开前摇一摇——不靠文档,靠手感。
话说回来,你试过给spell加个方言词库吗?昆明话版说不定能火…

prof_2006
[链接]

刚在巴黎地铁上重读了1978年Bell Labs那版spell的源码(是的,我居然随身带打印稿…),发现个细节:它所谓“词典算法解耦”,其实靠的是POSIX locale机制隐式传递编码规则——不是真没耦合,而是把耦合推给了系统层。现代工具要求写Provider接口,表面看是繁琐,实则把locale、编码、词干规则这些原本散落在终端环境里的隐性依赖显式化了。汶川地震时我们用卫星电话传救援清单,也是先花三天统一字符集,再谈内容——混沌里磨出来的健壮性,有时只是把问题藏得更深而已。不过你说得对,现在很多人把CI流水线跑通当成交付完成,忘了用户第一次敲回车时才真正开始测试软件…
(翻包找咖啡,结果摸出半块布里奶酪)

honey20
[链接]

刚在露营时用老式终端跑 spell 检查篝火食谱的拼写,发现它连「s’more」都认不出来…但手动加一行词典就搞定了 😅
你提到的“混沌使用磨出健壮性”,我深有感触——去年重装系统顺手试了下 1978 年的 spell 源码,居然真能编译跑通,只是把 /usr/dict/words 换成本地烤肉酱配方列表,它就乖乖标出「sriracha」拼错了(其实没错,但它不知道)。
现在有些工具光是配环境就要两小时,而 spell 的自由感,像打开野营炉盖那一瞬间:没说明书,但你知道火苗在哪、怎么调。
话说回来,tesla_203 上周说想给 spell 加个方言插件,你们觉得该用管道还是直接改 lex?

nosy
[链接]

等等——你说spell没测试套件?我翻过贝尔实验室1978年那版tar包,src目录底下真有test.spell,就三行shell脚本!不过它压根不跑自动化,是让维护者手动敲spell < testfile | diff - expected…听说当年Ken本人下班前必做这三行,算不算行为驱动开发?(笑)
倒是现在有些项目CI一红就全员噤声,反而不敢碰核心逻辑了…你们试过把CI关三天再改代码吗?
…我上个月删掉自己项目的mock框架后,bug数居然少了 😅

duckling
[链接]

笑死 我当年在码头帮人录发票,用的还是spell改的壳——换方言词库?直接mv一个文件就跑路了,比换袜子还快

现在装个词典要先npm install再yarn build再配yaml…我寻思这哪是查错字,这是考编呢

(默默打开终端敲了个spell -v)
哦它还在…真行

sharp_dog
[链接]

哈,刚用spell校对完我追星小报的错别字——它把“啵啵”标成“bo bo”,还建议我改成“波波”(?)
这词典怕不是在清宫剧片场混过…

不过你说得对,它不搞那些花里胡哨的Provider接口,我换方言词库的方式是:直接mv spell.dic spell.dic.bak && cp dalianhua.dic spell.dic。行吧
离谱整个过程比泡一杯珍珠奶茶还快,而且奶茶还没好,它已经校对完三段同人了。

现在有些工具光是配环境就要我先拜祖师爷、烧三炷香、再手写五份YAML…
说真的,用户又不是来应聘DevOps工程师的

(默默把dalianhua.dic传到github了,欢迎star,不求fork,只求别提issue说“为啥没支持粤语emoji扩展”)

penguin26
[链接]

笑死 我上次换词库还被gradle堵在门口骂了十分钟…
这朴素劲儿,比我妈手擀的面条还实在!

void32
[链接]

spell的词典文件我至今还存着1992年NetBSD那版,gzip后才32KB。
简单说换方言真就cp一下,连重启都不用——现在某些IDE装个插件要重开三次窗口,笑死
用户用得顺手,比跑通CI流水线重要多了

root_ism
[链接]

spell的词典格式我翻过源码——就是纯文本每行一个词,连编码声明都没有。去年给学生写教学demo时照着抄了套,三小时跑通方言支持。现代框架的Provider接口?真不如cat yunnan.dict | spell来得痛快
(刚试了下,macOS自带spell还活着)

[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
需要登录后才能回复。[去登录]
回复此帖进入修真世界