有人能解释一下Lua的解释器为什么如此快吗?
2013-11-14 18:39:34
收藏:0
阅读:121
评论:2
我一直在查看Lua独立解释器的源代码,但我目前还没有完全理解它。
也许我的谷歌搜索技能已经磨损了,但我还没有找到一个好的解释如何工作的说明。Lua的代码似乎针对性能进行了优化,而不是可读性。
点赞
用户68204
Lua 的核心操作是首先将源代码文本编译成中间形式,称为字节码,然后由解释器执行。将代码编译成字节码可以提高性能,部分原因是只需执行一次昂贵的词法和语法分析,并且提供了进行优化的机会;如果没有编译阶段,这些优化将极为困难。字节码是一个寄存器虚拟机的机器语言。它的设计很好地符合 Lua 的语义,并且易于解释。
独立的可执行文件只需加载 Lua 核心,执行任何影响一命名脚本之前生效的选项(例如 -l 和 -e),编译、加载和执行命名脚本,并以通常的方式将状态返回给操作系统。
为了处理错误,lua.c 中的一个混淆之处在于除了创建 Lua 状态之外,所有实际工作都委托给函数 pmain 而不是仅在 main 中执行。 这允许在受保护的上下文中调用 pmain,从而可以捕捉到它抛出的错误,而不会导致 main 的异常终止。
虽然 Lua 核心的源代码比较晦涩,但其文档非常详细。要深入了解它,需要具备相当的编译器设计、语言设计、虚拟机等背景知识。
已经有许多学术论文涉及到该语言、其实现和应用。这些论文将提供有关某些决策为什么被做出,并在某些情况下被修改的宝贵信息。
Lua 用户 Wiki 有一些页面专门探讨该语言几个特性的内部机制,以及有关其使用和扩展的大量内容。
最后,我要提到标准库模块的源代码比核心源代码更易于理解。它将始终提供与将外部库与 Lua 进行接口的技巧的可靠示例。
2013-11-13 19:28:36
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
有两种感知速度的来源:脚本编译和脚本执行。
脚本编译使用递归下降解析器结合优先级表达式解析器。请参见http://www.lua.org/source/5.1/lparser.c.html。
脚本执行将指令解释给虚拟机。这台机器之所以快速,是因为它专门用于Lua的语义,并且还因为它是基于寄存器的虚拟机,这比早期版本的Lua中使用的基于堆栈的虚拟机更快。请参见http://www.lua.org/source/5.1/lopcodes.h.html。