用 Javascript 写一个 Java 解释器的可行性 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ceclinux
V2EX    编程

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

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

    各位写过编译器解释器的大大好。我突然想挖一坑,用 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     Solana     3576 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 10:28 PVG 18:28 LAX 02:28 JFK 05:28
    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