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

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

  •  7
     
  •   plqws Jul 12, 2019 14120 views
    This topic created in 2496 days ago, the information mentioned may be changed or developd.

    https://bellard.org/quickjs/

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

    无话可说,太牛逼了

    55 replies    2019-08-27 15:48:19 +08:00
    deorth
        1
    deorth  
       Jul 12, 2019
    虽然无关,但看到这个我就想问问 V 语言怎么样了
    murmur
        2
    murmur  
       Jul 12, 2019
    意味着以后除了 lua 还可以选 js 么
    k9982874
        3
    k9982874  
       Jul 12, 2019 via iPhone
    @murmur npm 教做人
    12tall
        4
    12tall  
       Jul 12, 2019
    膜拜大神
    yamedie
        5
    yamedie  
       Jul 12, 2019 via Android
    好像对我这样的 win boy 不友好,需要交叉编译
    ddzzhen
        6
    ddzzhen  
       Jul 12, 2019 via Android
    大神啊,福气
    deepdark
        7
    deepdark  
       Jul 12, 2019 via Android
    牛逼
    Sasasu
        8
    Sasasu  
       Jul 12, 2019 via Android   1
    引用计数不是优点吧…
    KuroNekoFan
        9
    KuroNekoFan  
       Jul 12, 2019
    用来 iot 吗
    agagega
        10
    agagega  
       Jul 12, 2019 via iPhone
    新作品?
    simple2025
        11
    simple2025  
       Jul 12, 2019 via Android
    性能怎么样?
    yuuko
        12
    yuuko  
       Jul 12, 2019 via Android
    牛逼
    youxiachai
        13
    youxiachai  
       Jul 12, 2019
    @chenqh https://bellard.org/quickjs/bench.html
    这个自己看
    这个的横向比较应该是同样的小型 js 引擎
    LengthMin
        14
    LengthMin  
       Jul 12, 2019 via Android
    给我的感觉就是 oj 也能用 js 来写了
    BinRelay
        15
    BinRelay  
       Jul 12, 2019
    萌新求教,这个能用在哪些场景呢?
    youxiachai
        16
    youxiachai  
       Jul 12, 2019
    @LengthMin ?现在大部分 oj 都支持 js 了吧
    youxiachai
        17
    youxiachai  
       Jul 12, 2019
    VDimos
        18
    VDimos  
       Jul 12, 2019 via Android
    @LengthMin oj 很多都支持 js 了呀
    zzlove
        19
    zzlove  
       Jul 12, 2019
    @k9982874 js:nodejs 的东西关我屁事~
    zzlove
        20
    zzlove  
       Jul 12, 2019
    和 deno 比有哪些差异呢?除了一个 ts 一个 es?
    vexjoe
        21
    vexjoe  
       Jul 12, 2019
    Can compile Javascript sources to executables with no external dependency.
    这个太好了
    plqws
        22
    plqws  
    OP
       Jul 12, 2019
    @zzlove #20 deno 可以直接把 v8 换成这玩意,deno 和 nodejs 是一类,quickjs 和 v8 是一类,不过 quickjs 自带了一些标准库,例如读文件之类的
    conanskyforce
        23
    conanskyforce  
       Jul 12, 2019
    牛逼,膜拜
    ochatokori
        24
    ochatokori  
       Jul 12, 2019 via Android
    @plqws #22 请教 miniblink 是哪一类?
    meteor957
        25
    meteor957  
       Jul 12, 2019
    6
    plqws
        26
    plqws  
    OP
       Jul 12, 2019
    @ochatokori #24 miniblink 和 webkit/blink/gecko 算一类
    SsuchingYu
        27
    SsuchingYu  
       Jul 12, 2019
    牛逼
    JerryCha
        28
    JerryCha  
       Jul 12, 2019
    太棒了,我们可以编译成 wasm 在上面跑 js 了!
    alphatoad
        29
    alphatoad  
       Jul 12, 2019
    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  
       Jul 12, 2019 via Android
    wow, awesome project!
    iwtbauh
        31
    iwtbauh  
       Jul 12, 2019 via Android
    @alphatoad #29

    安装 32 位 multilib 工具链
    iwtbauh
        32
    iwtbauh  
       Jul 12, 2019 via Android   1
    @alphatoad #29

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

    想问下这样生成的 hello.c, 如果编译运行, 应该怎么执行呢
    About     Help     Advertise     Blog     API     FAQ     Solana     3526 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 152ms UTC 12:01 PVG 20:01 LAX 05:01 JFK 08:01
    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