问题标签 [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 回答
7930 浏览

android - 你将如何改进 Dalvik?Android的虚拟机

我目前正在写一篇关于Android平台的论文。经过一番研究,很明显Dalvik还有改进的空间。我想知道,您认为将开发人员的时间用于实现这一目标的最佳方式是什么?

JIT 编译似乎是一个大问题,但我也听说这在如此低资源的机器上使用有限。有没有人有资源或数据支持这一点?

是否还有其他选择需要考虑?除了开发一个强大的原生开发工具包来绕过虚拟机。

对于那些感兴趣的人,有一个关于Dalvik VM的讲座已经录制并在线发布。

欢迎任何想法,因为这个问题看起来很主观,我会澄清我将接受的答案必须有一些对提议的更改的理由。任何支持它的数据,例如 Sun JVM 在引入时的改进,都将是一个巨大的优势。

0 投票
7 回答
210 浏览

compiler-construction - 无法理解有关编译器优化的陈述

我对虚拟机在运行时和编译时的优化感兴趣。我的想法是优化在编译时是最有效和最简单的。

但是,在某些情况下,我的想法似乎是错误的。这在丹尼尔引用的史蒂夫耶吉的声明中很明显

[O] 由聪明的虚拟机在运行时执行优化通常更容易 - -。

为什么在运行时由 VM 执行的优化比在编译时更容易?

0 投票
2 回答
887 浏览

javascript - 多态内联缓存如何与可变类型一起使用?

多态内联缓存(PIC)通过按对象类型缓存实际方法来工作,以避免昂贵的查找过程(通常是哈希表查找)。

如果类型对象是可变的(即该方法可能在运行时被猴子修补成不同的东西),如何处理类型比较?

我想出的一个想法是一个“类计数器”,每次调整方法时都会增加,但是这似乎在一个猴子补丁严重的环境中会异常昂贵,因为它会杀死所有的图片那个类,即使它们的方法没有改变。

我确信必须有一个好的解决方案,因为这个问题直接适用于 JavaScript,并且 AFAIK 所有三个大型 JavaScript 虚拟机都有 PIC。

0 投票
4 回答
5226 浏览

programming-languages - 字节码设计?

我正在设计一种编译为中间字节码的编程语言。但是,我在设计字节码结构时遇到了很多麻烦。有人对如何用二进制表示程序有任何指示吗?或者,是否有任何资源(最好是免费的)来说明如何做到这一点?我发现的最接近的是 Lua 解释器 bytecode 的描述

编辑:更多信息:我正在实现自己的垃圾收集方案,该方案针对不变性和并发性进行了高度优化。为了效率,我需要一些独特的字节码指令,允许程序与垃圾收集方案交互。

0 投票
4 回答
334 浏览

.net - 芯片供应商是否提供任何 .Net JIT 支持?

我知道 ARM 实际上显然对 Java 和 SUN 有一些支持,但我还没有真正参考过任何支持 .Net JIT 编译器的芯片供应商。我知道 IBM 和 Intel 都支持 C 编译器,以及 TI 和许多嵌入式芯片供应商。当您想到它时,所有 JIT 编译器都是编译和优化的最后阶段,您会认为这与芯片供应商的专业知识非常匹配。也许为 VM 建立一个标准化的 Plug In 编译引擎是有意义的。

微软也将 .Net 定位到嵌入式 Windows 平台,因此它们是公平的游戏。

皮特

0 投票
3 回答
1139 浏览

neural-network - 虚拟机可以实现为神经网络吗?

免责声明:我不是数学天才,也没有任何编写神经网络的经验。所以,请原谅我碰巧在这里说的任何愚蠢的话。;)

我一直在阅读有关用于机器学习的神经网络的文章,但是在尝试编写简单的虚拟机时,我开始怀疑它们是否可以以其他方式应用。

具体来说,可以将虚拟机创建为神经网络吗?如果是这样,它将如何工作(如果必须,请随意在这里使用抽象描述)?

我听说过 Joycean Machine,但除了非常非常模糊的解释外,我找不到任何信息。

编辑:我在这里寻找的是对基于神经网络的 VM 将如何解释程序集的确切解释。如何处理输入等?每个单独的输入都会是一个内存地址吗?让我们集思广益!

0 投票
7 回答
28253 浏览

.net - Is the CLR a virtual machine?

I read a book which referred to the .net CLR as a virtual machine? Can anyone justify this? What is the reason we need the concept of virtual machines on some development platforms?

Isn't it possible to develop a native framework [one without virtual machine] that is fully object oriented and as powerful as .net?

The book which refers to CLR as virtual machine is "Professional .Net Framework 2.0".

0 投票
3 回答
8679 浏览

c - 如何编写链接器

我为 C 编写了一个编译器,它输出字节码。这样做的原因是能够为在多个平台上运行的嵌入式平台编写应用程序。

我有编译器和汇编器。

我需要编写一个链接器,并且被卡住了。

对象格式是一种自定义格式,围绕字节码解释器设计,所以我不能真正使用任何现有的链接器。

我最大的障碍是如何组织目标代码以输出链接的二进制文件。目前不需要动态链接。我需要先让静态链接工作。

0 投票
3 回答
523 浏览

c - 跨平台 VM 的 C 内存管理

我问了一个关于C 型尺寸的问题,我得到了一个很好的答案,但我意识到我可能无法很好地表述这个问题以对我的目的有用。

在转到软件工程师之前,我的背景是计算机工程师,所以我喜欢计算机体系结构,并且一直在考虑制作 VM。我刚刚完成了一个在 Java 上制作 VM 的有趣项目,对此我感到非常自豪。但是有一些法律问题我现在不能开源它,我目前有一些空闲时间。所以我想看看我是否可以在 C 上制作另一个 VM(速度更快),只是为了好玩和教育。

问题是我不是 C 程序,上一次我写一个非琐碎的 C 问题是在 10 多年前。我是 Pascal、Delphi,现在是 Java 和 PHP 程序员。

我可以预见到许多障碍,我正在努力解决一个障碍,那就是访问现有的库(在 Java 中,反射解决了这个问题)。

我计划通过数据缓冲区(类似于堆栈)来解决这个问题。我的 VM 的客户端可以在给我指向本机函数的指针之前将数据放入这些堆栈中。

本机函数的推送、拉取和调用可以由字节码触发(这就是稍后制作 VM 的方式)。

为了完整起见(以便您可以在您的机器上尝试),这里是 Stack 的代码:

在本机功能方面,我创建了以下用于测试目的:

p>

执行时,上面的代码返回:

这在我的机器上运行良好(Linux x86 32bits GCC-C99)。如果这也适用于其他操作系统/架构,那就太好了。但是我们必须注意至少三个与内存相关的问题。

1)。数据大小 - 如果我在相同架构上使用相同的编译器编译 VM 和本机函数,大小类型应该是相同的。

2)。字节序 - 与数据大小相同。

3)。内存对齐 - 这是一个问题,因为填充字节可能会添加到结构中,但是在准备参数堆栈时很难同步它(除了硬编码之外,没有办法知道如何添加填充)。

我的问题是:

1)。如果我知道类型的大小,有没有办法修改推拉功能以与结构填充完全同步?(修改为让编译器像 Datasize 和 Endians 问题一样处理它)。

2)。如果我按一个(使用#pragma pack(1))打包结构;(2.1) 性能损失是否可以接受?(2.2) 项目稳定性是否会受到威胁?

3)。填充 2,4 或 8 怎么样?哪个适合一般的 32 位或 64 位系统?

4)。您能否指导我查看有关 x86 上 GCC 的精确填充算法的文档?

5)。有没有更好的方法?

注意:跨平台不是我的最终目标,但我无法抗拒。此外,只要性能不那么难看,性能就不是我的目标。所有这些都是为了娱乐和学习。

对不起我的英语和很长的帖子。

提前感谢大家。

0 投票
7 回答
19870 浏览

vm-implementation - 我将如何编写虚拟机

我对虚拟机编程很感兴趣,没有什么像 virtualbox 或 vmware 那样花哨,而是可以模拟简单架构的东西,无论是 cisc 还是 risc,比如 Zilog、SPARC、MIPS 或 80686 架构模型。

我想通过这样做,制作同类型的模拟器会相对简单,我只是有兴趣将它用于体验而不是其他任何东西(作为我的第一个 C 项目,我宁愿在 C 中而不是在还要别的吗)。