V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
drymonfidelia
V2EX  ›  程序员

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

  •  2
     
  •   drymonfidelia · 319 天前 · 6193 次点击
    这是一个创建于 319 天前的主题,其中的信息可能已经有所发展或是发生改变。
    更普及、门槛更低 这个明显不用举例了
    性能更高 来源: https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/lua.html
    44 条回复    2024-02-18 11:15:32 +08:00
    rocmax
        1
    rocmax  
       319 天前 via Android
    因为 lua 可以方便地调用 c/c++
    adoal
        2
    adoal  
       319 天前   ❤️ 1
    JS 性能更高吗?以前看过一篇论文,对常见的各种语言做了个 benchmarking ,脚本语言无 JIT 组 Lua 是第一,有 JIT 组 LuaJIT 是第一……
    ipwx
        3
    ipwx  
       319 天前   ❤️ 1
    不上 jit 的情况下 lua 很快,js 很慢
    westoy
        4
    westoy  
       319 天前
    早期 dhtml 时代 js 并不普及,PHP black book 作者公开在书里建议别用 js.......

    js 慢慢普及是 gmail 时代才开始的, 性能上去是 v8 出来后

    而且 lua 和 luajit 爆杀........
    inroading
        5
    inroading  
       319 天前
    JavaScript 只是在 Web 开发中占主导,Lua 可以很方便嵌入 mpv 这种桌面应用; Lua 更简单
    pursuer
        6
    pursuer  
       319 天前
    只提性能,在不带 jit 的情况下,lua 的解释器实现是比 javascript 更快的。不过好像也就 2-3 倍的样子
    如果带 jit ,那一般 js 说的是 v8/node ,我看了下电脑里的 node 排除掉 node_module 是 62.6mb ,可能是考虑有点大吧。
    dcsuibian
        7
    dcsuibian  
       319 天前
    我觉得性能不是问题,主要是开发语言
    比如 Postman 包含一个基于 Node.js 的运行时,自然就会支持 JavaScript 脚本
    如果是 C/C++开发的程序,那 Lua 或 Python 脚本就挺正常
    drymonfidelia
        8
    drymonfidelia  
    OP
       319 天前
    @pursuer 纯 V8 看起来也没多大,我看 Microsoft.ClearScript.V8 才 768KB
    drymonfidelia
        9
    drymonfidelia  
    OP
       319 天前
    @dcsuibian 如果我要给用 C#开发的跨平台程序加入脚本功能,Lua 还是 JS 更合适?看起来 Jint 相比 Lua 的解析器更成熟 ( V8 那个好像不能跨平台)
    icyalala
        10
    icyalala  
       319 天前
    如果从开发者(而不是脚本使用者)的角度来看,Lua 显然是更容易集成的。
    纯粹的 C89 ,代码量非常少,编译超简单,想怎么集成就怎么集成,也不用考虑 C++ 和跨平台之类的各种问题。
    License 也是 Public Domain 的,没有其他顾虑。

    如果把 JS 要用在脚本语言,还是看看 quickjs 吧,至少体积和使用难度比 v8 小多了。
    kneo
        11
    kneo  
       319 天前 via Android
    开发者友好,安装包体积友好。
    lijiangang886
        12
    lijiangang886  
       319 天前
    为什么 lua 在游戏开发中应用普遍? - 韦易笑的回答
    https://www.zhihu.com/question/395593519/answer/2738722877

    总之就是 quickjs 出来的太晚了
    Trim21
        13
    Trim21  
       319 天前 via Android   ❤️ 2
    额,你们都在说什么,mpv 支持 js 脚本啊…
    june4
        14
    june4  
       319 天前
    lua 比 js 快?我不能相信
    ly841000
        15
    ly841000  
       319 天前
    @drymonfidelia #8 这个只是包装的 DLL 大小,真实大小是 runtimes 目录下的 有 20 多 M
    phrack
        16
    phrack  
       319 天前 via iPhone   ❤️ 5
    javascript 程序员收收味,真是哪里都能看到你们。这垃圾语言设计的时候就没整好,要不是碰巧是给浏览器绑定早死绝了
    drymonfidelia
        17
    drymonfidelia  
    OP
       319 天前
    @Trim21 自带的脚本都是 lua 写的
    lijiangang886
        18
    lijiangang886  
       319 天前   ❤️ 1
    @phrack #16 原文:“javascript 程序员收收味,真是哪里都能看到你们。这垃圾语言设计的时候就没整好,要不是碰巧是给浏览器绑定早死绝了”
    ======
    回复:你说得对,但 lua 也不比 js 好,甚至更烂,要跟 lua 比烂那估计得把 php 搬出来
    ikas
        19
    ikas  
       319 天前
    说到底它还不支持 Lua5.2 呢
    这种纯粹开发喜好问题
    vincent7245
        20
    vincent7245  
       319 天前
    1 lua 不算小众
    2 lua 至少比 js 语法更友好
    leonshaw
        21
    leonshaw  
       319 天前
    @phrack 屎上雕花的典范
    starrycat
        22
    starrycat  
       319 天前 via Android
    得看历史性能数据吧,我猜 mpv 使用 lua 时应该比 js 更普及和性能更高吧,就算现在 js 更好,现有代码够用为什么要换?
    Al0rid4l
        23
    Al0rid4l  
       319 天前
    论性能, JS 和 Lua 其实差不多的
    论生态, JS 大得多
    论语法, 都是动态弱类型, Lua 的索引默认 1 开始真没看出来哪里友好了, 异步语法更不用说
    JS 的确丑陋, 但 Lua 和优雅也不搭边, 搁这吹 Lua 的还是歇歇吧
    用 Lua 的考量基本上只会是体积小和容易集成
    wolfan
        24
    wolfan  
       319 天前
    首先,这事得结合时代来看。
    lua 的时候,存储空间还是寸土寸金,而 lua 就那么点大,使用 lua 有存储上的优势。
    其次是当年 C 大行其道,用 lua 辅助不是很正常。
    最后是强大的惯性作用。

    所以用 lua 没毛病嘬。
    lambdaq
        25
    lambdaq  
       319 天前
    为啥不用 Emacs Lisp ?
    sunzhuo
        26
    sunzhuo  
       319 天前
    Lua 的语法还是很简单的,集成也简单。
    stimw
        27
    stimw  
       318 天前 via Android
    @phrack 你 17 年的帖子:

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

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

    当年还是正常就事论事只说语言,现在倒学会打地图炮喷整个群体了。
    dnfQzjPBXtWmML
        28
    dnfQzjPBXtWmML  
       318 天前 via Android
    Lua 解释器简单啊,在单片机上都能用
    Cookmilk
        29
    Cookmilk  
       318 天前 via iPhone
    Lua 轻,啥叫轻。就是功能少。
    phrack
        30
    phrack  
       318 天前 via iPhone
    @stimw 我进步在 python 和 Java ,js 确实没进步。地图炮嘴嗨爽啊。
    HaroldFinchNYC
        31
    HaroldFinchNYC  
       318 天前
    Lua compiler 很小,可以整合到软件里
    MetroWind
        32
    MetroWind  
       318 天前
    没事谁愿意用 JavaScript 这破玩意 😂😂😂
    yf215
        33
    yf215  
       318 天前 via Android
    Quickjs 相对 luavm 性能还是差点,不过现在很多项目都是集成 quickjs 了。
    rrfeng
        34
    rrfeng  
       318 天前 via Android
    小巧,不能玩花有时候也是优势。

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

    说大项目不好重构的,不适合 lua 就是不适合,别强行用。
    pursuer
        35
    pursuer  
       318 天前
    @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
        36
    jsq2627  
       318 天前 via iPhone
    v8 的 embedding 难度比 lua 高多了
    mengzhuo
        37
    mengzhuo  
       318 天前
    最近在实现 js 相关的解析器,发现要是现实的语法功能对比其他语言实在是太复杂了。
    而这些都是嵌入脚本式语言要避免的地方,尽量简单并能完成工作。
    Al0rid4l
        38
    Al0rid4l  
       318 天前
    @pursuer "和多数语言不一致" 这就是不友好, 不然 Brainfuck 都能说自己友好, 每个语言的槽点都能说是规范问题, 毕竟谁还没个规范了

    上限是达不到 Lua, 不过主流解释器/编译器都带 JIT, 每个都有好爹, 实际情况就是 JS(JIT)和 LuaJIT 差不多, 但你把人家好爹排除了
    kaiveyoung
        39
    kaiveyoung  
       318 天前 via Android
    你如果写过就知道了,Lua 和 C/C++集成互相调用非常方便,甚至都不用拷贝变量,直接使用 Lua 访问原生 C++对象。而且一个 5M 大小的 C++程序,在 600MHz 主频,128M 内存的嵌入式设备上运行
    ZhiyuanLin
        40
    ZhiyuanLin  
       317 天前
    你嵌入过就知道,lua.h 比 v8.h 的 API 好用多了……
    byzod
        41
    byzod  
       317 天前 via Android
    你是浏览器大战的时候没关注吧, 那时候的 js 性能只能用一坨屎来形容
    什么拳打 lua 脚踢 native, 都是卷出来的
    tywtyw2002
        42
    tywtyw2002  
       316 天前 via iPhone   ❤️ 1
    lua 快啊

    程序插件脚本,基本上只需要实现基业务逻辑就行了,剩下的函数去 call api 。性能什么,并不拼浮点计算。

    lua 不爽的就是没原生 class ,table 有时候让人很头痛,还有就是 string 操作还是很原始。

    写 wow ,neovim 插件,你发现大部分操作都是 if else 然后 call api 。性能相关的函数都是 call c api 去解决的。
    mudssky
        43
    mudssky  
       316 天前
    mpv 几年前我开始用的时候就支持 js 脚本了,我写 mpv 脚本都是用 ts 然后编译到 es5 就可以了。
    rockcat
        44
    rockcat  
       316 天前
    用 Lua 主要是 runtime 小巧,js 的 runtime 太大了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1530 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:49 · PVG 00:49 · LAX 08:49 · JFK 11:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.