Lua 还是 Python 关于胶水语言的选择 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
jam1024
V2EX    程序员

Lua 还是 Python 关于胶水语言的选择

  •  
  •   jam1024 2020-02-04 13:27:41 +08:00 10107 次点击
    这是一个创建于 2084 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在会第二门编程语言和主要用第二门编程语言的前提下

    个人感觉 Lua 更好,上手容易,轻量,快速,Runtime 体积小,部署容易,跟其他语言缝合也容易。

    而 Python 则有点拖泥带水,Runtime 有点体积,还有分 Python2 和 Python3。

    为何 Lua 没流行起来呢

    46 条回复    2020-02-11 14:56:55 +08:00
    zhuangzhuang1988
        1
    zhuangzhuang1988  
       2020-02-04 13:43:34 +08:00   10
    因为培训班不教
    nightwitch
        2
    nightwitch  
       2020-02-04 13:48:49 +08:00
    lua 从一开始的定位就是一种嵌入式语言,用于嵌入在大型应用里提供方便的脚本操作。而 Python 的定位是通用编程语言。
    wangyzj
        3
    wangyzj  
       2020-02-04 13:53:11 +08:00
    因为 lua 的场景和他的优点都决定他最好是寄生在别的东西里面
    jugelizi
        4
    jugelizi  
       2020-02-04 14:08:19 +08:00
    py 可以独立运行啊
    lua 太轻量了 完全不是一个方向的比较
    pursuer
        5
    pursuer  
       2020-02-04 14:08:45 +08:00 via Android   1
    标准库越完善越容易流行 ,轮子好造,python java node.js go 都是如此
    rb6221
        6
    rb6221  
       2020-02-04 14:17:07 +08:00 via iPhone
    没标准库,也就是“太”轻量了
    df4VW
        7
    df4VW  
       2020-02-04 14:17:21 +08:00   1
    这个评判标准的话,perl 不是更美滋滋?
    SPACELAN
        8
    SPACELAN  
       2020-02-04 14:20:36 +08:00
    我们把 v8 引擎嵌入到了 java,php,golang,python。就是看上了 js 的灵活和工具库丰富
    tab
        9
    tab  
       2020-02-04 14:42:30 +08:00
    最常见的 Web 开发 Python 直接用的也不多,这两年基本是被机器学期带火的(之前 Torch 框架也有用 lua 的,然而已经凉了)。Lua 在游戏开发中很常见,底层定了,上层的业务逻辑大都用 Lua 实现。两者做比较,Lua 的生态差太多,不同的应用场景想用要么得自己造很多轮子要么就要多种语言混合使用,而 Python 基本什么都能找到现成的,现在已经形成马太效应,学习成本和方便程度不可同日而语了。
    designer
        10
    designer  
       2020-02-04 14:56:23 +08:00
    python 支持性挺好的,很多 arm linux 机器都内置了.玩起来也方便
    love
        11
    love  
       2020-02-04 14:57:58 +08:00
    js 更好
    chenyu0532
        12
    chenyu0532  
       2020-02-04 15:02:12 +08:00
    lua 主要的应用场景是游戏里,业务逻辑用 lua 实现很方便,不过出了游戏圈生态差了很多,还是 python 比较好
    jam1024
        13
    jam1024  
    OP
       2020-02-04 15:26:07 +08:00
    @jugelizi 常用的库都有吧, 还是不行,为何不用第三方语言实现,要用胶水语言
    abcbuzhiming
        14
    abcbuzhiming  
       2020-02-04 15:29:44 +08:00
    lua 才不是胶水语言好不好,你要找胶水语言那 python 是唯一选择,人家和各种语言都能胶水起来,库又多。lua 最多还是和 c 交互,游戏领域用的多(暴雪的 wow 带起来的)
    bomb77
        15
    bomb77  
       2020-02-04 15:30:02 +08:00
    只当胶水可能 lua 确实更轻量方便,但是 python 轮子多,做其他事情更方便
    lenghonglin
        16
    lenghonglin  
       2020-02-04 15:32:24 +08:00
    python 轮子多,就这点好。python 的轮子 lua 也能实现,只是没人来做
    youxiachai
        17
    youxiachai  
       2020-02-04 15:36:39 +08:00
    现在有 quickjs....
    感觉还是 js 方便....
    classyk
        18
    classyk  
       2020-02-04 15:40:40 +08:00 via iPhone
    从目前请快来看,LUA 真是可以说完全定位在胶水语言了。python 则可以非常简单且单独处理非常多的任务
    wd
        19
    wd  
       2020-02-04 15:56:44 +08:00 via iPhone
    你觉得 lua 不流行只是觉得没人用来做 web 吧?
    pythonee
        20
    pythonee  
       2020-02-04 16:30:07 +08:00
    lua 和 schema/lisp 的软件构建方式似乎有很多相似之处
    用 c/c++开发需要性能偏高的底层内核或引擎,然后上层应用用 lua 和 scheme 来快速开发,这样可以平衡性能和开发效率。还有些是将 scheme 先转译成 c 语言,将动态变静态

    所以,我觉得 lua 似乎更像是嵌入式语言,而 python 似乎脚本语言
    chuxiaonan
        21
    chuxiaonan  
       2020-02-04 16:34:19 +08:00
    说到胶水语言 我第一时间想到的就是 perl/awk/sed/bash/zsh/csh/ksh/各种 shell

    话说回来 我个人觉得只要用着顺手就行 没必要纠结到底用啥
    (我还见过用 Matlab 当胶水语言的呢。。。震惊 各种*.m 刚开始还以为是 oc,点开一看这不 Matlab 吗乖乖
    不过用 oc 当胶水语言的也挺奇葩的
    gam2046
        22
    gam2046  
       2020-02-04 17:24:53 +08:00
    胶水的话,还是 python 更好一些,但是就嵌入式环境来说,我觉得 lua 也就那样,语法略显诡异,说 runtime 体积小,但现在多数情况下,对体积要求并没有那么敏感,相比之下 Javascript,入门门槛可比 lua 低多了,是个人过来学半小时,都能写点东西。
    laoyur
        23
    laoyur  
       2020-02-04 17:37:50 +08:00
    头像好评
    Chry3anthemum
        24
    Chry3anthemum  
       2020-02-04 17:44:46 +08:00
    显然 perl
    waruqi
        25
    waruqi  
       2020-02-04 18:19:39 +08:00 via Android
    lua 很给力
    mattx
        26
    mattx  
       2020-02-04 18:39:51 +08:00
    定位问题
    1 python 生态更强大,要啥都有现成的库,语法优雅,但是 runtime 占用,解释器全局锁都是问题。
    2 lua 定位嵌入式语言,就是 api 和 库 尽可能少,需要宿主语言去实现,这样的话可定制性好,有 luajit 效率也高。
    jam1024
        27
    jam1024  
    OP
       2020-02-04 18:52:45 +08:00
    @mattx 是的,lua 写点小脚本或者缝合其他语言,或者缝合其他组件的确不错,轻量快速。
    exceptionplayer1
        28
    exceptionplayer1  
       2020-02-04 18:58:28 +08:00
    我也不喜欢 python,需要安装各种包,特别是生产环境在没有权限的情况下很坑。
    所以我用 go,本地写好编译完直接可用~ 用起来很爽
    ysc3839
        29
    ysc3839  
       2020-02-04 19:04:07 +08:00 via Android
    我觉得是第三方库不多,lua 应该类似 js 是跑在受限沙箱里的语言,但 Python 虽然可以嵌入,但是仍然不受限制,可以访问系统资源。
    再加上 lua 往往比 js 引擎轻量,所以 lua 常被用于需要在受限环境中运行,又需要轻量要求的环境。比如给游戏写脚本之类的。
    jam1024
        30
    jam1024  
    OP
       2020-02-04 19:06:30 +08:00
    @ysc3839 我觉得不能这样说,因为 python 的实现复杂,所以嵌入也不一定完善,可能会出各种各样的问题,而 lua 的实现相对简单一点,嵌入的实现也更容易很更快的达到稳定
    jam1024
        31
    jam1024  
    OP
       2020-02-04 19:10:26 +08:00
    @exceptionplayer1 然后因为国内网络比较垃圾,稍微拖点国外的东西,9、10MB 的文件都可能会卡壳,而 Lua 则最大打包起来不过 2、3MB,直接秒下,很快就部署起来了。
    ysc3839
        32
    ysc3839  
       2020-02-04 19:14:02 +08:00 via Android
    @ysc3839 Node.js 出来之前 js 和 lua 差不多,都是嵌入一个软件中使用,因为是一个受限的环境,单独跑的话没法访问系统资源,可以做的事情不多。
    Python 则不一样了,单独跑就能实现很多功能,即便是嵌入使用也不受限制,可以用来扩充主程序的功能。
    假如你写一个游戏服务器,想把游戏统计数据实时上传到某个接口,用 lua 或 js (不是 Node.js) 的话,你得自己给这些语言扩充相关的通信功能,而用 Python 的话这功能就是自带的,可以直接使用一堆轮子。
    ysc3839
        33
    ysc3839  
       2020-02-04 19:17:26 +08:00 via Android
    @jam1024 这是看用途的,如果不为了 Python 那么多现成的库,那使用 js 或者 lua 这种设计就是嵌入的语言当然更合适。但是如果需要那些功能就不一定了。
    crella
        34
    crella  
       2020-02-04 19:20:20 +08:00 via Android
    lua 轮子太少,好像没什么写 web 的框架,所以新手程序员一般不先学这个……
    robertredd
        35
    robertredd  
       2020-02-04 19:37:19 +08:00 via Android
    不要纠结语言了 看实际用途吧!
    paoqi2048
        36
    paoqi2048  
       2020-02-04 20:15:18 +08:00
    你可以将 lua 理解为 minipy
    GuangXiN
        37
    GuangXiN  
       2020-02-04 20:21:46 +08:00
    lua 这种弱鸡还有人用
    juzipeek
        38
    juzipeek  
       2020-02-04 21:19:37 +08:00
    wrk, OpenResty, ats, redis 都使用 lua 来扩展功能
    ofooo
        39
    ofooo  
       2020-02-04 22:42:57 +08:00
    @SPACELAN v8 引擎嵌入到 python 是什么意思?
    thedrwu
        40
    thedrwu  
       2020-02-05 01:21:08 +08:00 via Android
    选择用 python 做胶水或脚本很大原因是有 numpy 的加成。
    不然 lua / tcl / scheme 甚至 vb 都轻巧易学。
    no1xsyzy
        41
    no1xsyzy  
       2020-02-05 01:45:16 +08:00   1
    什么时候把 lua 当胶水了? lua 不是主点的嵌入吗?

    还有,语言的流行是具体应用的流行。
    C 的流行是 Unix 的流行。Javascript 的流行是浏览器的流行。
    其他也有通用性因为多种应用多次流行的。
    纠结语言的落地没意义,因为这和语言本身的性质甚至其实现的好坏无关。
    avv
        42
    avv  
       2020-02-05 11:32:16 +08:00
    JS +1
    V69EX
        43
    V69EX  
       2020-02-05 15:57:13 +08:00
    lua 真的很容易学,前段时间,在完全不会的情况下,花三天时间,给 mpv 写了个脚本,用来切换 iptv 直播源的播放列表(频道切换)。
    hanguofu
        44
    hanguofu  
       2020-02-11 14:45:45 +08:00
    @V69EX : 厚着脸皮求脚本 :D 谢谢!
    V69EX
        45
    V69EX  
       2020-02-11 14:54:36 +08:00
    @hanguofu 没问题,给你贴上网了: https://paste.centos.org/view/12cada0c

    只需要打开源码,设置一下 iptv 播放列表文件(比如 xxx.m3u8 )的全路径就行,变量后面有注释。
    V69EX
        46
    V69EX  
       2020-02-11 14:56:55 +08:00
    把这文件放在~/.config/mpv/scripts/目录下,修改~/.config/mpv/input.conf,加上:
    F6 script-binding iptv

    当然,这个热键你可以自己随便定义。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2526 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 36ms UTC 11:17 PVG 19:17 LAX 04:17 JFK 07:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86