问题标签 [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 投票
6 回答
2826 浏览

javascript - 是否有用 Python 编写的 JavaScript (ECMAScript) 实现?

是否有任何用Python 编写的 JavaScript (ECMAScript) 实现?即使它的实现很慢也没关系。

0 投票
1 回答
349 浏览

c - 如何将 C 函数公开给自定义虚拟机?

我正在开发一个我希望能够与 C 交互的虚拟机。反过来,将虚拟机功能暴露给 C 代码是相当容易的,我无法解决的是将 C 函数暴露给一个虚拟机。

我希望能够像这样在虚拟机上动态注册 C 函数:

然后在我的虚拟机中,将参数推送到堆栈,然后:

问题是在不知道函数需要多少参数以及什么类型的情况下,我不确定是否可以使用函数指针。

是否有可以在这种情况下使用的通用函数指针类型?有人可以引导我朝着正确的方向前进吗?

0 投票
2 回答
15641 浏览

performance - 为什么很难用 JIT 编译器击败 AOT 编译器(在应用程序性能方面)?

我认为 JIT 编译器最终会在编译代码的性能方面击败 AOT 编译器,因为 JIT 的固有优势(只能使用运行时可用的信息)。一个论点是 AOT 编译器可以花费更多时间编译代码,但服务器 VM 也可能花费大量时间。

我确实理解 JIT 在某些情况下似乎确实击败了 AOT 编译器,但在大多数情况下它们似乎仍然落后。

所以我的问题是,阻止 JIT 编译器击败 AOT 编译器的具体、棘手的问题是什么?

编辑:
一些常见的论点:

  • AOT 编译器可以花费更多时间进行高级优化->如果您运行服务器虚拟机数天,您可以花费相同的时间,如果不是更长的话。
  • 字节码解释是有成本的->现在大多数 JIT 编译器都会缓存本机机器指令。

另一个编辑:
有关特定示例,请参阅本文:提高 Swing 性能:JIT 与 AOT 编译。从我从这篇文章中可以了解到,作者基本上是在说,当没有热点时,拥有运行时信息的优势会降低,因此没有 JIT 开销的 AOT 会胜出。但是40%??这似乎没有多大意义。仅仅是被比较的 JIT 编译器没有针对这种情况进行调整吗?或者它是更基本的东西?

0 投票
3 回答
4768 浏览

dart - 有可用的 Dart VM 吗?

刚读到谷歌宣布对新的网络编程语言 Dart 进行早期预览的新闻。dartlang.org上的文档指出:

你将能够以多种方式运行 Dart 代码:

  • 将 Dart 代码翻译成可以在任何现代浏览器中运行的 JavaScript:Chrome、Safari 5+ 和 Firefox 4+(即将推出更多浏览器支持)。

  • 直接在服务器端的虚拟机中执行 Dart 代码

  • 使用 Dartboard 在任何浏览器窗口中编写、修改和执行小型 Dart 程序

我很好奇是否已经有 VM 可用于运行 Dart 代码?无论如何都找不到它,也许它可以通过一些 beta 程序获得?

0 投票
5 回答
235 浏览

multithreading - 搜索良好的嵌入式和托管语言对

我正在寻找两种(一种?)语言。其中一个是主机,能够运行一些“环境”,第二个是可以用来编写在该环境中运行的“代理”的脚本。

一些细节:

  1. 主机应该能够运行多个“代理”(嵌入式语言线程),理想情况下能够限制每个线程一次执行的指令数量(尽管欢迎更复杂的控制方式)

  2. 嵌入式线程应该只能访问主机显式公开的对象

  3. 嵌入式线程应该被隔离。没有共享内存,所有通信都通过主机进行

  4. 嵌入式语言应该相当简单,具有动态类型

  5. 托管语言应该是相当高级的

  6. 性能不是主要问题

我在考虑 Python 是嵌入 Lua 的主机,例如Lunatic Python或一些 JVM 语言(Scala / Groovy ?),但我不确定嵌入式线程真正隔离的可能性(参见 2、3)。所以我正在寻找任何想法、框架、成功的实现等......

0 投票
1 回答
163 浏览

compiler-construction - 我可以在 Linux 上使用已安装的 parrot-devel 包中的 Parrot 编译器工具吗?

我有兴趣使用 Parrot VM 创建自己的语言。

我已经安装了 parrot-devel 包以及 parrot 和依赖项(使用 Linux Mint 11 下的 Synaptic 包管理器)。

我找到了一个教程(http://en.wikibooks.org/wiki/Parrot_Virtual_Machine/Squaak_Tutorial/Introduction)说要运行:

我最终在 /usr/lib/parrot/2.​​6.0/tools/dev/mk_language_shell.pl 找到了该脚本

这是我运行它时发生的事情:

现在我不知道包是否将这些文件放在正确的位置。我可以在它前面放一个“sudo”(?),但这可能忽略了我如何安装鹦鹉的一个真正问题。

问题:

我可以从我安装的这些包中使用 Parrot 编译器工具吗(而不是卸载包、克隆 git 存储库、学习如何从源代码制作 parrot 等)?

如果是这样,需要什么进一步的准备才能真正开始使用这些工具而不会出错?

0 投票
2 回答
870 浏览

class - JVM 如何决定一个类是否“属于”(例如内部或嵌套类)另一个类?

0 投票
3 回答
1154 浏览

lisp - 对 8 位系统上类似 lisp 语言的 VM 感兴趣

我正在寻找可以在 8 位微处理器上运行并支持动态语言的推荐虚拟机。我想要一个 VM 解决方案,因为我认为在代码密度、可移植性和拥有更小的解释器的能力方面有好处,从而为更大的程序留出了更多空间。

我的目标是在 6502 微处理器之类的东西上运行一个完整的 LOGO 解释器,遵循“Apple II 的 LOGO”语法。

我已经看到对PyMite、Java“微型版”的引用,当然现在可以使用 1970 年代的 UCSD p-System 源。

欢迎提出建议。

0 投票
1 回答
1453 浏览

language-agnostic - 为什么基于寄存器的虚拟机优于基于堆栈的虚拟机?

为什么基于寄存器的虚拟机优于基于堆栈的虚拟机?

具体来说,在Parrot VM 的文档中,设计者解释了注册机的好处:

[...] 许多高级语言程序由嵌套的函数和方法调用组成,有时使用词法变量来保存中间结果。在非 JIT 设置下,基于堆栈的 VM 将多次弹出然后推送相同的操作数,而基于寄存器的 VM 将简单地分配正确数量的寄存器并对其进行操作,这可以显着减少操作量和 CPU 时间。

但是为什么相同的操作数被推了很多次?

0 投票
2 回答
1429 浏览

android - Dalvik VM 如何在方法调用之间保存和恢复其寄存器?

从语义上讲,Dalvik VM 对每个方法都有一组新的寄存器,并且没有访问调用堆栈的指令。但就其实现而言,寄存器应该在方法调用时以某种方式保存,并在方法返回时恢复。Dalvik(谷歌的实现)如何做到这一点?