E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Lua2.4
Lua2.4
其它
脚本执行的所有环境都准备好了,终于开始执行了。不过,显然,题目写的是“其它”,也就意味着这节就是个收尾了。为什么?这个版本还有几个主题没有介绍。比如:字节码的执行,表的管理,垃圾回收,fallback机制,调试等。这几个主题在之前的版本里都有涉猎(除了这个版本新加的两个内容,fallback和调试)。不过,新加的内容对程序主线可认为基础没影响。因为,写到上一节结束时,突然觉得这个版本已经写完了。因
晓寒
·
2014-10-22 13:00
lua
Lua2.4
Lua2.4
场景恢复 undump.c
这一节看看luaI_undump1是如何场景恢复的。/* ** load one chunk from a file. ** return list of functions found, headed by main, or NULL at EOF. */ TFunc* luaI_undump1(FILE* D) { while (1) { int c=getc(D); if (c=
晓寒
·
2014-10-21 13:00
lua
Lua2.4
Lua2.4
执行之前 opcode.c
上节说到了lua_dofile执行脚本文件,或者编译过的脚本二进制文件。这节看下,Lua是如何区别这两种文件的,以及虚拟机在开始执行字节码之前,程序里面都发生了什么?lua.c里面的调用了lua_dofile来执行文件,看下lua_dofile/* ** Open file, generate opcode and execute global statement. Return 0 on **
晓寒
·
2014-10-16 19:00
lua
Lua2.4
Lua2.4
解释器入口 lua.c
开始解释器篇。解释器部分会写几节还说不准,因为,不少相关内容在之前的版本中是有覆盖到的。同样,还是从解释器入口的main函数说起。int main (int argc, char *argv[]) { int i; int result = 0; iolib_open (); strlib_open (); mathlib_open (); lua_register("argv", l
晓寒
·
2014-10-14 14:00
lua
Lua2.4
Lua2.4
保存字节码 dump.c
严格意义上说,把dump这部分叫保存字节码并不准确。因为除了保存TFunc里的字节码code之外,还保存了其它的内容。比如函数头,字节序及字节码需要的数据等。所以,准确的说应该叫保存字节码及环境,或者叫做保存世界,就是字节码生成之后的运行时相关信息也保存了下来。可以从保存下来的这些信息恢复出字节码执行时需要的运行时,默认的保存文件就是之前所说的那个luac.out的二进制文件。咬文嚼字一下,dum
晓寒
·
2014-10-12 22:00
lua
Lua2.4
Lua2.4
打印字节码 print.c
现在编译器相关的部分就剩下luac.c中的do_dump函数的分析了。这个函数里面主要有两种调用,存储字节码和打印字节码。先来看一下打印字节吧,要打印字节码,需要在编译器的命令行选项中有"-l"选项。static void do_dump(TFunc* tf) /* only for tf==main */ { if (dumping) DumpHeader(D); while (tf
晓寒
·
2014-10-11 13:00
lua
Lua2.4
Lua2.4
程序分析 parser.c
这个版本的语法分析器是由工具yacc生成的,其相应的源文件为lua.stx。这个不是我关注的重点,略过。这一节这样结束有点儿寒酸,闲话几句。yacc的历史就不说了,yacc类工具出现,使得程序语言分析相关的工作复杂度降低了很多。这也是之前面曾经提到过的,当时UNIX世界里出现了不少小语言的原因。在语法没有最终确定下来之前,用yacc这类工具可以快速的验证自己的想法,作出一个程序原型出来。等语法稳定
晓寒
·
2014-10-10 13:00
lua
Lua2.4
Lua2.4
函数相关 func.c
看一下和函数相关的数据结构和方法。数据结构typedef struct LocVar { TaggedString *varname; /* NULL signals end of scope */ int line; } LocVar;局部变量描述信息,这个主要是调试时有用,也就是编译时打开了调试选项。varname局部变量的名字,如果为空,表示函数的局部
晓寒
·
2014-10-09 13:00
lua
Lua2.4
Lua2.4
字符串相关 tree.c
Lua中字符串管理是核心内容之一(另一个当然就是表的管理)。Lua脚本中用到的字符串,解析时用到的符号,及一些运行时相关的字符串都保存在全局字符串表中,全局字符串表就是tree.c中的string_root数组。同样的字符串在Lua的全局字符串表中只会出现一次,也就是只保存一次。先看下数据结构TaggedStringtypedef struct TaggedString { Word vari
晓寒
·
2014-10-08 13:00
lua
Lua2.4
Lua2.4
内存分配 mem.c
先看看头文件里的定义,定义了一些出错信息,几个内存管理接口,和宏。几个宏的定义也是用到了内存分配的几个接口。newvector在之前的词法分析里已经出现了。几个接口,看函数名字比较容易看出来它的作用。下面看一下它们各自的实现:void luaI_free (void *block) { if (block) { *((int *)block) = -1; /* to catch
晓寒
·
2014-10-07 23:00
lua
Lua2.4
Lua2.4
词法分析 lex.c
先看一下在打开文件里用到的一个函数lua_setinputvoid lua_setinput (Input fn) { current = ' '; input = fn; if (yytext == NULL) { textsize = MINBUFF; yytext = newvector(textsize, char); } }设置当前是的输入字符为空格。
晓寒
·
2014-10-06 16:00
lua
Lua2.4
Lua2.4
打开文件 inout.c
这里根据luac.c里的函数调用顺序,依次展开相关的代码。首先要看的就是lua_openfile,该函数定义于inout.c中:/* ** Function to open a file to be input unit. ** Return the file. */ FILE *lua_openfile (char *fn) { lua_setinput (fileinput); if (f
晓寒
·
2014-10-05 16:00
lua
Lua2.4
Lua2.4
编译器入口 luac.c
luac.c是编译器luac的入口文件。老规矩,从main函数看起,看看这个过程中程序都做了些什么?int main(int argc, char* argv[]) { char* d="luac.out"; /* default output file */ int i; for (i=1; ifileName = lua_parsedfile; lua_parse
晓寒
·
2014-10-04 17:00
lua
Lua2.4
Lua2.4
文档翻译
Lua2.4
文档翻译完了,这次的翻译感觉和Lua1.1的时候有点不一样。这次也是在业余时间里断断续续的完成的,所以,进度也同样是比较慢。
晓寒
·
2014-10-03 22:00
lua
Lua2.4
Lua2.4
参考手册(六)
(接上篇)--------------------------------------8一些例子--------------------------------------本段给出一些显示Lua特性的例子。它并不打算覆盖完整的语言,只是显示一有趣的使用。-------------------8.1数据结构-------------------表是统一的数据结构。它可以实现多种数据类型,像通常的数组
晓寒
·
2014-10-02 23:00
lua
Lua2.4
Lua2.4
参考手册(五)
(接上篇)--------------------------------------7调试接口--------------------------------------Lua没有内置的调试功能。而是借助于函数和钩子(hook)提供了一个特殊接口,可以用来构建不同种类的调试器,分析器(profile)和一些其它的需要解释器内部信息的工具。这个接口在luadebug.h文件中声明。--------
晓寒
·
2014-10-01 15:00
lua
Lua2.4
Lua2.4
参考手册(四)
(接上篇)--------------------------------------6预定义的函数和库--------------------------------------Lua的一组预定义函数虽少但功能强大。他们中大多数提供的功能让语言有一定程度的自反性。一些功能不能通过语言的其它部分模拟也不能通过标准的LuaAPI模拟。其它的只是一些有用的有用通用API函数接口。库,在另一方面,提供了
晓寒
·
2014-09-30 12:00
lua
Lua2.4
Lua2.4
参考手册(三)
(接上篇)--------------------------------------5API--------------------------------------这节主要描述Lua的API,也就是宿主程序和库交互的一组C函数。API函数可以分为以下几类:1.执行Lua代码;2.在Lua和C之间进行值的转化;3.操作(读写)Lua对象;4.调用Lua函数;5.由Lua调用的C函数;6.Lua
晓寒
·
2014-09-29 13:00
lua
Lua2.4
Lua2.4
参考手册(二)
(接上篇)--------------------------------------4语言--------------------------------------这节介绍Lua的词法,语法和语义。-------------------4.1词法约定-------------------Lua是区别大小写的语言。标识符可以是任何字母,数字,下划线组成的字符串,且首字母不可为数字。下面这些是保留
晓寒
·
2014-09-28 12:00
lua
Lua2.4
Lua2.4
参考手册(一)
说明:这个文档是
Lua2.4
的doc目录里的refman.ps文件。原文版权归原作者所有,这篇翻译只是作为学习之用。如果翻译有不当之处,请参考原文。
晓寒
·
2014-09-27 14:00
lua
Lua2.4
Lua2.4
文档简介
简单的看下文档,doc目录里的文件还是*.ps格式的文件。不过luac.ps和luac.txt的内容是一样的。解释器的自述文件(README)---------------------------------------------------------这个客户端是个简单的lua解释器。它可以从命令行通过文件名加载可执行的文件,也可以从标准输入加载可执行的文本行。注意,如果是后一种情况,每一行必
晓寒
·
2014-09-19 13:00
lua
Lua2.4
Lua2.4
准备工作
为什么要拿出来
Lua2.4
来看一下呢? 因为
Lua2.4
的时候增加了一个的外部编译器luac,可以把Lua脚本编译成字节码。解释器可以直接执行编译好的字节码,加载速度得到了提升。
晓寒
·
2014-09-18 13:00
lua
Lua2.4
上一页
1
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他