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 · 13166 次点击
    这是一个创建于 1995 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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   ·   实用小工具   ·   952 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:33 · PVG 06:33 · LAX 14:33 · JFK 17:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.