高手问答第 219 期 —— 深入探讨 Lua 语言的核心语法和实现原理

局长 发布于 11/27 18:26
阅读 3K+
收藏 28

OSCHINA 本期高手问答(2018 年 11 月 28 日 — 12 月 4 日)我们请来了@zxh404 张秀宏为大家解答关于 Lua 编译器和虚拟机方面的问题。

张秀宏,资深服务器开发工程师,有多年的 Java 和游戏服务器开发和架构经验,对高级语言虚拟机有非常深入的研究。曾在 EA、乐元素等游戏公司担任高级服务器工程师,现任某创业公司架构师。

Lua 是一门强大、高效、轻量、可嵌入的脚本语言。Lua 语言设计十分精巧,在一个很小的内核上可以支持函数式编程、面向对象编程、元编程等多种编程范式。

也因为它足够小巧,并且有很好的流行度。麻雀虽小,五脏俱全,这使得可通过它实现虚拟机、编译器、标准库这些底层的功能。

Lua 大约于1993年诞生于巴西 PUC-Rio 大学,之后在游戏领域大放异彩,被很多游戏客户端选为脚本语言,比如知名游戏《魔兽世界》、《模拟城市4》、《愤怒的小鸟》等。很多流行的游戏引擎也选择 Lua 作为脚本语言,比如 CryENGINE2、Cocos2d-x 及 Corona SDK 等。另外,也有很多游戏服务端采用 C/C++ 搭配 Lua 的开发模式。除了游戏领域,Lua 在其他地方也有很多应用,例如被广泛使用的 NoSQL 数据库 Redis 就使用 Lua 作为脚本语言扩展其能力。 

本期问答内容

1.脚本语言工作原理
2.Lua 标准库
3.Lua 虚拟机和 Lua API
4.Lua 语法和编译器

或者其它 Lua 相关的问题,也欢迎大家积极提问!

为了鼓励踊跃提问,@华章 会在问答结束后从提问者中抽取 5 名幸运会员赠予《自己动手实现Lua:虚拟机、编译器和标准库》一书。

购买链接:京东

OSChina 高手问答一贯的风格,不欢迎任何与主题无关的讨论和喷子。

下面欢迎大家就架构问题向@zxh404 张秀宏提问,请直接回帖提问。

加载中
0
华章
华章

OSC 第 219 期 —— 深入探讨 Lua 语言的核心语法和实现原理

@喷子    @AmCoder    @dwingo    @西夏一品堂    @秋兰作配

恭喜以上五位网友获得自己动手实现Lua:虚拟机、编译器和标准库一本

请私信@华章   告知快递信息(格式:姓名+电话+地址+邮编)

0
Li_Peng
Li_Peng

@zxh404 您好,我想请教一下,lua语言和其他语言(例如java等)进行跨语言调用和通信的话,有什么可行方案吗?比如有一些类库,加密算法等是其他语言开发实现的,目前如果使用lua的话,没办法直接复用之前的基础代码。

0
zxh404
zxh404

@Li_Peng 你好。Lua语言的特点之一就是非常容易嵌入到其他宿主环境中,这一点在Lua语法(非常精简)、Lua官方实现方式(Lua核心以Library的方式实现)、Lua API(使用虚拟栈和宿主沟通)等方面都得到了很好的体现,具体可以进一步阅读一些Lua相关资料(当然我这本书里也讲了这些☺)。具体到这个问题的话,这取决于你使用的Lua实现。如果使用Lua官方实现,那么使用Lua提供的API就很容易包装(复用)已有的C/C++基础代码。如果用的是其他实现,或者是其他语言的实现(比如Java、Golang等),那么也许还有更容易的复用方式。

0
久永
久永

@zxh404 不错不错,lua用二次开发语言蛮好的。有很多现在语言的特性首先是再 lua 语言上大范围普及的。给公会写过宏,自己做JS改过插件的人飘过~

0
喷子
喷子

@zxh404 研究了一段时间的lua没有使用,最好奇的问题就是:lua_do()或者lua_dostring()去执行lua脚本的时候,lua会全部执行完毕后才会退出这个函数,那么对宿主程序来说,改如何防止在lua内出不来从而导致主程序被堵塞的情况?(假定lua脚本一直在死循环,我的使用场景cpu只支持单核、单线程、主频100MHz)

0
Laixhe
Laixhe

@zxh404 你好,lua确实小巧,请问本书会有介绍lua5.4相关方面的内容?

0
zxh404
zxh404

引用来自“喷子”的评论

@zxh404 研究了一段时间的lua没有使用,最好奇的问题就是:lua_do()或者lua_dostring()去执行lua脚本的时候,lua会全部执行完毕后才会退出这个函数,那么对宿主程序来说,改如何防止在lua内出不来从而导致主程序被堵塞的情况?(假定lua脚本一直在死循环,我的使用场景cpu只支持单核、单线程、主频100MHz)

@喷子 你好。Lua API提供了lua_sethook函数,你可以用这个函数控制Lua,让Lua每执行n条指令就通知你。具体请看Lua手册,或者SOF上的这个问题

0
zxh404
zxh404

引用来自“Laixhe”的评论

@zxh404 你好,lua确实小巧,请问本书会有介绍lua5.4相关方面的内容?

@Laixhe 你好,本书主要是以Lua 5.3.4为参考来介绍其实现的,由于Lua 5.4还没有发布正式版,所以书里并没有介绍。如果这本书有机会出版第二版,而且那个时候Lua 5.4已经发布的话,应该会跟进Lua最新版本。

0
0
0xbadbadbad

@zxh404 lua相对于其它脚本语言有什么优势?为什么会在游戏领域被广泛采用?

0
LeoXu
LeoXu

@zxh404 您好,我是搞手机app开发的,没用真正意义上使用过Lua,能否指点一下Lua在这方面的应用,我想了解看看是否能对自己的技能有所提升,谢谢!

返回顶部
顶部