您的位置:首页 > 编程语言 > Lua

[Paper Reading] The Implementation of Lua 5.0

2016-04-10 20:36 393 查看
Ierusalimschy, R., De Figueiredo, L. H., & Celes Filho, W. (2005). The Implementation of Lua 5.0. J. UCS, 11(7), 1159-1176.

Introduction

Main novelties:

Register-based virtual machine

Optimized tables

Closures

Coroutines

Values

Dynamically-typed language, basic types:

nil

boolean: true, false

number: double (float/long)

string: arrays of bytes

table: associative arrays

function

userdata: pointers to user memory blocks: heavy, subject to garbage collection; light, freed by user

thread: coroutines

typedef struct {
int tag;  /* Identify the type */
Value v;
} TObject;

typedef union {
GCObject *gc; /* strings, functions, heavy userdata and threads */
void *p;  /* light userdata */
lua_Number n;  /* numbers */
int b;  /* booleans */
} Value;


Tables



Hybrid: hash part and array part

Growth of array part:

at least half the slots between 1 and n are in use

at least on used slot between n/2+1 and n

Hash part: uses a mix of chained scatter table with Brent’s variation

Functions and Closures



Implement closures: upvalue,

flat closures

Threads and Coroutines

create, resume, yield

interpreter cannot use its internal C stack to implement calls in the interpreted code

uses C stack to keep track of the stack of active coroutines at any given time

cactus structure

The Virtual Machine



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: