(posted to:
lua-l@lists.lua.org,
golang-nuts@googlegroups.com)
https://github.com/akavel/goluago
Library goluago aims to become a port of Lua 5.1 interpreter to Go Language Toolchain
(first 8c/6c/5c, ultimately maybe pure Go).
The library is at early stage of development (not feature complete / **not ready
for production** use), but some important goals were already completed successfully:
STATUS
------
### What works - new in alpha1 (2013-12-30):
* [MILESTONE] workaround in ldebug.c for a bug in Go toolchain's C compiler
* [MILESTONE][Lua] nearly all standard libraries available (with notable exception of file access)
* [Lua] most of the Lua Testsuite test code now passes successfully
* [API] wrapper for lua_pcall() added
* now uses new, more complete version of the
http://github.com/akavel/gostdc library
(based in big part on Plan9 APE library, thanks to Lars Seipel for info on this one)
### What works since pre-alpha preview 2:
* [MILESTONE] parsing & compiling Lua scripts to bytecode (via luaL_loadbuffer())
* [Lua] standard libraries: basic library (print(), ipairs(), assert(), loadstring(), etc.)
* [Lua] passes parts of the Lua testsuite (tested on fragment of "calls.lua")
* [API] basic strings API (lua_pushlstring(), lua_tolstring())
* [API] exposing Go funcs into Lua (lua_pushgofunction(), lua_dump())
* [tools] Lua script for embedding Lua testsuite parts in Go unit tests (wrap-test.lua)
* [API, Lua] string <-> number conversions
### What works since pre-alpha preview 1:
* [API] creating/destroying new Lua state (luaL_newstate(), lua_close())
* [API] basic integer operations on stack (lua_pushinteger(), lua_gettop(), lua_equal())
* [API] running simple precompiled Lua code chunk (luaL_loadbuffer(), lua_call(),
tested on precompiled chunk "return 2+3")
* compiled and tested on: x86 (8c+8g), x64 (6c+6g), Windows/Linux
* [tools] Lua script to simplify generation of Go+C wrappers for
Lua API functions (internal/gen_wrappers.lua)
Build & Testsuite Status: [![Build & Testsuite Status][2]][1]
See also: [Build & Testsuite Status][1] on Travis-CI.
Please note, that the project is still officially at early stage of development, so if
the testsuite fails, it's nothing unexpected; rather, it's very good news that *it builds*
and *big part of the testsuite does already succeed*!
[1]:
http://travis-ci.org/akavel/goluago
[2]:
https://secure.travis-ci.org/akavel/goluago.png?branch=masterWANTED / PLANS
--------------
### Crucial:
* to fix/implement all the rest of needed C standard library functions
(leveraging Go standard library where possible)
-- the embedded "panicstring" calls shall emit a runtime panic when a stub function is
called, making them easier to spot.
* MILESTONE: enable rest of the Lua standard library
* MILESTONE: get goluago to pass the Lua 5.1 testsuite (lua5.1-tests/*.lua)
* MILESTONE: expose full Lua API in Go (except functions not compatible with Go)
* ARM support, and other architectures later
### Would be nice-ies:
* write prettier interface on top of official Lua API
(maybe converge with
http://github.com/stevedonovan/luar)
* Lua 5.2
* write unit tests for C standard library functions implemented for Lua;
* improve C standard library in
http://github.com/akavel/gostdc * maybe use some non-GPL Open Source code (FreeBSD? some stdlib for embedded systems?);
* try to go back to non-APE version of the code, to avoid the nonstandard Lucent license
* extract C standard library to separate package;
* later, "ANSI C to Go translator", in extent needed by the Lua sources?
**NOTE:** you're welcome to contribute anything if you fancy, and not necessarily
from this list. The points above are mostly ideas as to what I believe would be
most useful at this moment.
BACKGROUND INFO
---------------
### Go Language?
http://golang.org
Farly new language developed at Google. Authors are however experienced in
building and experimenting with programming languages (specifically C, Limbo), with
notable uses, including OS development (Unix, Plan9/Inferno). Highly portable
(x86/x64, ARM; Linux/*nix, Windows, Mac OS X, other ports in progress), written
(bootstrapped) in C. BSD-style licensed. Popularity hard to determine given short
time on market, but has several nice and interesting features and properties.
INSTALLATION
------------
You need the Go language toolkit version 1 (see:
http://golang.org).
With the environment properly set up, type:
go get
github.com/akavel/goluago/internal
go test
github.com/akavel/goluago/internalTo retrieve and run a sample program:
go get
github.com/akavel/goluago/testlua
cd $GOROOT # or, see $GOPATH; on Windows %GOROOT%, %GOPATH%
bin/testlua # on Windows: bin\testlua.exe
/Mateusz Czapliński.