Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
LuaJIT';跟踪编译器的工作是什么?_Lua_Luajit - Fatal编程技术网

LuaJIT';跟踪编译器的工作是什么?

LuaJIT';跟踪编译器的工作是什么?,lua,luajit,Lua,Luajit,我一直在阅读JIT和LuaJIT的跟踪编译器,特别是,最后我提出了一些问题 据我所知,LuaJIT的JIT不像Java的HotSpot那样编译热方法,它编译源自循环的热路径。这是否意味着如果某个东西不是来自循环(比如,我从C-api调用Lua函数),那么代码将永远不会被JIT?当你打另一个循环时会发生什么?第二个循环的路径是JIT'ed,然后来自该循环的新路径也是JIT'ed,还是第二个循环是同一路径的一部分 解释器如何选择最佳热路径?假设我有一个整数->字符串的哈希表。现在假设我调用了表[x]

我一直在阅读JIT和LuaJIT的跟踪编译器,特别是,最后我提出了一些问题

据我所知,LuaJIT的JIT不像Java的HotSpot那样编译热方法,它编译源自循环的热路径。这是否意味着如果某个东西不是来自循环(比如,我从C-api调用Lua函数),那么代码将永远不会被JIT?当你打另一个循环时会发生什么?第二个循环的路径是JIT'ed,然后来自该循环的新路径也是JIT'ed,还是第二个循环是同一路径的一部分

解释器如何选择最佳热路径?假设我有一个整数->字符串的哈希表。现在假设我调用了表[x],其中x是3和5倍,它们已经成为热路径和jitted,那么解释器如何决定为表[x]调用哪个jitted代码,其中x是4


另一件一直折磨着我的事情。由于路径是编译的,而不是函数,跟踪编译器不需要更多内存吗?因为你不能真正重复使用另一个路径的编译代码,而且在一般情况下,路径可能比单个函数大…

你需要了解的第一部分是LuaJIT,你可以在wiki上查看它,这是LuaJIT解释器运行和优化的内容,因此执行跟踪以确定需要编译的内容和各种优化,以及其他优化,如跟踪路径中热循环的循环展开

第二个要检查的地方是

问:我在哪里可以了解到更多关于 卢阿吉特

我计划写更多关于内部的文档 卢阿吉特的。同时,请使用以下谷歌搜索引擎 搜寻有关文件:

搜索:

搜索:

搜索:

搜索:

搜索:

下面是LuaJIT的创新特性列表。还有,你知道,阅读 来源当然是获得启示的唯一途径。:-)

教唆非常开玩笑(主要是因为Mike专注于开发而不是文档),最重要的部分是最后一句,源代码非常干净,是了解LJ如何发挥其魔力的唯一实际方法。此外,搜索引擎还提供了更多关于搜索内容的线索

Wikipedia有一个关于跟踪JIT的文章,但是,底部的文章对于帮助理解LJ源代码中使用的概念最有用

一些源文件(在C中)帮助您入门

  • :核心跟踪记录器,将字节码转换为IR
  • :更多跟踪管理
  • :处理/创建跟踪快照
  • :记录快速功能的数据
  • :记录C数据操作

迈克·帕尔在LuaJIT邮件列表上的回复相当详细。

我了解字节码和IR的工作原理,以及跟踪编译器的主要部分,至少我认为我了解:p我只是有一些不确定的细节。我已经远离了LuaJIT源代码,因为我还没有学会汇编(而且很多LuaJIT都是用汇编编写的,对吗?),无论如何,我将通读您的建议,看看这是否会带来启示。伟大的回答顺便说一句+1@RobinHeggelundHansen:从技术上讲,只有线程解释器在汇编中(这是dynasm使用的一种特殊抽象),实际的跟踪器和代码发射器都在C中(这有点奇怪,因为字段名非常紧凑,但一旦理解了约定,就更容易了)和Lua,我通常使用VS来让我更容易探索源头。我已经在我的答案中添加了一些包含许多跟踪方面的源文件