V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ceclinux
V2EX  ›  编程

用 Javascript 写一个 Java 解释器的可行性

  •  
  •   ceclinux · 2017-03-21 13:12:17 +08:00 · 4630 次点击
    这是一个创建于 2836 天前的主题,其中的信息可能已经有所发展或是发生改变。

    各位写过编译器解释器的大大好。我突然想挖一坑,用 Javascript 写一个 Java 解释器,这样子就可以在浏览器上运行简单的 Java 。也就是说,完成之后差不多可以利用这个解释器做一个类似 OA 的网站,比 leetcode 快( leetcode 提交最近真的很慢 orz )。

    当然,首先是要完成这个解释器再说。本人有写过一个简单的 Java 到 MIPS 的编译器(用 Java 写的),也用 Javascript 写过 ML 的解释器,但是很多地方知识忘得也差不多了,不知道会踩到什么坑,希望能给一些材料或者源代码提供参考,谢谢

    11 条回复    2017-03-21 20:06:58 +08:00
    mind3x
        1
    mind3x  
       2017-03-21 14:04:46 +08:00
    从精简版的 CLDC 开始,相当于 JDK 1.1 时代的 VM , Oracle 有 C 语言的参考实现: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javame-419430.html#J2MECLDC-1.1-WINUNIX-G-F

    JVM 字节码的解释执行本身不算复杂,但 class 的 loading/verifying 和 GC 都是很大一砣东西。 Good luck!
    loading
        2
    loading  
       2017-03-21 14:09:07 +08:00 via Android
    wasm 目前很火,可以了解一下。
    simonlei
        3
    simonlei  
       2017-03-21 14:29:17 +08:00
    gwt 不就是干这个的吗,都这么多年了。
    glasslion
        4
    glasslion  
       2017-03-21 14:44:08 +08:00
    @simonlei gwt 是 java 写的
    fqzz
        5
    fqzz  
       2017-03-21 14:52:21 +08:00
    ceclinux
        6
    ceclinux  
    OP
       2017-03-21 15:13:52 +08:00
    @mind3x
    @fqzz
    额,想绕过 JVM ,直接解析 Java 代码不知道行不行
    Accldent
        7
    Accldent  
       2017-03-21 15:29:12 +08:00
    @ceclinux 没理解什么叫绕过 JVM 直接解析 Java 代码, JVM 根本不关心是不是 Java 代码, JVM 消费的是 class file , javac 才是负责把 Java 编译成 class 的
    Technetiumer
        8
    Technetiumer  
       2017-03-21 15:43:04 +08:00   ❤️ 1
    楼上说的是 Java > 中间代码 > JVM
    你想要 Java > 解释执行

    当然可行, js 都能写虚拟机了(操作系统虚拟机) http://copy.sh/v86/
    ceclinux
        9
    ceclinux  
    OP
       2017-03-21 19:19:11 +08:00
    @Technetiumer 对,我就要 Java > 解释执行,没看到别人做过这个, Js 实现虚拟机执行 Java bytecode 的倒是一大堆
    另外这个网站好酷^_^
    fqzz
        10
    fqzz  
       2017-03-21 19:41:13 +08:00
    think2011
        11
    think2011  
       2017-03-21 20:06:58 +08:00
    那个用 JavaScript 实现了虚拟机好厉害,不知道是什么原理!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5772 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 106ms · UTC 03:00 · PVG 11:00 · LAX 19:00 · JFK 22:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.