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

2017-03-21 13:12:17 +08:00
 ceclinux

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

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

4586 次点击
所在节点    编程
11 条回复
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
2017-03-21 14:09:07 +08:00
wasm 目前很火,可以了解一下。
simonlei
2017-03-21 14:29:17 +08:00
gwt 不就是干这个的吗,都这么多年了。
glasslion
2017-03-21 14:44:08 +08:00
@simonlei gwt 是 java 写的
fqzz
2017-03-21 14:52:21 +08:00
ceclinux
2017-03-21 15:13:52 +08:00
@mind3x
@fqzz
额,想绕过 JVM ,直接解析 Java 代码不知道行不行
Accldent
2017-03-21 15:29:12 +08:00
@ceclinux 没理解什么叫绕过 JVM 直接解析 Java 代码, JVM 根本不关心是不是 Java 代码, JVM 消费的是 class file , javac 才是负责把 Java 编译成 class 的
Technetiumer
2017-03-21 15:43:04 +08:00
楼上说的是 Java > 中间代码 > JVM
你想要 Java > 解释执行

当然可行, js 都能写虚拟机了(操作系统虚拟机) http://copy.sh/v86/
ceclinux
2017-03-21 19:19:11 +08:00
@Technetiumer 对,我就要 Java > 解释执行,没看到别人做过这个, Js 实现虚拟机执行 Java bytecode 的倒是一大堆
另外这个网站好酷^_^
fqzz
2017-03-21 19:41:13 +08:00
think2011
2017-03-21 20:06:58 +08:00
那个用 JavaScript 实现了虚拟机好厉害,不知道是什么原理!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/349098

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX