问题标签 [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.
c++ - 使用 JIT 设计虚拟机
我正在开发一种为其自己的虚拟机编译的脚本语言,这是一种简单的语言,它具有处理某种数据(如点、向量、浮点数等)的指令。内存单元以这种方式表示:
指令是通用的,能够处理许多不同的操作数。例如
可以使用浮点数、向量、点、颜色根据操作数设置正确的目标类型。
主执行周期只是检查指令的操作码(这是一个包含联合来定义任何类型指令的结构)并执行它。我使用了一种简化的方法,其中没有寄存器,只有一大堆存储单元。
我想知道 JIT 是否可以帮助我获得最佳性能以及如何实现它。
正如我所说,到目前为止达到的最佳实现是这样的:
尝试 jit 编译是否容易/方便?但我真的不知道从哪里开始,这就是为什么我要问一些建议。
除此之外,在开发它时我还应该考虑其他建议吗?
这个虚拟机应该足够快来计算光线追踪器的着色器,但我还没有做过任何基准测试。
windows - 有什么方法可以在不使用 VM 的情况下在 Smalltalk 中进行开发?
我真的开始学习 Smalltalk。现在我正在使用Squeak,但是有什么方法可以在 Smalltalk 中开发而不使用虚拟机,但是像 IDE 之类的东西?
c - 实施 VM 的教程/资源
我希望自我教育的目的是为动态语言实现一个简单的虚拟机,更喜欢用 C 语言。像 Lua VM、Parrot 或 Python VM 之类的东西,但更简单。除了查看现有 VM 的代码和设计文档之外,是否有任何好的资源/教程来实现这一目标?
编辑:为什么要关闭投票?我不明白 - 这不是编程吗?如果我的问题有具体问题,请发表评论。
jvm - 什么是开发爱好语言的好 VM?
我正在考虑编写我自己的小语言。
我找到了一些选择,但请随时提出更多建议。
- 虚拟机
- 鹦鹉
- OSA
很多语言都在使用 JVM,但除非您编写类似 Java 的语言,否则 stdlib 提供给您的所有功能都会让您感到难看;它也不是很擅长动态的东西。
Parrot 似乎是一个很好的开发语言的虚拟机,但它有点被遗弃/未完成/爱好项目的味道。
OSA 是 Applescript 的动力,它不是一个特别知名的 VM,但我使用的是 Mac,它提供了良好的系统集成。
CLR + Mac 似乎不是一个好的组合......
我的语言将是一种面向对象的功能并发数据流语言,具有强类型化以及 Python 和 Lisp 语法的混合。听起来不错,嗯?
[编辑]
我现在接受了 Python,但我想了解更多关于 OSA 和 Parrot 的信息。
architecture - BEAM 和 JVM 之间有哪些基本的功能/架构差异?
BEAM 和 JVM 之间有哪些基本的功能/架构差异?
- 是的,我知道:一个最初是围绕 java 构建的,另一个是围绕 erlang 构建的
- 我了解 JVM(有点)并想比较它们的结构
- 例如,我知道 JVM 有一个全局 GC,而 BEAM 每个进程有一个
c++ - 将虚拟机作为应用程序的一部分实现的主要好处是什么?
我最近一直在研究的几个数据库在内部实现了一个虚拟机来执行各自的数据读取和写入。例如,查看这篇关于他们称之为“VDBE”的 SQLite 虚拟机的文章。我很好奇这种架构的好处是什么。我会假设性能是一个,但为什么像这样的虚拟机会运行得更快?事实上,这个额外的层似乎会导致它运行得更慢。所以也许是为了安全?还是便携性?反正就是好奇这个。
virtual-machine - 如何使用动态重新编译?
我注意到一些模拟器和虚拟机使用动态重新编译。他们是怎么做到的?在 C 中,我知道如何使用类型转换调用 ram 中的函数(尽管我从未尝试过),但是如何读取操作码并为其生成代码?该人是否需要预先制作组装块并将它们复制/批处理在一起?程序集是用 C 编写的吗?如果是这样,您如何找到代码的长度?你如何解释系统中断?
-编辑-
系统中断和如何(重新)编译数据是我最感兴趣的。经过更多研究,我听说一个人(没有可用的源代码)使用 js,阅读机器代码,输出 js 源代码并使用 eval 来“编译” js源码。有趣的。
virtual-machine - LLVM 中的虚拟机在哪里?
注意:标记为社区 wiki。
LLVM 中的低级虚拟机在哪里?
我看到我们有 llvm-g++ 和 c-lang,但对我来说,LLVM 几乎就像模拟器的 Valgrind 一样,在它上面执行指令,我可以编写程序来检测运行代码/在某些条件下中断发生/等...
像这样基于 LLVM 构建的工具在哪里?
谢谢!
vm-implementation - 哪些应用程序虚拟机是用高级语言编写的?
有哪些用高级语言编写的应用程序虚拟机?C/C++ 看起来像是首选语言(原因很明显)。
我在谷歌上找到的至少有两个用 Java 编写(都是元循环):JikesRVM 和 Maxine。
你还发现了什么?
jvm - 为什么 JVM 是基于栈的,而 Dalvik VM 是基于寄存器的?
我很好奇,为什么 Sun 决定让 JVM 堆栈为基础,而 Google 决定让 DalvikVM 以寄存器为基础?
我想JVM不能真正假设目标平台上有一定数量的寄存器可用,因为它应该是平台独立的。因此,它只是将寄存器分配等推迟到 JIT 编译器。(如我错了请纠正我。)
所以安卓的人想,“嘿,那太低效了,让我们马上去一个基于寄存器的虚拟机......”?但是等等,有多个不同的 android 设备,Dalvik 的目标寄存器是多少?Dalvik 操作码是否针对一定数量的寄存器进行了硬编码?
市场上所有当前的 Android 设备是否具有大致相同数量的寄存器?或者,在 dex 加载期间是否执行了寄存器重新分配?这一切如何结合在一起?