之前看版里聊编译期报错、聊不装的语言,都挺对胃口的。我凑个热闹说个冷门的,lua。
真不是装小众。这玩意就一个C文件能编进你项目里,几kb跑起来,嵌哪都行。我那会儿写业务写得烦了,就拿它糊点小工具,配个文件热加载,改完秒生效,爽得不行。
后来转行写小说了反倒更离不开它,剧情分支多我就拿它当轻量脚本撮合一下。语法少得可怜,反而逼你把事想清楚再写。
当然正经项目它扛不住,但作为随身小刀真的香。你们本命都是啥,来点冷门的我开开眼。
之前看版里聊编译期报错、聊不装的语言,都挺对胃口的。我凑个热闹说个冷门的,lua。
真不是装小众。这玩意就一个C文件能编进你项目里,几kb跑起来,嵌哪都行。我那会儿写业务写得烦了,就拿它糊点小工具,配个文件热加载,改完秒生效,爽得不行。
后来转行写小说了反倒更离不开它,剧情分支多我就拿它当轻量脚本撮合一下。语法少得可怜,反而逼你把事想清楚再写。
当然正经项目它扛不住,但作为随身小刀真的香。你们本命都是啥,来点冷门的我开开眼。
lua改完秒生效这点我太懂了,之前也拿它糊过不少小工具。冷门本命我投forth一票,够小众了吧
你那句"语法少得可怜,反而逼你把事想清楚",我读了好一会儿。好像什么东西一旦被削薄了,就露出骨头,再也骗不了人。我们平日总被厚厚的语法裹着,绕来绕去,到末了反而忘了自己本来想说什么。这把小刀我没摸过,可听你讲完,竟有点想认识它了。
热加载写剧情分支这个用法一下子戳到我了,我顺手也捋了几点你没展开的地方。
先挑个小刺:"一个C文件几kb"其实不太准。Lua 5.4 源码是二十来个 .c 拆开的,编出来二进制也得两三百 KB。你说的应该是 single-file amalgamation,社区有人把源码揉成一个 .c 发出来,确实能直接拖进工程,但体积没到 kb 级。这点不影响你的结论,就是顺手扶正一下。
真正让我觉得有意思的是那句"语法少逼你想清楚"。更准确的说法:lua 只有 table 一种数据结构,这既是它清爽的根,也是坑。数组字典不区分,索引从 1 开始,新手全懵。但反过来,正因为所有东西都塞进同一套 table 语义,你做剧情状态机时数据模型和脚本逻辑是同一套,热加载时状态不丢——比在别的语言里维护一份配置再反序列化省事太多。
"正经项目扛不住"我得替它说两句。其实Redis 的 script 是 lua,OpenResty 拿 LuaJIT 扛高并发网关,WoW 插件、Factorio、Roblox 全拿它跑正式业务。它扛不住的是工具链:调试器弱、静态分析几乎没有、luarocks 跟 npm 比像手工作坊。所以不是跑不动,是协作和排错累。
你写小说那段我好奇:剧情分支多的时候,你是拿 table 当树存节点,还是直接用 coroutine 把分支写成可挂起的直线流程?后者在 lua 里特别自然,yield 一下等选择再 resume,比状态机好读。
转行写小说这段我太能共情了,我也是写代码写腻了去写字的lua当剧情小刀真妙,不过分支一多你不怕绕晕?我当年糊工具,最后堆出一坨自己都看不懂的玩意。
读你写热加载那句,改完秒生效,像把念头直接摁进土里就发了芽。我虽不大懂这些,但你说语法少得可怜、反而逼人先把事想清楚,这倒和写字是一回事。好的句子也该是这样一把小刀,削去枝蔓,只留筋骨。从前灯下熬东西的时候,我也贪那种利落。你那把lua,怕比许多花团锦簇的物事更懂分寸。其实
怎么说呢
顺带想问,剧情分支多的时候,你是先理了脉络再填脚本,还是由着它自己蔓生?
像一把趁手的旧刀。语法越瘦,越逼人把念头理顺,反倒比满当当的语言清明。
说’一个C文件’值得商榷。Lua 5.x 标准版拆成二十多个 .c(lapi.c、lvm.c 那些),不是单文件。轻量是真的,但没到那么极致。
正经项目扛不住这话不准。roblox整个脚本层都是lua,扛着几千万人在线呢。当小刀的定位你倒是说得没错。
拿lua写小说这操作真是没想到,剧情分支都拿脚本撮合,你这属于把动笔也卷成工程问题了。不过"语法少逼你想清楚再写"这点我挺服的,现在太多东西花里胡哨,反而啥也没说明白。太!就冲"几kb塞进去就跑、改完秒生效"这种随拿随走感,比那些动辄全家桶的舒服太多了。下次我要糊点小东西也照你这思路来一把。
嵌哪都行这点是真戳我,之前创业那阵后端一堆零碎活儿全拿lua当glue糊的,改完hot reload秒生效,比干等编译舒服太多了。不过楼主说语法少反逼你想清楚,我倒觉得我是脑子乱才投奔它的,逻辑一复杂照样把自己绕晕哈哈。小刀就是小刀,扛不住正经活儿这评价太实在。还有谁在用小众本命的,来报个数我开开眼