问题标签 [vm-implementation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1589 浏览

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

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

我的语言是 C 的子集,我在堆栈解释器实现方面遇到问题。在该语言中,将编译以下内容:

现在这没关系,但是当计算“1+2”时,结果被压入堆栈,然后函数返回,但堆栈上仍然有一个数字,不应该有。我怎样才能解决这个问题?

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

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

0 投票
4 回答
3957 浏览

c++ - 开源虚拟机

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

  • 尽可能快速和轻量级
  • 支持最小的字节码集(如 LLVM IR)
  • 可从 C++ 应用程序轻松嵌入
  • 跨平台(Linux、Windows 和 OS X)
  • x86 支持
0 投票
3 回答
403 浏览

java - 有效地在不同的虚拟机之间复制对象

我有一种感觉,我要问一个“愚蠢”的问题,但我必须问......

我有2个虚拟机。

我想将一个对象的实例从一个复制到另一个,

是否可以在VM的堆中复制代表该对象的位,将其发送到另一个VM,就像另一个VM只需要在它的内存中分配位并在它的堆栈中添加一个引用到这个内存槽.. .?

目前,为了做这样的事情,我们序列化对象并反序列化它,这比直接复制实例效率低得多(计算方面)......解析是一种计算浪费......

JS 序列化示例:每个 VM 都是V8 (JavaScript) 的一个实例,一种方法是将对象转换为 JSON( JSON.stringify),将其发送给其他 VM,获取字符串并将其转换回对象(例如var myObject = eval('(' + myJSONtext + ')');) .. (JavaScript 在这里只是一个例子,这是某种序列化)

0 投票
2 回答
716 浏览

optimization - 字节码如何用于优化动态语言的执行时间?

我对一些优化方法或通用字节码设计感兴趣,与解释 AST 相比,它们可能有助于加快使用 VM 的执行速度。

0 投票
3 回答
8600 浏览

jvm - Java VM 有哪些替代方案?

当甲骨文就 Dalvik VM 起诉谷歌时,很明显,没有甲骨文的许可,你不能实施 Java 虚拟机(编辑:Matthew Flaschen 指出,甲骨文的说法可能无效。无论如何,我们目前有一种情况,甲骨文威胁 VM 实现。)。这可能成为 Java 的开源实现(如Apache Harmony)的死亡。

我不想讨论这起诉讼的影响或合法性。但作为一名 Java 程序员,我想更深入地研究替代方案,为每种情况做好准备。由于我将编译器的创建视为一个小问题,因此我的主要兴趣是替代 VM 实现,它们的用途与 JVM 相似。

我正在寻找的虚拟机应该满足一些条件:

  • 没有专利问题
  • 存在开源实现
  • 优化潜力/良好性能
  • 独立于平台(VM 可以移植到不同的平台而没有更大的障碍)

请为我添加一些建议。

0 投票
4 回答
500 浏览

java - 如何找出 JVM 对我的代码应用了哪些优化?

JVM(尤其是 HotSpot VM)以其可以在运行时应用的大量优化而闻名。

有没有办法查看某段代码并查看 JVM 实际对它做了什么?

0 投票
3 回答
1012 浏览

c++ - C++编码虚拟机

我没有用 C++ 编写太多代码,但是我呢?注意到我必须为所有内容运行这些构建脚本。人们如何在 Windows 机器上执行这些操作?无论如何,我正在考虑运行虚拟机,所以我不必用 python 和其他类似的安装来填充我的机器。

Windows上的其他人是如何做到的?

0 投票
6 回答
967 浏览

php - PHP 如何知道它使用(或知道)什么类型的变量?

我没有用很多语言做过很多编程,但我知道在 C(++) 中,你必须声明一个变量类型(int,char等)。

当然,在 PHP 中,您不必这样做。你可以$str = "something";稍后再开始$str = array("something" => "smells");,她很高兴。

PHP是如何编译的?它如何知道变量类型将是什么?它甚至在乎吗?

这个问题与我正在做的任何事情无关。我只是好奇。

编辑。

我需要稍微澄清一下这个问题。

在 C 中,如果我说:

它为 保留 x 个字节数y。如果y溢出,坏消息。

PHP 没有这种性质(至少我不认为它有)。

这对语言来说都是一样的。它怎么知道要预留多少?还是我将苹果与橙子进行比较?如果我说错了,您有什么好的主题可以阅读以更好地理解吗?

0 投票
4 回答
2239 浏览

python - python字节码,解释器和虚拟机

这是一个非常广泛的问题,我主要是在寻找可以了解以下内容的资源。

我知道 python 解释器是用 C 编写的,并生成要在同样用 C 编写的 python 虚拟机上运行的字节码(对吗?)。我的问题是有可能在 python 本身中实现这两者吗?我想我要去哪里是(技术)在python中编写类似OS的东西的可能性,特别是没有静态编译任何东西?

如果我理解正确,python 没有汇编程序,它也必须用 python 编写。这些事情在技术上(可行吗?)可以做到吗?或者python的动态类型会带来某种问题吗?

我对微处理器架构、汇编和机器代码略知一二,这是一名 EE 毕业生在学校学习的内容。但是对于像 python 这样的高级语言,我会迷失在整个画面中。

0 投票
7 回答
1147 浏览

java - Java到底是什么?

这个问题起初可能听起来很愚蠢,但也许根本不是。

  • Java 不是 Java 语言,大多数人都知道,因为您可以使用许多其他语言(如 Scala 或 Groovy )对 Java 进行编程

  • Java 不是具体的 VM 实现,因为那里有其他实现,不仅是 SUN、Microsoft 或 IBM。

  • Java 不是类框架,因为许多实现随意添加或遗漏类。

  • 甚至不需要使用通用的 VM 规范甚至 Java 字节码,请参阅Dalvik VM

  • 也许这只是他们共享的一套原则,不管这可能是什么。这绝对不是“一次编写,到处运行”,因为至少 Dalvik 和 Microsoft VM/J# 并非如此。

那么问题来了,Java到底是什么?甚至有一个确切的定义吗?

编辑 很多人似乎认为 java 只意味着编程语言。因此,支持 java 的手机必须是允许用户使用仅由 java 语言创建的类文件组成的程序的手机。如果这是真的,java 虚拟机/java 运行时环境/java 开发工具包将只为 java 制作,其他 jvm 语言将有自己对应的 xvm/xre/xdk。