vm-implementation

    -1热度

    1回答

    我试图编写一个程序来模拟Java中的一个虚拟机来完成一个任务。这将是一个基于寄存器的虚拟机,显然它将存储和执行大量指令。我在如何将机器指令解码为高级Java语言时遇到了问题。 我在网上搜索,发现了一些例子,如下面的例子,但他们只写C,目前我没有足够的时间学习。 unsigned program[] = { 0x1064, 0x11C8, 0x2201, 0x0000 }; void decod

    2热度

    1回答

    我正在写一个基于(基于堆栈)的VM,它在存储变量时不包括类型元数据,无论是在堆栈中还是实际的字节码。另外,所有的数据都作为无符号存储(如果适用的话)(所有整数和字符都作为无符号存储) 考虑到我想保持内存非常小(以下是bool的8位,短小的16位等等),并且不想膨胀代码或工作记忆太多。 //Type info. enum TypeInfo { TYPE_INT8, //=0

    5热度

    1回答

    当今几乎所有传统语言都将程序员意图表示为文本源,然后(为了简单起见,可以说)翻译为某些字节码/机器代码并且由VM/CPU解释/执行。还有另一种技术,由于某些原因,这些技术并不是那么流行:“冻结”虚拟机的运行时间并转储/序列化环境(符号绑定,状态,代码(不管是什么))转换成图像,然后您可以传输,加载和执行。 因此,您不会以通常的方式“编写”您的代码,但可以在“运行时”使用新符号修改环境。 我看到了巨

    4热度

    1回答

    通常在一个动态类型的编程语言中,对象struct有一个用于标识对象类型的标签字段。 例如: struct myObject { int tag; ... } 所以很容易进行使用基于标签领域的switch语句不同的动作。 例如: ​​ 在我的情况,而不是我使用了指向表示该对象的类一个void * isa指针整型标记字段。一切都很好,希望不要使用优雅的switch语句,我不得

    2热度

    1回答

    我有一个抽象语法树,我需要将它转换为虚拟机的程序集。我不知道如何最好地做到这一点,所以我开始使用一串字符串模板。我的意思伪代码示例,说需要编译一个简单的if语句有一个条件: std::string compile_if(Node* n) { std::string str = ""; curLabel = nLabels++; str += compile_com

    -1热度

    1回答

    这里就是一个证明: theory Example imports Main begin datatype natural = Zero | Succ natural lemma "⋀ n. n = Succ m ⟹ n ≠ Zero" proof - fix n assume "n = Succ m" from this show "n ≠ Zero" by (metis

    1热度

    2回答

    在Clojure或Haskell中,用户可见的主要数据结构(列表,数组,地图,集合等)的主数据结构是不可变的吗?是否有任何“微小”VM(对于任何编程语言)? “微小”我的意思是一个VM,其实现简单,简洁和可移植性是关键点:认为Lua或TinyScheme。

    1热度

    1回答

    我建立了一个虚拟机中C.而对于这一点,我有指令 ​​ 我保存的命令,并在32位的值。前8位用于命令,其余为值。 8位 - >操作码 24位 - >立即值 对于这种使一个宏 #define PUSHC 1 //1 is for the command value in the Opcode #define IMMEDIATE(x) ((x) & 0x00FFFFFF) UPDATE: **#d

    0热度

    1回答

    所以我做了一个基本的基于堆栈的虚拟机和一个编译字节码的编译器,但是我遇到了一个我不知道如何解决的问题。 我需要检查的东西,如除以零和堆栈溢出并抛出运行时错误,但我明白这样做的唯一方法是使用异常(我在C++中执行此操作),或通过编写ifs我。但是,如果将所有的地方放在一起,将使虚拟机真的很慢。 什么是实现运行时错误的最佳方式,理想情况下,只有在引发实际错误时才使用CPU?

    2热度

    3回答

    我正在阅读LLVM并试图学习编译器设计。我的问题是:如果有任何专门的Scala运行时计划,并且在其他运行时(如JVM)上具有字节代码可移植性,则同样也存在任何现有的LLVM实现。