首页 > 代码库 > Lua1.0 写在最初
Lua1.0 写在最初
为什么是 Lua
忘记是什么时候接触到 Lua 的了,也忘记是为什么接触到她的。现在想想,也许是因为下面两个原因:
WOW 里有用到她,我上学的时候,玩过一段时间 WOW,了解一点 WOW 插件的编写,当时觉得这个语言挺有意思的。
她是由 C 代码实现的,下载代码看了一下,发现她的官方实现的 C 代码写得很好,我是一个代码爱好者,面对这么优秀的代码,有种相见恨晚之感。
为什么是 Lua1.0
我是一个代码爱好者,总觉得看代码的最初实现会比较容易把握作品的脉络。我不知道这种学习方法对不对,不过,或许是强迫症作怪,如果不看最初的实现,总会有种不完整的感觉。
Lua1.0 是在官方能找到的最早的一个版本,但却不是 Lua 公开发行的第一个版本。Lua1.1 才是其公开发行的第一个版本,虽然她的版本号大于 Lua1.0 吧。1.0 虽然是最早的,但是没有公开发行,是在 Lua 发布 10周年的时候官方做为庆祝放出来的。
以下以 Lua1.0 的 ReadMe 的说明。
This is Lua 1.0. It was never publicly released. This code is a snapshot of
the status of Lua on 28 Jul 1993. It is distributed for historical curiosity
to celebrate 10 years of Lua and is hereby placed in the public domain.
There is no documentation, except the test programs. The manual for Lua 1.1
probably works for this version as well.
The source files for the lexer and parser have been lost: all that is left is
the output of lex and yacc. A grammar can be found inside y_tab.c in yyreds.
The code compiles and runs in RedHat 5.2 with gcc 2.7.2.3. It may not run in
newer systems, because it assumes that stdin and stdout are constants, though
ANSI C does not promise they are. If make fails, try using the fixed modules
provided in the "fixed" directory. To see the differences (which are really
quite minor), do "make diff".
To see Lua 1.0 in action, do "make test". (The last test raises an error on
purpose.)
Enjoy!
-- The Lua team, lua@tecgraf.puc-rio.br
Lua1.0 的代码没有 lex 和 yacc 的源文件,虽然我也不一定会分析它们。有可能以后分析 Lua1.1 的时候顺道儿分析下它们。ReadMe 里说 Lua1.1 的手册同样适用于 Lua1.0,虽然有 Lua1.1 的手册,但不着重分析,因为它的语法和现在的 Lua5.x 相差太远了。代码量不算大,读一遍,权当脑力运动了。
一些说明:
Lua1.1 虽然有 lex 文件,但是也没有用上,而是手写的词法分析。这个在 lua1.1 自带的文档里有说明,文件名 lua.ps, 第 8 页,手写的词法分析器性能提高了 2 倍。
(文件内部的标题为 :The design and implementation of a language for extending applications)。
但是语法分析用的是 yacc 生成的。
(一直到 Lua 3.1 才用手写的语法分析,因为在语言的早期,语言的语法还不稳定,变动可能会比较频繁,用工具比较快一些,当语法稳定之后,手写的递归下降语法分析性能比较好。)
Lua 目前的最新版本是 5.2.3 代码量虽然不大,但是其功能比较密集。读起来还是有一定难度的,这个等以后有时间再慢慢看吧。或者也可能分析下 5.1,毕竟,5.1 是经典稳定版。不管怎么说,还是先把 Lua1.0 分析一遍再说。有的地方可能分析的并不是非常仔细,不过,Lua1.0没有什么文档,权当浏览一遍,了解一个大概,到第一个公开发行的版本 Lua1.1时会对有的地方做比较详细的说明。
Lua 早期的代码乱七八糟的读过,读的时候没有及时做笔记。现在写出来的和当时读的时候的感受可能都不太一样了,不过也好,再温习一次。
Lua 的虚拟机刚开始是栈式的,从 5.0 之后改为寄存器式的。 有可能的话,在分析完 Lua1.0 和 Lua1.1 之后,再分析下 Lua4.0 的实现。
这个 Lua 相关的系列一定要写下去,给自己的学习一个交待。
小心得:以后不管是学习也好,或者看个什么东西也好,有点心得体会要赶快记录下来。不然,过后再补记,可能就和当时的感觉不一样了。补记的就可能失去了当时的那种思维痕迹了。
Lua1.0 写在最初