为什么 mpv 等很多软件使用 Lua 作为脚本语言,而不是更普及、门槛更低、性能更高(正文附来源)的 JavaScript?如果要给软件加入用户自己编写扩展的功能, Lua 还是 JS 是更好的选择?

2024-02-15 17:06:01 +08:00
 drymonfidelia
更普及、门槛更低 这个明显不用举例了
性能更高 来源: https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/lua.html
7099 次点击
所在节点    程序员
44 条回复
leonshaw
2024-02-15 20:18:10 +08:00
@phrack 屎上雕花的典范
starrycat
2024-02-15 20:34:47 +08:00
得看历史性能数据吧,我猜 mpv 使用 lua 时应该比 js 更普及和性能更高吧,就算现在 js 更好,现有代码够用为什么要换?
Al0rid4l
2024-02-15 21:23:44 +08:00
论性能, JS 和 Lua 其实差不多的
论生态, JS 大得多
论语法, 都是动态弱类型, Lua 的索引默认 1 开始真没看出来哪里友好了, 异步语法更不用说
JS 的确丑陋, 但 Lua 和优雅也不搭边, 搁这吹 Lua 的还是歇歇吧
用 Lua 的考量基本上只会是体积小和容易集成
wolfan
2024-02-15 21:47:02 +08:00
首先,这事得结合时代来看。
lua 的时候,存储空间还是寸土寸金,而 lua 就那么点大,使用 lua 有存储上的优势。
其次是当年 C 大行其道,用 lua 辅助不是很正常。
最后是强大的惯性作用。

所以用 lua 没毛病嘬。
lambdaq
2024-02-15 23:24:44 +08:00
为啥不用 Emacs Lisp ?
sunzhuo
2024-02-16 00:18:19 +08:00
Lua 的语法还是很简单的,集成也简单。
stimw
2024-02-16 02:41:15 +08:00
@phrack 你 17 年的帖子:

楼主玩过不少语言,目前主力 python 。
经常因为项目需要会要写 java 和 js ,但是为什么我一直觉得 java 和 js 非常机车啊!
java 脱离 IDE 根本没法写,有 IDE 也是一大坨一大坨,看的人眼睛疼,js 我尝试了三次去熟悉这个语言,每次都是玩到想哭,真的,就是想哭,为什么到处都是回调,我根本不明白整个程序的流程到底是怎么走的?
谁能帮我脱离苦海?!

合着你 7 年过去了零进步呗。js 黑也没黑到点上,回调函数也能黑,这辈子就只会写 python 是吧...

当年还是正常就事论事只说语言,现在倒学会打地图炮喷整个群体了。
dnfQzjPBXtWmML
2024-02-16 02:48:16 +08:00
Lua 解释器简单啊,在单片机上都能用
Cookmilk
2024-02-16 03:13:16 +08:00
Lua 轻,啥叫轻。就是功能少。
phrack
2024-02-16 04:29:08 +08:00
@stimw 我进步在 python 和 Java ,js 确实没进步。地图炮嘴嗨爽啊。
HaroldFinchNYC
2024-02-16 05:07:59 +08:00
Lua compiler 很小,可以整合到软件里
MetroWind
2024-02-16 05:31:05 +08:00
没事谁愿意用 JavaScript 这破玩意 😂😂😂
yf215
2024-02-16 08:48:49 +08:00
Quickjs 相对 luavm 性能还是差点,不过现在很多项目都是集成 quickjs 了。
rrfeng
2024-02-16 10:05:35 +08:00
小巧,不能玩花有时候也是优势。

你整个 js 进去,随便拉个库 import 几十个 modules…

说大项目不好重构的,不适合 lua 就是不适合,别强行用。
pursuer
2024-02-16 10:28:52 +08:00
@lijiangang886
@Al0rid4l
lua 的设计我觉得不算差吧,索引为 1 只是规范问题,和多数语言不一致。_ENV upvalue 设计我觉得比 js 好,可以防止变量泄漏到全局,而且运算符的一致性也更好一点,例如经典 js 的==,虽然现在基本都用===了,js 用+做字符串连接,其他符号又转换为数字计算。lua 还支持有栈协程,也更灵活一些。lua 设计的时候就考虑尽可能快,所以排除 jit 的话有兼容性负担的 js 上限大概是达不到 lua 的水平的。

但说到底这些设计上的差异并没有多大影响,js 优势就有非常强大的兼容性和生态,语法糖也更甜。这就足够了。

@drymonfidelia 9#
如果考虑 js 的话,有个 txiki.js 的项目可以看看,quickjs 基础上增加了一些 web api 支持
如果脚本可能很复杂的话我觉得考虑下 rpc ,类似 Language Server Protocol 这样的
jsq2627
2024-02-16 13:13:34 +08:00
v8 的 embedding 难度比 lua 高多了
mengzhuo
2024-02-16 21:41:56 +08:00
最近在实现 js 相关的解析器,发现要是现实的语法功能对比其他语言实在是太复杂了。
而这些都是嵌入脚本式语言要避免的地方,尽量简单并能完成工作。
Al0rid4l
2024-02-16 22:24:13 +08:00
@pursuer "和多数语言不一致" 这就是不友好, 不然 Brainfuck 都能说自己友好, 每个语言的槽点都能说是规范问题, 毕竟谁还没个规范了

上限是达不到 Lua, 不过主流解释器/编译器都带 JIT, 每个都有好爹, 实际情况就是 JS(JIT)和 LuaJIT 差不多, 但你把人家好爹排除了
kaiveyoung
2024-02-16 22:43:15 +08:00
你如果写过就知道了,Lua 和 C/C++集成互相调用非常方便,甚至都不用拷贝变量,直接使用 Lua 访问原生 C++对象。而且一个 5M 大小的 C++程序,在 600MHz 主频,128M 内存的嵌入式设备上运行
ZhiyuanLin
2024-02-17 01:09:23 +08:00
你嵌入过就知道,lua.h 比 v8.h 的 API 好用多了……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1015740

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX