vm-implementation相关内容

即时编译和堆栈替换之间的区别

他们几乎都做同样的事情.确定该方法是热的并编译它而不是解释.使用 OSR,您只需在编译后立即转到已编译的版本,这与 JIT 不同,后者在第二次调用方法时调用已编译的代码. 除此之外,还有其他区别吗? 解决方案 一般来说,Just-in-time编译是指在运行时编译原生代码并执行它而不是(或除了) 口译.一些虚拟机,比如 Google V8,甚至没有解释器;他们 JIT 编译每个被执行 ..
发布时间:2022-01-16 11:50:30 Java开发

现代虚拟机如何处理内存分配?

我正在开发一个用 C 编写的简单堆栈机器,主要用于学习目的.在使用 malloc/free 进行内存操作后,我认为从现代虚拟机中读取一些内存分配特定代码是个好主意. 我下载了 Lua 源代码并开始阅读.过了一会儿,我发现里面有很多宏的东西,我找不到真正的内存分配的代码(即malloc调用). 查找.-exec grep -i "malloc" '{}' \;-打印 它只打印了一些名称中带 ..
发布时间:2021-12-30 20:49:58 其他开发

PHP 请求生命周期

好的,所以我对 PHP VM 的了解还比较幼稚,最近我一直在想一些事情.特别是,Web 应用程序在 PHP 中的请求生命周期是什么样的.我找到了一篇这里的文章,它给出了很好的解释,但我觉得必须有更多的故事. 根据文章的解释,每次向服务器发出请求时都会解析并执行脚本!这对我来说似乎很疯狂! 我正在尝试通过编写一个利用许多 PHP 5.3/5.4 功能的微型框架来学习 PHP.因此,我开始 ..
发布时间:2021-12-29 15:52:05 PHP

这是什么 asm 样式 "x |0"一些 javascript 程序员现在正在使用?

我见过一些对性能至关重要的 javascript 代码,例如 这个项目 上的代码使用与 0 的按位或运算.例如: GameBoyAdvanceCPU.prototype.write8 = 函数(地址,数据){地址 = 地址 |0;数据 = 数据 |0;this.memory.memoryWrite8(address | 0, data | 0); 我知道带有“|0"的楼层编号的用例,但这里的情 ..

如何在 x86 汇编中编写自修改代码

我正在考虑为我最近一直在研究的业余虚拟机编写 JIT 编译器.我知道一点汇编,(我主要是一个 C 程序员.我可以阅读大多数汇编并参考我不理解的操作码,并编写一些简单的程序.)但是我很难理解这几个例子我在网上找到的自修改代码. 这是一个这样的例子:http://asm.sourceforge.net/articles/smc.html 所提供的示例程序在运行时进行了大约四种不同的修改,其 ..
发布时间:2021-12-18 09:12:29 其他开发

在Python虚拟机中创建新语言

是否可以为Python虚拟机创建新语言?我正在阅读 http://late.am/post/2012/03/26/exploring-python-code-objects ,博主在其中讨论Python代码对象.在其中,他讨论了将代码对象分解为字节码以及其中的符号的含义. 这使我认为可以使用替代方法来构造此字节码.我很好奇能否在Python字节码中创建沙盒语言,以便Python可以加载它的能 ..
发布时间:2020-07-14 00:35:03 Python

为什么python VM拥有co_names而不是仅仅使用co_consts?

由Python编译器生成的代码对象包含一个在指令中使用的常量元组(名为co_consts),还包含一个包含名称的元组(名为co_names). 为什么有两个不同的列表?仅仅使用co_consts来命名也不会更简单吗? 解决方案 请考虑以下功能. def f(x): x += n return x * 4 此处x是本地名称,其值可以更改. 4是一个常数.它的价 ..
发布时间:2020-07-14 00:34:58 Python

简单口译语言设计与开发执行

我需要一些资源来实现简单的虚拟机和解释语言.实用的东西是最有用的.我已经阅读了《虚拟机实施》一书,发现它已经很老了,并不代表我今天看到的虚拟机.同样,如果有人知道一种相当简单的语言,那也很好. 解决方案 检查 Lua 5.0的实现 ..
发布时间:2020-07-14 00:34:57 其他开发

编译AST到程序集

我有一个抽象语法树,我需要将其转换为虚拟机的程序集.我不知道如何最好地做到这一点,所以我开始使用一串字符串模板.我的意思的伪代码示例,即需要编译具有一个条件的简单if语句: std::string compile_if(Node* n) { std::string str = ""; curLabel = nLabels++; str += compile_com ..
发布时间:2020-07-14 00:33:53 其他开发

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

基于寄存器的虚拟机如何工作? 我正在寻找有关基于寄存器的虚拟机如何工作的介绍. 有人可以帮忙吗? 谢谢. 解决方案 具有可用源代码的基于寄存器的VM的一个示例是 Lua 5.0的实现 Lua本身的作者. LuLu 在Lua中实现的Lua VM,是日语博客的伴侣. Lua 5.1 VM指导的简洁介绍从经常为Lua社区做出贡献的人. ..
发布时间:2020-07-14 00:33:43 其他开发

Parrot VM对最终用户有什么好处?

Parrot虚拟机面向最终用户(软件开发人员)? 例如,如果我可以直接针对Perl或Python编程,为什么要在Parrot下为它们编程呢? 解决方案 基本上是VM的典型优势(可移植性,运行时优化等).在主页上: 一旦程序被编译为可在虚拟机上运行,​​它将在已实现VM的任何平台上运行. Parrot与典型VM的不同之处在于,它旨在支持任何现有语言,而不仅是特定语言.因此, ..
发布时间:2020-07-14 00:33:33 其他开发

PHP请求生命周期

好的,所以我对PHP VM的了解还比较幼稚,最近我一直在想一些事情.特别是,对于Web应用程序,请求生命周期在PHP中看起来是什么样的.我在此处找到了一篇很好的解释,但我觉得有故事的更多内容. 根据本文的解释,每次向服务器发出请求时,便会解析并执行脚本!在我看来,这太疯狂了! 我正在尝试通过编写一些利用许多PHP 5.3/5.4功能的微型框架来学习PHP.因此,我必须考虑 static ..
发布时间:2020-07-14 00:33:31 PHP

任何汇编语言都被认为有用的最低指令集是什么?

我通常在学习汇编程序设计,因此我决定尝试用软件实现“虚拟微处理器",该软件具有寄存器,标志和RAM,可以使用变量和数组来实现.但是由于我只想模拟任何微处理器的最基本行为,所以我想创建一种只包含基本指令的汇编语言,而只有这些指令不能使用.我的意思是,有些汇编语言可以执行乘法和交换寄存器值等操作,但是这些操作不是基本操作,因为您可以使用更简单的指令来实现它们.我不想执行类似的指令. 我可以想象一 ..

回溯正则表达式实现的优化技术

我正在尝试基于探索Ruby的正则表达式算法.编译后的正则表达式将转换为虚拟机命令数组;为了回溯,当前命令和输入字符串索引以及捕获组信息都保留在堆栈中. 在正则表达式匹配:虚拟机方法中,Cox提供了更详细的信息关于如何将某些正则表达式组件编译为VM命令的内容,尽管所讨论的实现有所不同.根据这些文章,我的实现对于标准分组,字符类和重复组件非常有效. 现在,我想看看这种类型的实现有哪些扩展和 ..
发布时间:2020-05-21 21:02:11 其他开发

清除V8的“隐藏类"概念

我已经阅读了一些有关V8隐藏类的文章.但是,我仍然有一些疑问: 如果说有两个对象: var a = { } a.x = 5 a.y = 6 var b = { } b.y = 7 b.x = 8 它们是否由于同一个隐藏类而结束或仅仅是因为一个隐藏了一个0 + x + y而另一个消失了?据我了解,他们有不同的班级,但只是想确保我明白了. 然后,我们遇到这种情况: fun ..
发布时间:2020-05-21 20:35:45 其他开发

什么是原始的Forth运算符?

我对实现Forth系统感兴趣,只是我可以获得构建简单的VM和运行时的经验. 从Forth开始时,通常通常首先了解堆栈及其操作符(DROP,DUP,SWAP等),因此很自然地将它们视为原始操作符.但事实并非如此.它们中的每一个都可以分解为直接操作内存和堆栈指针的运算符.后来,人们了解了可用于实现DUP,SWAP等(ha!)的存储(!)和获取(@). 那么什么是原始运算符?哪些必须在可以构 ..
发布时间:2020-05-21 19:58:57 其他开发

在64位系统上以低地址分配内存的最可靠/可移植的方法是什么?

我需要分配大的内存块(供我的自定义分配器使用),该内存块位于虚拟地址空间的前32GB之内. 我想像一下,如果我需要1MB的块,我可以从低地址开始使用mmap和MAP_FIXED_NOREPLACE(或VirtualAlloc)以低至1MB的增量进行迭代,直到调用成功.从上一个成功的块继续进行下一个. 这听起来很笨拙,但至少在抵御OS地址空间布局更改和ASLR算法更改方面会有些健壮.根据 ..