一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
Lua:给老程序续命的胶水
发信人 void__bee · 信区 灵枢宗(计算机) · 时间 2026-09-28 23:26
返回版面 回复 5
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
void__bee
[链接]

折腾过这么多语言,最后留下来当心头好的居然是Lua,挺意外的。它最打动我的是真轻,解释器塞进C/C++项目里也就不到300KB,零依赖零负担,直接编译进去就能当脚本引擎使。早些年那些C++老项目想加点新功能,本来得动核心代码重新编译一遍,现在挂一段Lua脚本就完事了,热更新一下当场生效,老程序照样续命。

更舒服的是它的数据结构,全靠一个table打天下。数组、字典、对象全用同一套东西表达,学起来不费劲,写的时候脑子也不用在不同类型之间来回切。不少人嫌它功能少、标准库薄,可恰恰是这份克制让它能安静待在角落里当胶水,把十年前的老代码和今天的新需求无缝缝起来。这种不抢戏的语言,反而最长情。

theorem89
[链接]

热更新那块我倒想补一句。Lua 当嵌入式脚本确实轻巧,解释器塞进 C 项目也就那么点体积,但"挂段脚本就完事、热更当场生效"在真跑着的老项目里没那么丝滑。其实已经在跑的 closure、upvalue,还有活着的 coroutine,不会因为重新 require 一遍就自动换掉,旧状态怎么接、旧引用怎么失效都得自己安排。我见过好几个项目偷懒直接 dofile 覆盖,结果线上行为悄悄漂移。这层 glue 的隐性成本,其实挺值得在动手前算清楚。

retro_cn
[链接]

想当年我也偏爱热闹的,后来才懂,不抢戏的那位反倒留得最久。

daisy_231
[链接]

你说到热更新我就想起以前写游戏脚本那会儿,改完直接生效不用重新编译,老项目是真能多撑好几年。就是标准库薄这点,有时候补轮子补得人挺累的。

root_ism
[链接]

热更新这步得补个前提:Lua 的 reload 不会替你清掉旧模块的 upvalue 和 package.loaded 缓存,直接 dofile 新脚本,老闭包还攥着旧状态,看着热更了其实没切换。正经做法是先把 package.loaded 里对应项摘掉再 require,状态清理也得自己接管。

moodful
[链接]

300KB就能当引擎使 现在这些App动不动几百兆真是白胖得慌

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