标签: vm-implementation

除了实际入侵代码之外,什么是了解虚拟机实施的最佳方式?

我想了解有关VM实现和优化的更多信息.现在我正在用JRuby贡献(以一种小的方式),并且还使用我在VM中运行的类似lisp的语言实现来播放/编写.

但是,我希望获得有关使用VM和设计它们的更多信息.除了阅读/使用现有代码之外,是否有适合此类信息的良好资源?我并不反对这样做,我只是想知道是否还有其他来源我可以调查.

compiler-construction programming-languages vm-implementation

7
推荐指数
3
解决办法
1512
查看次数

无堆栈VM实现会出现哪些C集成问题?

无堆栈VM我指的是在堆上维护自己的堆栈而不是使用系统"C-stack"的实现.这有很多优点,如continuation和serializable状态,但在C-bindings方面也有一些缺点,特别是对于C-VM-C类型的回调(或VM-C-VM).

问题是这些缺点到底是什么?有人能举一个真实问题的好例子吗?

c binding stackless vm-implementation

7
推荐指数
1
解决办法
705
查看次数

为C的子集实现基于堆栈的虚拟机

大家好,我目前正在实施一种简单的编程语言来学习,但我需要一些建议.目前我正在设计我的口译员,我遇到了一个问题.

我的语言是C的一个子集,我在堆栈解释器实现方面遇到了问题.在下面的语言中将编译:

somefunc ()
{
    1 + 2;
}

main ()
{
    somefunc ();
}
Run Code Online (Sandbox Code Playgroud)

现在这没关系,但是当计算"1 + 2"时,结果被推到一个堆栈然后函数返回但是堆栈上仍然有一个数字,并且不应该存在.我怎样才能解决这个问题?

我想过在函数调用之前保存堆栈的"状态"并在函数调用之后恢复"状态".例如,保存堆栈上的元素数量,然后执行函数代码,返回,然后从堆栈中弹出,直到我们拥有与之前相同数量的元素(如果函数返回了某些内容,则可能为+1).

有任何想法吗?谢谢你的任何提示!

c++ interpreter vm-implementation

7
推荐指数
1
解决办法
1527
查看次数

开源虚拟机

我正在寻找一个开源虚拟机:

  • 快速尽可能轻巧
  • 支持最小的字节码集(如LLVM IR)
  • 可以从C++应用程序轻松嵌入
  • 跨平台(Linux,Windows和OS X)
  • x86支持

c++ jit garbage-collection vm-implementation

7
推荐指数
3
解决办法
3840
查看次数

jvm的抽象机器概念

我试图理解将java实现为抽象或虚拟机的真正优势,或者换句话说,将语言编译为抽象机器的语言的优势.就平台独立性而言,我正在考虑以下两种替代实现:

  • 只是有一个解释器,它直接将java转换为运行它的机器的机器代码,并为不同类型的机器提供多个这种解释器的实现.

  • 第一个选项在空间方面效率不高,那么如何将源代码编译为中间语言,这种语言不是抽象机器的语言,而只是一些可以解释为机器代码然后具有这种解释器的多个实现的语言.

如果不考虑性能如何将抽象机器与这些选项进行比较.换句话说,如果java字节代码不是虚拟机的语言而只是一些中间语言会怎么样.哪些功能和优点会丢失(性能除外)?

java jvm vm-implementation

7
推荐指数
1
解决办法
3472
查看次数

为什么Lua旨在生成中间操作码?

我正在阅读Lua的源代码,并且惊奇地发现它被实现为生成一些奇怪的指令(例如GETUPVAL,FORLOOP等).然后这些操作码由虚拟机执行.这样做有什么好处(与基于AST的纯解释器相比?)

谢谢.

lua vm-implementation

7
推荐指数
2
解决办法
2100
查看次数

在更改vm原语时调试VM中的解释器

上下文

作为一个大学项目,我们想要改变pharo vm以使用对象表,看看会发生什么.

我们使用来自github和VMMaker 的pharo-vm克隆.构建VM工作正常.

为了开始,我们添加了一个返回增量Integer的原语:

InterpreterPrimitives>>primitiveIntegerIncrement
    "increments an integer"
    self pushInteger: self popInteger + 1 .
Run Code Online (Sandbox Code Playgroud)

StackInterpreter class>>initializePrimitiveTable据此修改

MaxPrimitiveIndex := 576.
"... and so on ..."
    (575 primitiveFail)
    (576 primitiveIntegerIncrement))
Run Code Online (Sandbox Code Playgroud)

它有效.

问题

当我们对VM进行更改时,我们想要在SmalltalkImage中进行测试运行,因此我们不需要编译并看到它不起作用.

就像是:

StackInterpreter test: '1 inc'
Run Code Online (Sandbox Code Playgroud)

如果原语错误或发生错误,我可以调试.当然需要做得更多,但我怎样才能做到这一点?

我们尝试了什么

  1. VMMaker-InterpreterSimulationStackInterpreterSimulator.尝试评论中的代码

    DoIt
        ^ (StackInterpreterSimulator new openOn: Smalltalk imageName) test 
    
    Run Code Online (Sandbox Code Playgroud)

    错误:

        displayForm := 'Display has not yet been installed' asDisplayText form.
    
    Run Code Online (Sandbox Code Playgroud)

    ByteString不明白 asDisplayText

  2. (CogVMSimulator new openOn: Smalltalk imageName) test 
    (InterpreterSimulator …
    Run Code Online (Sandbox Code Playgroud)

smalltalk squeak pharo vm-implementation

7
推荐指数
1
解决办法
267
查看次数

为什么Android上的每个应用程序都有单独的VM(Dalvik/ART)实例?

正如标题所述,
为什么Android上的每个App都有单独的VM(Dalvik/ART)实例?(需要它)

如果Android操作系统选择了单个虚拟机运行所有应用程序的模型,会发生什么?

android virtual-machine dalvik vm-implementation

7
推荐指数
2
解决办法
643
查看次数

语言引擎 VS。运行时 VS。进程虚拟机

由于 JavaScript 的日益流行,我发现听到(甚至在同一个演讲中)关于 JavaScript引擎、JavaScript虚拟机或 JavaScript解释器,在相同的上下文中并指同一个事物很有趣。

因此,我试图做一些研究,为什么所有这些流行语会同时共存(必须有一个原因),以及它们之间是否存在一些真正的(尽管细微的)差异。

我试图从许多不同的来源(我在以下几行中引用)总结到目前为止我学到的东西。如果我错了/误导了某些东西,请随时纠正我。

虽然我发现它们的运行时职责基本相同,但我也发现了一些主要区别:

  1. 进程虚拟机

  2. 运行时

    • 不会从本机代码中抽象出来
    • 使用编译技术(即时提前
    • 缺少 VM 进程/沙盒应用程序
    • 与底层操作系统紧密耦合/依赖
    • 示例:公共语言运行时、Android 运行时
  3. 语言引擎

问题:

  • 上面的列表是否准确,或者它只是基于使用相同名称的大多数常见运行时系统之间完全巧合的相似性的副产品?

  • 还有其他值得注意的差异吗?

interpreter runtime compilation javascript-engine vm-implementation

7
推荐指数
1
解决办法
406
查看次数

基于寄存器+堆栈的虚拟机如何工作?

我知道如何基于寄存器以及基于堆栈的虚拟机如何独立工作.我知道两者的优点和缺点.我想知道的是,有没有人试图合并这两者?

我试图在网上搜索这种虚拟机的存在,但无济于事.我得到的最好结果是一篇关于混合虚拟机(HyVM)的文章.如果确实为编程语言创建了这样的虚拟机,我将有兴趣查看其源代码以了解它是如何工作的.

也许有人可以指出我找到这样一个虚拟机的正确方向,或者将我链接到本主题中详述的文章或博客文章.

register-allocation stack-based cpu-registers ssa vm-implementation

6
推荐指数
1
解决办法
586
查看次数