Tag: 解释器

在运行时从Java编译和使用Groovy类?

我有一个应用程序,我希望通过让用户在Groovy中定义类,最终实现一些接口来实现可扩展性。 关键方面是应该在运行时解释/编译它。 即我需要我的应用程序来获取.groovy并编译它。 在启动过程中这样做是可以的。 然后,当然,我的应用程序应该能够实例化该类。 我看到两个解决方案: 1)在应用程序运行时编译,将类放在类路径上的某个地方,然后加载类,假装它们始终存在。 2)一些更聪明的方法 – 调用编译器API和一些类加载魔法让我的系统类加载器看到它们。 我如何选择2)? 还有其他想法吗?

我们可以在硬件中实现一个java解释器本地执行Java字节码吗?

如果我们在硬件中实现java解释器那么我们如何实现java字节码的架构中立性… java是否使用JIT(只是在时间解释器中)? 以及这些与虚拟机概念的操作系统和java虚拟机(JVM)有何关系

Java解释器和JVM之间的区别

我听过有人说“JVM必然是Java解释器,但Java解释器不一定是JVM”。 真的吗? 我的意思是Java解释器和JVM之间有区别吗?

口译员如何解释代码?

为简单起见,想象一下这个场景,我们有一台2位计算机,它有一对2位寄存器,称为r1和r2,只适用于立即寻址。 让我们说比特序列00意味着添加到我们的CPU。 01表示将数据移至r1,10表示将数据移至r2。 因此,这台计算机和汇编程序有一个汇编语言,其中的示例代码将被编写为 mov r1,1 mov r2,2 add r1,r2 简单地说,当我将此代码汇编为本机语言时,文件将类似于: 0101 1010 0001 上面的12位是本机代码: Put decimal 1 to R1, Put decimal 2 to R2, Add the data and store in R1. 所以这基本上是编译代码的工作原理,对吧? 让我们说有人为这个架构实现了一个JVM。 在Java中,我将编写如下代码: int x = 1 + 2; JVM将如何解释此代码? 我的意思是最终必须将相同的位模式传递给cpu,不是吗? 所有cpu都有许多可以理解和执行的指令,它们毕竟只是一些位。 让我们说编译的Java字节码看起来像这样: 1111 1100 1001 或者其他..是否意味着解释在执行时将此代码更改为0101 1010 0001? 如果是,它已经在本机代码中了,那么为什么说JIT只是经过多次启动? 如果它没有完全转换为0101 1010 0001,那么它会做什么? […]

Java线程与操作系统线程

看起来我已经搞砸了Java Threads / OS Threads和Interpreted语言。 在开始之前,我确实理解绿色线程是Java线程,其中线程由JVM处理,整个Java进程仅作为单个OS线程运行。 因此,在多处理器系统上,它是无用的。 现在我的问题是。 我有两个线程A和B.每个都有10万行独立代码。 我在多处理器系统上的Java程序中运行这些线程。 每个线程都将被赋予一个本机操作系统线程到RUN,它可以在不同的CPU上运行但是由于Java被解释,这些线程将需要一次又一次地与JVM交互以将字节代码转换为机器指令? 我对吗 ? 如果是,那么对于较小的程序,Java Threads不是一个很大的优势吗? 一旦Hotspot编译这两个执行路径,两者都可以像原生线程一样好吗? 我对吗 ? [编辑]:一个替代问题可以是,假设你有一个单独的Java线程,其代码不是JIT编译的,你创建该线程并启动()它? 操作系统线程和JVM如何交互以运行该字节码? 谢谢

使用标记列表构造抽象语法树

我想从一个令牌列表中构造一个AST。 我正在编写脚本语言,我已经完成了词法分析部分,但我不知道如何创建AST。 所以问题是,我该怎么做这样的事情: WORD, int WORD, x SYMBOL, = NUMBER, 5 SYMBOL, ; 并将其转换为抽象语法树? 最好,我想在没有像ANTLR之类的库那样的情况下这样做,我宁愿自己尝试从头开始。 但是,如果这是一项非常复杂的任务,我不介意使用库:)谢谢