Lua 不支持真正的多线程,即不支持共享内存的抢占式线程。Lua 语言的线程(也就是所谓的协程)是协作式的,因此可以避免因为不可预知的线程切换而带来的问题,而且 Lua 状态之间不共享内存,这也为 Lua 实现并行化提供了很好的基础。
这篇文章将深入介绍 Lua 的线程以及 lua_State 数据结构。
Lua 不支持真正的多线程,即不支持共享内存的抢占式线程。Lua 语言的线程(也就是所谓的协程)是协作式的,因此可以避免因为不可预知的线程切换而带来的问题,而且 Lua 状态之间不共享内存,这也为 Lua 实现并行化提供了很好的基础。
这篇文章将深入介绍 Lua 的线程以及 lua_State 数据结构。
之前介绍过了如何通过 C 语言来编写新函数来扩展 Lua,这篇文章将介绍如何用 C 来编写新的类型来扩展 Lua。同时还会介绍除内存以外的其他资源。
上一篇文章主要讲解如何在 C 代码中调用 Lua 代码,即将 C 代码作为应用程序代码,Lua 代码作为库代码。这篇文章将介绍如何在 Lua 代码中调用 C 语言,即将 Lua 代码作为应用代码,将 C 代码作为库代码。
Lua 是一种嵌入式语言,这就意味着 Lua 并不是一个独立的应用,而是一个库,它可以链接到其他应用程序,将 Lua 功能融入这些应用。这就涉及到 Lua 提供的 C API,通过这些 API,实现在自己的应用程序中通过 Lua 来扩展应用。
反射是程序用来检查和修改自身某些部分的能力。Lua 语言本身支持一部分反射能力,而调试库也提供了相关能力。虽然调试库提供的并不是 Lua 语言的调试器,但是其提供了编写我们自己调试器所需要的不同层次的所有底层机制。调试库与其他库不同,必须被慎重使用,因为某些功能性能不高,而且调试库会打破语言的一些固有限制。
作为一本脚本语言,Lua 提供了自动内存管理机制,简化对内存资源的管理。Lua 还提供了协程机制,用于实现并发程序的编写。这篇文章将介绍 Lua 的垃圾收集以及协程机制。
这篇文章将介绍如何在 Lua 中实现 面向对象编程
,这里会用到上一篇文章介绍的元表知识。之后则将深入介绍 Lua 的运行环境,我们将了解到 Lua 全局变量背后的原理。
迭代器是一种可以让我们遍历一个集合中所有元素的代码结构,这篇文章将介绍 Lua 的迭代器机制,而泛型 for 正是为简化迭代器的使用而设计的。之后则将介绍 Lua 的元表,元表的功能非常强大,通过元表,可以实现其他编程语言中 运算符
重载的效果、或者实现面向对象编程的 继承
。
虽然 Lua 被称为解释型语言,但是 Lua 总是在运行代码前先预先编译源码为中间代码。解释型语言的区分并不在于源码是否编译,而在于是否有能力执行动态生成的代码。正是由于dofile 这样的函数存在,才使得 Lua 能够被称为解释型语言。
这篇文章将介绍 Lua 的编译执行原理以及 Lua 的模块/包管理机制。
这篇文章将介绍 Lua 中的数据结构,其实 Lua 只提供了 表
这唯一的数据结构,但是通过 表
可以实现数组、字典等数据结构。之后将介绍如何在 Lua 中实现数据结构的序列化和反序列化。