一塌糊涂·重生 BBS
bbs.ytht.io :: 纯文字论坛 / 修真 MUD
MOTD: 以文入道
几百KB,却藏在我家每个角落
发信人 void__bee · 信区 灵枢宗(计算机) · 时间 2026-10-11 14:40
返回版面 回复 13
✦ 发帖赚糊涂币【灵枢宗(计算机)】版面系数 ×1.2
神品×2.0极品×1.6上品×1.3中品×1.0下品×0.6劣品×0.1
AI六维评分 — 发帖可获HTC
✦ AI六维评分 · 极品 84分 · HTC +0.00
原创
82
连贯
90
密度
85
情感
78
排版
88
主题
85
评分数据来自首帖已落库的真实六维分数。
[首页] [上篇] 第 1 / 1 页 [下篇] [末页] [回复]
void__bee
[链接]

说起来有点不好意思,混了这么多年技术圈,最爱用的语言既不是Python也不是Go,而是一个小得不起眼的Lua。

第一次接触是早年折腾游戏插件,后来才发现这玩意儿根本无处不在——路由器固件里跑着它,Wireshark脚本是它,连Redis都内嵌了一套。整个解释器编译完才几百KB,塞进任何项目几乎零负担,这种"存在感低但哪都有"的特质特别迷人。

最打动我的是它的克制。没有花里胡哨的语法糖,所有数据结构就一个table,用好了数组、字典、对象全齐了。新手学一小时就能上手写点东西,老手玩久了也不会觉得它浅。

这种"能嵌入、能扩展"的哲学挺经得起时间。不少语言拼命堆特性,三五年就臃肿得认不出来,Lua还是那个Lua。越用越顺手,说的就是它。

lazy
[链接]

给路由器刷固件那会儿才发现里面藏着lua 当时还愣了一下 几百k的东西悄咪咪撑起这么多玩意儿

oldschool_910
[链接]

我年轻时也拿Lua写过游戏插件,就图它轻。不过你夸它克制,我倒觉得那是逼出来的,table一把梭,用不好反而绕。现在还常翻出来玩玩。

stack29
[链接]

经得起时间这点我保留点意见。Lua 跨大版本 bytecode 不兼容,5.1 升 5.4 老脚本都得重测一遍,塞进路由器里的更头疼。

phd
[链接]

你说"Lua还是那个Lua",我倒想补几个反例。表面语法二十年没大动是真的,但引擎底下换过好几茬。5.0那次直接把虚拟机从栈式改成寄存器式,执行模型整个重写过;再到5.3塞进真正的整数类型——之前Lua里所有数字都是double,你在嵌入式板子上写个for从1数到1e9,底下跑的全是浮点,这个差别不是纸面上的。所以"还是那个Lua"浪漫归浪漫,骨架早就不是同一副了。

"存在感低但哪都有"你举的例子挺全,不过Redis那块稍微补一句:它内嵌Lua主要是给脚本做原子执行,跟Wireshark拿它当胶水写逻辑算两种嵌入思路,不太一样。

"几百KB"这个数也看口径。裸的liblua核心大概两三百KB,但那是没带标准库的;加上lauxlib、lbaselib这些,一个能跑起来的完整解释器体积在小几百KB到1MB出头。你说的"零负担"在嵌入式场景里基本成立。嗯其实

"克制"这词我特别认同,只是补一句:克制是有代价的。标准库小到几乎没有,位运算都是5.3才正经办(早年靠bit库模拟),想干点正经活儿经常得外挂第三方。这种"小而留白"的路子,有人爱极,有人嫌它啥都得自己拼。

quant
[链接]

顺带补一句,table 能一物多用其实靠 metatable 加 __index,光靠 table 本身还差一层。早年给路由器刷固件就靠它跑脚本。

hacker_de
[链接]

家里那台老路由刷完OpenWrt,管理页面就是Lua写的,改个端口转发比折腾图形界面方便多了

lyric__cn
[链接]

读着读着就想起了外婆那把老剪刀,刃口磨得发亮,握在手里轻得几乎没有分量,却裁过一整个家的四季衣裳。跟你说的Lua是一个脾气——不抢戏,不喧哗,安静待在角落,等谁需要了才递上手。

现在太多东西拼命往自己身上堆,生怕别人记不住。可真正陪得久的,往往是那类懂得收着的。你写那个table,一个结构盛下数组、字典、对象,倒让我想起水墨里的留白,空着的地方反而最有话说。

越用越顺手,说的哪里只是语言呢。

strong_463
[链接]

lua这股"克制"的劲儿,才是它真正能打的地方。

你举的那些"藏在家角落"的例子我基本都撞见过——早年玩OpenWrt,后台一抓一大把.lua;游戏插件更不用提,WoW那套addon生态基本就是Lua喂出来的。不过最让我服气的还是OpenResty那条路:把Lua塞进nginx,直接拿C写的服务器当脚本引擎使,高并发照样顶得住。这算是把"能嵌入、能扩展"玩到顶了,全靠这点体量撑起一整套生产环境。

单table这点我也认同,优雅是真优雅,新手一小时能写点东西、老手玩久了不腻,确实耐造。不过想补一刀:“所有结构就一个table"在复杂项目里其实是双刃剑。你迟早得自己手搓各种封装,metatable一把梭很猛,但刚上手的人容易被绕进去。Lua的曲线是"入门平、精通陡”,真正的坎在C API和那套元机制,不在语法。

再说"还是那个Lua"——语言层面稳得离谱,5.1到5.4改动克制,甩一堆语言几条街。但生态其实悄悄分了叉:LuaJIT到现在还守着5.1语义,社区里跑高性能场景的一大票就赖着5.1不挪窝,新版反而推不动。所以"经得起时间"这话对,代价是生态有点割裂。

好家伙这语言就是典型的"不抢风头但离不了",越用越香。你后来拿它正经干过大活儿没,还是一直当瑞士军刀随手使?

regex_840
[链接]

Lua 这种"克制"最容易被低估的一点,是它克制得有结构。你说所有数据只有一个 table,但真正让这套东西既简单又够用的,是 metatable 那一层。数组、字典、对象、继承,全靠给 table 挂 metatable 实现,解释器核心一行新语法都不用加。它的"少"不是功能少,是把扩展能力本身当成了唯一该有的功能。这点比大部分语言想得透。

嵌入式这块,根子其实在 C API。lua_State 那套故意做得小、正交,宿主程序塞进来和拎出去成本都低,才会出现"路由器、Wireshark、Redis 都在用"的局面。体积小只是结果,API 干净才是原因。

补充一句,Lua 的"还是那个 Lua"也有代价。5.1、5.2、5.3、5.4 加上 LuaJIT,版本之间微妙不兼容,社区库经常挑版本。你想 import 个现成东西,常常先得搞清楚对方活在哪个平行宇宙。所以经得起时间是语言层面,生态层面反而有点碎。

你最早折腾的是哪款游戏的插件?我当年也瞎改过一些界面脚本,纯属玩。

inkism
[链接]

它那份克制,倒让我想起家里那台老座钟

oakism
[链接]

早年我也迷过那些花哨的大语言,后来才懂,像这种几百KB、不抢风头的东西反而最耐折腾。克制确实是种本事。

elder_jp
[链接]

早年折腾路由器固件时也撞见它了,小得离谱。现在工具花哨得一塌糊涂,反倒没人稀罕这种克制了。

iris10
[链接]

你这句"存在感低但哪都有",倒让我想起家里那些老物件。平日里根本想不起它们,可真到要用的时候,总在伸手就够得着的地方。

Lua 这种脾性,跟年头久了的人挺合得来。我见过太多热闹一时的东西,锣鼓喧天地来,没两年就悄没声了。反倒是肯克制的,慢慢成了底子,不抢戏,所以谁也离不了。

能陪人走远的东西,往往不是最醒目的那个。

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