ffmpeg 和 qemu 的作者 fabrice bellard 写了个 js 引擎 quickjs - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
plqws
V2EX    Javascript

ffmpeg 和 qemu 的作者 fabrice bellard 写了个 js 引擎 quickjs

  •  7
     
  •   plqws 2019-07-12 08:11:08 +08:00 13677 次点击
    这是一个创建于 2285 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://bellard.org/quickjs/

    • 基于 C,支持一个 hello world 只需要 190KiB 大小的 x86 代码
    • 几乎完整的 ES2019 支持,包括 ES Module、异步生成器和 Proxy
    • 可以将 Js 代码编译成单个可执行文件
    • 基于引用计数的垃圾回收
    • 等等等等

    无话可说,太牛逼了

    55 条回复    2019-08-27 15:48:19 +08:00
    deorth
        1
    deorth  
       2019-07-12 08:21:31 +08:00
    虽然无关,但看到这个我就想问问 V 语言怎么样了
    murmur
        2
    murmur  
       2019-07-12 08:22:14 +08:00
    意味着以后除了 lua 还可以选 js 么
    k9982874
        3
    k9982874  
       2019-07-12 08:25:47 +08:00 via iPhone
    @murmur npm 教做人
    12tall
        4
    12tall  
       2019-07-12 08:31:35 +08:00
    膜拜大神
    yamedie
        5
    yamedie  
       2019-07-12 08:32:38 +08:00 via Android
    好像对我这样的 win boy 不友好,需要交叉编译
    ddzzhen
        6
    ddzzhen  
       2019-07-12 08:37:46 +08:00 via Android
    大神啊,福气
    deepdark
        7
    deepdark  
       2019-07-12 08:41:47 +08:00 via Android
    牛逼
    Sasasu
        8
    Sasasu  
       2019-07-12 08:45:46 +08:00 via Android   1
    引用计数不是优点吧…
    KuroNekoFan
        9
    KuroNekoFan  
       2019-07-12 09:00:03 +08:00
    用来 iot 吗
    agagega
        10
    agagega  
       2019-07-12 09:05:54 +08:00 via iPhone
    新作品?
    chenqh
        11
    chenqh  
       2019-07-12 09:13:06 +08:00 via Android
    性能怎么样?
    yuuko
        12
    yuuko  
       2019-07-12 09:15:52 +08:00 via Android
    牛逼
    youxiachai
        13
    youxiachai  
       2019-07-12 09:19:51 +08:00
    @chenqh https://bellard.org/quickjs/bench.html
    这个自己看
    这个的横向比较应该是同样的小型 js 引擎
    LengthMin
        14
    LengthMin  
       2019-07-12 09:23:50 +08:00 via Android
    给我的感觉就是 oj 也能用 js 来写了
    BinRelay
        15
    BinRelay  
       2019-07-12 09:27:58 +08:00
    萌新求教,这个能用在哪些场景呢?
    youxiachai
        16
    youxiachai  
       2019-07-12 09:29:21 +08:00
    @LengthMin ?现在大部分 oj 都支持 js 了吧
    youxiachai
        17
    youxiachai  
       2019-07-12 09:29:32 +08:00
    VDimos
        18
    VDimos  
       2019-07-12 09:30:11 +08:00 via Android
    @LengthMin oj 很多都支持 js 了呀
    zzlove
        19
    zzlove  
       2019-07-12 09:31:13 +08:00
    @k9982874 js:nodejs 的东西关我屁事~
    zzlove
        20
    zzlove  
       2019-07-12 09:34:27 +08:00
    和 deno 比有哪些差异呢?除了一个 ts 一个 es?
    vexjoe
        21
    vexjoe  
       2019-07-12 09:42:22 +08:00
    Can compile Javascript sources to executables with no external dependency.
    这个太好了
    plqws
        22
    plqws  
    OP
       2019-07-12 09:55:55 +08:00
    @zzlove #20 deno 可以直接把 v8 换成这玩意,deno 和 nodejs 是一类,quickjs 和 v8 是一类,不过 quickjs 自带了一些标准库,例如读文件之类的
    conanskyforce
        23
    conanskyforce  
       2019-07-12 10:12:10 +08:00
    牛逼,膜拜
    ochatokori
        24
    ochatokori  
       2019-07-12 10:17:58 +08:00 via Android
    @plqws #22 请教 miniblink 是哪一类?
    meteor957
        25
    meteor957  
       2019-07-12 10:30:14 +08:00
    6
    plqws
        26
    plqws  
    OP
       2019-07-12 10:31:47 +08:00
    @ochatokori #24 miniblink 和 webkit/blink/gecko 算一类
    SsuchingYu
        27
    SsuchingYu  
       2019-07-12 10:43:01 +08:00
    牛逼
    JerryCha
        28
    JerryCha  
       2019-07-12 10:56:16 +08:00
    太棒了,我们可以编译成 wasm 在上面跑 js 了!
    alphatoad
        29
    alphatoad  
       2019-07-12 12:45:43 +08:00
    ld: symbol(s) not found for architecture i386
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    make: *** [qjsbn32] Error 1
    emmmm
    iwtbauh
        30
    iwtbauh  
       2019-07-12 12:55:19 +08:00 via Android
    wow, awesome project!
    iwtbauh
        31
    iwtbauh  
       2019-07-12 12:57:00 +08:00 via Android
    @alphatoad #29

    安装 32 位 multilib 工具链
    iwtbauh
        32
    iwtbauh  
       2019-07-12 12:57:54 +08:00 via Android   1
    @alphatoad #29

    或者编辑 Makefile 文件不编译 32 位版本
    woahishui
        33
    woahishui  
       2019-07-12 13:07:51 +08:00 via Android
    现在这些东西搞得比应用软件还多,真是牛逼
    tougee
        34
    tougee  
       2019-07-12 13:32:27 +08:00
    @Sasasu 原话是这样
    Garbage collection using reference counting (to reduce memory usage and have deterministic behavior) with cycle removal.
    alphatoad
        35
    alphatoad  
       2019-07-12 13:33:51 +08:00
    @iwtbauh 我找到问题所在了。问题是 Mojave 的开发者工具不再支持 i386
    explore365
        36
    explore365  
       2019-07-12 13:38:51 +08:00
    用过他的 tcc,也很吊
    hguandl
        37
    hguandl  
       2019-07-12 13:50:24 +08:00
    macOS 上无法编译的朋友可以尝试改一下 Makefile 去掉 32 位的编译。修改方案可以是删掉 37 行的 `CONFIG_M32=y` ;或者在 45 行前面插入一行 `CONFIG_M32=`。
    zhouxuchen
        38
    zhouxuchen  
       2019-07-12 13:50:34 +08:00
    作为只用过 ffmpeg 的菜鸡,搜了下这人的履历,跪在了电脑前
    fxxkgw
        39
    fxxkgw  
       2019-07-12 13:58:16 +08:00
    这个就是传说中的额头锃亮的 法国大佬。。。
    dabang007
        40
    dabang007  
       2019-07-12 14:03:07 +08:00
    编译了下,strip 后还是比较大的大概 650K 的 qjs qjsc 也有 330K,helloworld 的示例 strip 后也有 617720 字节,ubuntu gcc5.4.0 版本
    ericgui
        41
    ericgui  
       2019-07-12 14:09:07 +08:00
    @k9982874 为了 IOT 的
    ericgui
        42
    ericgui  
       2019-07-12 14:15:43 +08:00
    唯一的问题是,这哥们为嘛不用 github
    dabang007
        43
    dabang007  
       2019-07-12 15:27:14 +08:00   1
    @dabang007 没有仔细看;./qjsc -e -fno-string-normalize -fno-map -fno-promise -fno-typedarray -fno-typedarray -fno-regexp -fno-json -fno-eval -fno-proxy -o hello.c examples/hello.js 这样生成的 hello 确实只有 190K
    dabang007
        44
    dabang007  
       2019-07-12 15:28:27 +08:00
    @murmur
    @ericgui 感觉 IOT 还是 Lua 小巧,这个还是有点大,裁剪后也应该比 Lua 大些
    ysc3839
        45
    ysc3839  
       2019-07-12 15:40:28 +08:00 via Android
    需要给自己的程序嵌入脚本语言,之前调查过几种语言最终还是选了 Python。
    因为需要访问操作系统的功能,js 语言本身并没有这样的接口,能实现的只有 nodejs,但是 nodejs 官方似乎没提供嵌入的支持,别的语言如 lua 和 Squirrel 也有类似的问题。
    nutting
        46
    nutting  
       2019-07-12 15:43:13 +08:00
    gcc 4.8 有个 BUG:缺少 stdatomic.h,你们都编译成功了?
    v23x
        47
    v23x  
       2019-07-12 16:27:30 +08:00
    牛批.............
    kaneg
        48
    kaneg  
       2019-07-12 16:42:30 +08:00 via iPhone
    一生只要有一件类似 ffmpeg,qemu,tinycc 的作品就足以在软件史扬名,而这些竟然都出自他一人之手,对于我等芸芸众生,只有顶礼膜拜的份。
    yuxizhe
        49
    yuxizhe  
       2019-07-12 21:57:09 +08:00
    为啥不用 github 呢。。。
    yulon
        50
    yulon  
       2019-07-12 22:28:20 +08:00
    @nutting -std=c11
    dosmlp
        51
    dosmlp  
       2019-07-13 12:12:14 +08:00   1
    @ysc3839 你仔细看下 node 源码的 node.h,其实是可以嵌入到自己的程序里的
    ysc3839
        52
    ysc3839  
       2019-07-13 13:20:06 +08:00 via Android
    @dosmlp 主要是需要相关文档,没文档的情况下我真搞不来。Python 的官方文档里就有关于嵌入的说明,但是 nodejs 的文档似乎没找到相关信息。
    lxml
        53
    lxml  
       2019-07-13 22:38:07 +08:00
    感觉要是滋瓷 typescript 就更好了,好期待 wasm 出来后,语法层面就没有历史包袱,抛掉 js 那些历史糟粕,重新搞搞( typescript 的子集语言就挺好)
    renguangwei
        54
    renguangwei  
       2019-07-30 09:51:25 +08:00
    @ysc3839 有个三桑的 iot.js ,基于 JerryScript,但不看好。quickjs 可能是个奇异点,拭目以待。
    kimown
        55
    kimown  
       2019-08-27 15:48:19 +08:00
    @dabang007

    想问下这样生成的 hello.c, 如果编译运行, 应该怎么执行呢
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5837 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:23 PVG 11:23 LAX 20:23 JFK 23:23
    Do have faith in what you're doing.
    ubao 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