parrotcode: Status of Lua on Parrot | |
Contents | Language Implementations | Lua |
Status of Lua on Parrot
Lua is an extension programming language designed to support general procedural programming with data description facilities. It also offers good support for object-oriented programming, functional programming, and data-driven programming. Lua is intended to be used as a powerful, light-weight scripting language for any program that needs one.
The homepage is http://www.lua.org/.
The reference manual is available on http://www.lua.org/manual/.
This implementation is aligned with Lua 5.1 specifications.
This compiler is written in Perl5 :
Implemented with Perl5 regex
languages/lua/Lua/lexer.pm
Implemented with Parse::Yapp.
It supports the full grammar described in languages/lua/doc/lua51.bnf.
Only one error
rule,
so the syntax error diagnostic is minimalist.
languages/lua/Lua/lua51.yp
languages/lua/Lua/build.pm
languages/lua/Lua/symbtab.pm
languages/lua/Lua/opcode.pm
languages/lua/Lua/pir.pm
in languages/lua/t/closure.t :
a = {}
local x = 20
for i=1,10 do
local y = 0
a[i] = function () y=y+1; return x+y end
end
print(a[1]())
print(a[1]())
print(a[2]())
--[[
The loop creates ten closures (that is, ten instances of the anonymous
function). Each of these closures uses a different y variable, while all
of them share the same x.
]]
y
variable is not different.
Handle arguments from command line.
Try to use Parse::RecDescent (the original Lua uses a LL parser).
There are eight basic types in Lua, each of them is implemented by a PMC.
This type allows OO extension.
Currently, file
in I/O library is an userdata
.
This type is used to implement coroutines.
This type is the data structure of the language.
languages/lua/pmc/luabase.pmc provides an abstract base class for some Lua types (nil, boolean, number, string, table).
languages/lua/pmc/lua.pmc is a singleton PMC what holds some static methods.
Lua PMC have problems with the Parrot garbage collector : used objects are released by the GC (infant mortality ?).
So, use the option --no-gc
.
Arguments passing in invoke
method of table
. Where are there ?
Weak table, weak reference.
table
with a mixed array and hash.
Lua 5.1 defines the following standard libraries:
languages/lua/lib/luaaux.pir is the equivalent of Auxiliary Library.
Except math library, all of these libraries are incomplete.
And the coroutine library does not work.
Currently, these libraries are included as PIR file (not loaded as bytecode PBC) because HLL support for Sub/Closure is incomplete with PBC.
Understand how work PGE & TGE and write an interpreter in PIR.
Klaas-Jan Stol works on 2 projects :
A Lua to PIR compiler implemented in C
A Lua bytecode to PIR compiler
See http://members.home.nl/joeijoei/.
Francois Perrad.
|