《Lua 5.0的实现》第一章 - 介绍

摘要:我们讨论Lua 5.0中那些重要而且很华丽的实现方法:基于寄存器的虚拟机、把table当成数组使用时所涉及到的新的优化算法、闭包(closures)的实现、以及协程(coroutines)。

关键词:编译器、虚拟机、哈希表、闭包、协程。

分类:D.3.4, D.3.3, D.3.2, E.3.2

1 介绍

Lua诞生于大学的实验室,那时候只做为软件开发的内部工具来使用。然而各种机缘巧合,在全世界范围内被几个工业项目所使用。现如今它在游戏界中非常流行。

我们要如何解释为什么Lua会流行呢?我们相信答案就位于我们的设计和实现理念中:提供一种简单、高效、可移植、轻量级的脚本语言。自Lua1993年诞生至今的发展过程中,这是我们不变的理念。(Lua5.0之前的开发历史请参考[12].)这些特性以及Lua一直以来都被设计成做为大型软件的嵌入式语言,这就可以解释早期的Lua被业界所采纳的原因了。

随着Lua广泛的使用,对语言特性的要求也随着产生。Lua的很多特性都源于业界的需求和用户的反馈。包括在Lua5.0中实现的协程,5.1中实现的垃圾回收机制就是其中很典型的例子。这两个特性对游戏来说都很重要。

本论文我们讨论Lua5.0中那些重要且绚丽的实现功能,与Lua4.0相比:

基于寄存器的虚拟机:通常,大部分实用虚拟机都是基于栈的,从Pascal的P-machine开始,到现在的Java虚拟机以及Microsoft的.Net运行环境,都沿着基于栈的轨迹发展。然而,如今大家对基于寄存器的虚拟机逐渐的感兴趣了(例如,Perl6就准备使用新的基于寄存器的虚拟机)。据我所知,Lua5.0是第一个被广泛使用的基于寄存器虚拟机的语言。这个虚拟机在第7章中介绍。

将table当数组使用的新优化算法:和其他脚本语言不同,Lua没有提供数组类型。然而,Lua程序员可以使用以整数为索引的table来实现数组的功能。Lua5.0使用了新的算法,可以检查table是否被作为数组使用,并且自动的将数组中的整数索引存储起来,而不是将这些数值以哈希表的方式保存。这个算法将在第4长讨论。

闭包的实现:Lua5.0支持带有作用域的first-class函数。此机制要保存动态的记录,这对那些用基于数组栈的语言来说是公认的难题。Lua使用了一种很巧妙的方法实现了函数的闭包,就是通过把局部变量保存在(基于数组的)栈中,只有当被嵌套的函数引用这些变量,发现变量不在他们的作用域内的时候,才将它们移到堆中。闭包的实现将在第5章讨论。

增补的协程:Lua5.0引入了协程。虽然实现协程的方法比较中规中矩,但为了内容的完整性,我们也将在第6章中做大致的介绍。

其他章节用于补充说明或做背景的介绍。在第2章中,我们将对Lua的设计理念做一个概述,并介绍这些理念是如何促使Lua发展的。在第3章中,我们将介绍一个值在Lua中是如何表示的。虽然这些介绍有点平淡无奇,但是我们需要这些知识为其它章节做铺垫。最后,在第8章中,我们会给出一些小的评测方法,并相应的给出一些结论。



 博主记:翻译有益于记忆。

http://www.lua.org/doc/jucs05.pdf

 

你可能感兴趣的:(lua,实现原理,外文翻译)