推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
foxyier

「请教贴」如何把 js 的 AST 节点转换成汇编语言代码

  •  
  •   foxyier · May 22, 2021 · 4202 views
    This topic created in 1995 days ago, the information mentioned may be changed or developed.

    RT 。最近想要实现一个基于 js 的「栈式虚拟机」。

    js 源代码 ---> AST 节点的过程相对简单且易于理解, 但是「每个 AST 节点对应的汇编语言操作」就不太懂了。

    想请教一下各位大佬有没有这方面的「工具, 书籍, 或者课程」等等。 想要去学习一下。

    9 replies  •  2021-05-23 14:28:58 +08:00
    Mohanson
    Mohanson
    May 22, 2021❤️4
    1
    可以看我的 minits 项目: https://github.com/nervosnetwork/minits

    配套演讲: http://accu.cc/content/misc/minits/

    当年在 W3C 讨论组分享过, 应该是最符合你题目的项目了, 技术不深, 入个门还是 ok 的
    ch2
    ch2
    May 22, 2021
    2
    语义分析,照别人的抄就行了
    lambdafate
    lambdafate
    May 22, 2021
    3
    啊,梦回编译原理。
    no1xsyzy
    no1xsyzy
    May 22, 2021
    4
    SICP 第五章,但我是看不进去。
    3dwelcome
    3dwelcome
    May 22, 2021
    5
    "每个 AST 节点对应的汇编语言操作"
    通常来说就是指 LLVM 对应的 IR 运行机制,那种伪汇编不是很难,但需要花不少时间去学习。
    个人不是很推荐钻研,写这东西特别费时间,又没太大实用价值。
    reiji
    reiji
    May 23, 2021
    6
    @Mohanson 这个博客太有趣了,估计这几天的时间都要花在这上面了
    Mohanson
    Mohanson
    May 23, 2021
    7
    @reiji 感谢支持, 花了很多时间在上面
    jiyinyiyong
    jiyinyiyong
    May 23, 2021
    8
    感觉还挺难的, 前面给的 LLVM 是静态类型语言生成汇编的方案吧, 编译原理的内容, 但是生成代码需要类型提示的, 得跟 TypeScript 那样手写类型了, 不然要编译器实现类型推断.. 在 JavaScript 上做类型推断... 感觉不靠谱.

    Julia 语言因为是 LLVM 上实现的, 动态语言, 实现了基于动态语言生成 assembly. 我感觉挺厉害的, 不知道类型推断这块具体怎么做到的 https://discourse.julialang.org/t/understanding-generated-assembly-for-simple-loop/9698 .

    我觉得楼主先搞个 VM, 然后自己基于 VM 糊个语言出来, 应该也已经蛮厉害了 https://craftinginterpreters.com/a-virtual-machine.html .

    至于基于 JavaScript 搞这种, 我听朋友说好像得扒 https://bellard.org/quickjs/ 源码了(不会 C++ 飘过...
    jones2000
    jones2000
    May 23, 2021
    9
    生成 AST 了, 直接遍历 AST 转成一个一个汇编的脚本, 完成以后直接编译生成的汇编脚本就可以了。 编译原理计算机专业都学过的吧。里面有的。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1531 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:01 · PVG 16:01 · LAX 00:01 · JFK 03:01
    ♥ Do have faith in what you're doing.