浅谈lua
近日对花了较多的精力对lua进行了解。
lua的核心在于构建出一个虚拟机,类似java一样可以实现动态编译。而lua的虚拟机也是极具特色的,lua会构造出环境,lua会在环境中进行运行,形成所谓的完全模式。
当宿主语言绑定lua库后,由宿主语言newluastate,这个luastate便是由lua库构造出的lua状态(虚拟机),在这个lua虚拟机中,能够提供lua本身具有的特性,随后再为luastate添加c库,这样使用dofile便能正确编译lua脚本,并压入luastate栈顶,由pcall执行栈顶函数。宿主语言和lua进行交互时,使用的是一个虚拟栈的机制,虚拟栈可以储存任何类型的lua类型,当然包括lua函数,由dofile编译好的中间代码,本身相当于匿名函数,编译好的中间代码会按照对应的函数名去调用绑定c函数,当然也可以是我们自行绑定的函数。
lua是一个功能十分简洁的脚本语言,所以许多功能需要依靠宿主语言实现,再由lua脚本调用由宿主语言实现的函数,便完成了使aot编译项目可以使用动态编译的功能。在具体实现的过程中如何保证如何为宿主函数提供有效的输入,可能需要我们自行构造lua函数自身并不提供的自定义类型。
lua语言相当于让外表坚不可破的石头,从内部打破,成为了具有生命的鸡蛋。
lua运行库由于足够的简洁,因此在游戏行业中运用广泛,但由于使用范围并不大,导致lua生态并不完备。在追求应用包足够小的情况下,lua仍然是首要的选择,但如果条件允许的情况下,选择能够提供体验更好,开发效率更高的typescript语言也是一种新的选择。