• This repository has been archived on 30/Apr/2019
  • Stars
    star
    175
  • Rank 218,059 (Top 5 %)
  • Language
    C
  • Created over 12 years ago
  • Updated over 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

[on hold] Port of Lua 5.1 interpreter to Go Language Toolchain. [Work In Progress.] See also: http://lua.org and http://golang.org

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

ON HOLD/DORMANT as of 2016. I have trouble (and not enough time to dive deeper) understanding and exploring c2go's type unification code, and I need that to be able to add various missing operators (e.g. the ternary operator ?: ) and constructs (e.g. assignment in expressions, i.e. while((x=y++)<3) ). If someone cares enough to add them to c2go, I'd be happy to come back this project. (In any case, if you'd like discussing something related to the project, you're very welcome to contact me at [email protected]).

Pushback (2014-12-10: Go 1.4):

NOTE: because the go command's support for the internal C compiler was removed with Go 1.4, the goluago project won't build successfully with go get under Go 1.4+ anymore. On one hand, that's a major setback. But on the other hand, that's a strong motivation to explore the possible use of Russ Cox's c2go to convert the Lua C sources to pure Go (with no more C).

That's what I'm aiming for with the current "c2go" branch of the goluago project.

Alpha2 (2014-05-15):

C API: ~57% complete (81/142 + 1), ~15% have some test (21/143)

  • [MILESTONE][API] most of the core C API implemented (details below)

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

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

See also: Build & Testsuite Status 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!

WANTED / PLANS

Crucial:

  • fix/implement all the rest of needed C standard library functions (leveraging Go standard library where possible) in http://github.com/akavel/gostdc -- the embedded "panicstring" calls shall emit a runtime panic when a stub function is called, making them easier to spot.
    • preferably switch github.com/akavel/gostdc back from Plan9's APE C lib licensed with weird Lucent license, to my handmade lib, which is based where possible on thin wrappers over Go lib.
    • some most notably missing Lua functions now:
      • file & filesystem access
      • os.exit()
      • time-related functions
    • enable support for Lua's package library
  • MILESTONE: get goluago to fully pass the Lua 5.1 testsuite (lua5.1-tests/*.lua)
    • still missing: math.lua, big.lua, verybig.lua, attrib.lua
  • collect some other Lua testsuites from teh Internets and use them for testing too
  • MILESTONE: expose full Lua API in Go (except functions not compatible with Go)
    • notably still missing:
      • coroutine ("thread") -related
      • lua_Debug -related
      • many luaL_* functions, although they're reportedly all doable with the non-luaL ones
  • fix allocator, to be per-State for custom synchronization & for GC-ability
  • 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

Lua?

http://lua.org

Lua is a nice scripting language. Small, written in ANSI C, highly portable, reportedly fast. Especially popular among computer games producers, but not only. Easily embeddable (one of its core goals), mature (Lua 1.0 ~ 1993, many applications worldwide since then). MIT-style licensed.

Go Language?

http://golang.org

Fairly 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

With the Go environment properly set up, type:

go get github.com/akavel/goluago/internal
go test github.com/akavel/goluago/internal

To 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
C API STATUS ------------

~57% complete (81/142 + 1), ~15% have some test (21/143)

Go C tests?
luaL_addchar
luaL_addlstring
luaL_addsize
luaL_addstring
luaL_addvalue
luaL_argcheck
luaL_argerror
luaL_buffinit
luaL_callmeta
luaL_checkany
luaL_checkint
luaL_checkinteger
luaL_checklong
luaL_checklstring
luaL_checknumber
luaL_checkoption
luaL_checkstack
luaL_checkstring
luaL_checktype
luaL_checkudata
luaL_dofile
luaL_dostring
luaL_error
luaL_getmetafield
luaL_getmetatable
luaL_gsub
State.Loadbuffer luaL_loadbuffer has test!
luaL_loadfile
luaL_loadstring
luaL_newmetatable
Open luaL_newstate has test!
State.LOpenlibs luaL_openlibs
luaL_optint
luaL_optinteger
luaL_optlong
State.LOptstring luaL_optlstring
State.LOptnumber luaL_optnumber
State.LOptstring luaL_optstring
luaL_prepbuffer
luaL_pushresult
State.LRef luaL_ref
luaL_register
luaL_typename
luaL_typerror
State.LUnref luaL_unref
State.LWhere luaL_where
lua_atpanic
State.Call lua_call has test!
State.Checkstack lua_checkstack
State.Close lua_close has test!
State.Concat lua_concat
State.Gopcall lua_cpcall
State.Createtable lua_createtable
State.Dump lua_dump
State.Equal lua_equal has test!
State.Error lua_error
State.Gc lua_gc
lua_getallocf
State.Getfenv lua_getfenv
State.Getfield lua_getfield has test!
State.Getglobal lua_getglobal has test!
lua_gethook
lua_gethookcount
lua_gethookmask
lua_getinfo
lua_getlocal
State.Getmetatable lua_getmetatable
lua_getstack
State.Gettable lua_gettable
State.Gettop lua_gettop has test!
State.Getupvalue lua_getupvalue has test!
State.Insert lua_insert
State.Isboolean lua_isboolean
State.Iscfunction lua_iscfunction
State.Isfunction lua_isfunction
State.Islightuserdata lua_islightuserdata
State.Isnil lua_isnil
State.Isnone lua_isnone
State.Isnoneornil lua_isnoneornil
State.Isnumber lua_isnumber
State.Isstring lua_isstring
State.Istable lua_istable
State.Isthread lua_isthread
State.Isuserdata lua_isuserdata
State.Lessthan lua_lessthan
State.Load lua_load has test!
lua_newstate
State.Newtable lua_newtable
lua_newthread
lua_newuserdata
State.Next lua_next
State.Objlen lua_objlen
State.Pcall lua_pcall
State.Pop lua_pop
State.Pushboolean lua_pushboolean
State.Pushgofunction lua_pushcclosure has test!
State.Pushgofunction lua_pushcfunction has test!
lua_pushfstring
State.Pushgofunction lua_pushgofunction has test!
State.Pushinteger lua_pushinteger has test!
State.Pushlightuserdata lua_pushlightuserdata
State.Pushstring lua_pushliteral has test!
State.Pushstring lua_pushlstring has test!
State.Pushnil lua_pushnil
State.Pushnumber lua_pushnumber
State.Pushstring lua_pushstring has test!
lua_pushthread
State.Pushvalue lua_pushvalue
lua_pushvfstring
State.Rawequal lua_rawequal
State.Rawget lua_rawget
State.Rawgeti lua_rawgeti
State.Rawset lua_rawset
State.Rawseti lua_rawseti
State.Register lua_register
State.Remove lua_remove
State.Replace lua_replace
lua_resume
lua_setallocf
State.Setfenv lua_setfenv
State.Setfield lua_setfield
State.Setglobal lua_setglobal
lua_sethook
lua_setlocal
State.Setmetatable lua_setmetatable has test!
State.Settable lua_settable
State.Settop lua_settop
lua_setupvalue
State.Status lua_status
State.Toboolean lua_toboolean
lua_tocfunction
State.Tointeger lua_tointeger has test!
State.Tostring lua_tolstring has test!
State.Tonumber lua_tonumber
lua_topointer
State.Tostring lua_tostring has test!
lua_tothread
State.Touserdata lua_touserdata
State.Type lua_type
State.Typename lua_typename
Upvalueindex lua_upvalueindex
lua_xmove
lua_yield

LICENSE

Where not otherwise specified, MIT-licensed as:

Copyright (c) 2011-2014 Mateusz Czapliński

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Lua code MIT-licensed as:

Copyright (C) 1994-2008 Lua.org, PUC-Rio. All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

More Repositories

1

up

Ultimate Plumber is a tool for writing Linux pipes with instant live preview
Go
8,056
star
2

rsrc

Tool for embedding .ico & manifest resources in Go programs for Windows.
Go
1,084
star
3

hellomello

Experiments with writing Android apps in Nim
C++
77
star
4

polyclip-go

Go library for Boolean operations on 2D polygons.
Go
74
star
5

dali

Indie assembler/linker for Dalvik VM .dex & .apk files (Work In Progress)
Nim
69
star
6

martinez-src

Mirrored implementations of polygon clipping/CSG/operations algorithm, in C (original, by Martínez et al) and ActionScript3 (port, by Mahir Iqbal)
C++
44
star
7

WernessDithering

Copy of dithering code by Brent Werness (Koloth) invented for Obra Dinn
Processing
30
star
8

embd-go

embd-go is an embeddable command-line tool for embedding data files in Go source code, specially crafted for easy use with `go generate`.
Go
25
star
9

sherman

A clone of Joe Marshall's Rebol 1.0 to Scheme compiler.
Lua
17
star
10

winq

Package winq provides functions for quick & dirty WinAPI calls, with easy errors capturing.
Go
16
star
11

neatpad

Archived source code from Neatpad Win32 Text Editor tutorial by James Brown
C
16
star
12

gostdc

C
15
star
13

elm-expo

Elm <-> Expo bridge experiment
JavaScript
14
star
14

myopenlab

Copy of https://sourceforge.net/p/myopenlab3/code/HEAD/tree/; donate 1 € to original author at http://myopenlab.de/downloads.html if you find it any worth!
Java
12
star
15

cvsclone

A fork of an anonymous pserver CVS cloning tool, with a (googled) anti-SEGFAULT patch applied. Nothing here's mine, I'm just publishing work of some great people.
9
star
16

bbb-ipd-vcf

Quick & dirty scripts to convert Address Book (Contacts list) from BlackBerry .bbb/.ipd backup (BB Desktop Software 7.1) to vCard .vcf files (for Android & other civilized phones)
Lua
7
star
17

asciinema2gif

Convert ASCIInema asciicast v2 files to animated GIFs
Go
6
star
18

vfmd

"Vanilla-flavored" Markdown parser in Go -- based on http://www.vfmd.org spec
Go
5
star
19

polyclip.go

Go library for Boolean operations on 2D polygons.
Go
5
star
20

marco

Manifests & resources compiler for .apk files (Work in Progress)
Nim
5
star
21

nix-config

custom user config (~/.nixpkgs/config.nix) for Nix
Nix
4
star
22

svgmath

Tool for rendering MathML into SVG.
Lua
4
star
23

bookwin

Nim
2
star
24

go-hyphen

Text hyphenation, using Frank Liang's algorithm.
Python
2
star
25

maniana-fork

Development fork of Maniana Todo List app for Android http://code.google.com/p/maniana/
Java
2
star
26

l4.nix

Experimental Nix expression/script for building Fiasco.OC microkernel and L4 Runtime Environment (L4Re)
Nix
2
star
27

_test_github_

some tests etc.
1
star
28

scissors

Scissors XML Viewer
Lua
1
star
29

splitsound

Java
1
star
30

homebrew-up

Homebrew package ("tap") for github.com/akavel/up
Ruby
1
star
31

go-explorer-rescued

Some rescued code of github.com/garyburd/go-explorer repository; unknown freshness
Go
1
star
32

backer

Small tool for backups/archiving of photos and other files
Go
1
star
33

go-explorer

Go Explorer is Vim plugin for exploring Go code
Vim Script
1
star
34

mana

Mana controls dotfiles and other aspects of a system. Experimental personal configuration & provisioning.
Lua
1
star
35

graph-mirror2

C++
1
star
36

graph-mirror

C++
1
star
37

pltscheme-cvs-cvs2git-1

Scheme
1
star
38

pltscheme-cvs-cvsimport-1

Scheme
1
star
39

wed-editor

Import of "public domain" code of WED Editor from http://wed.sourceforge.net "Simple programmer's text editor. Multiple clipboards, macro record/ play, UNIX CR/LF auto recognition, clean editing of giant files, unlimited undo/redo Auto Save, auto Backup. Minimal system requirements - will run everywhere."
C++
1
star
40

nixme

Nix minimal effector — receives and unpacks prebuilt Nix derivations from `nix copy --to ssh://...`
Rust
1
star
41

tunnel

Simple TLS connection over insecure network between safe fully controlled endpoints, in Go. DISCLAIMER: No Warranties, this can eat your homework, starve your kittens, etc., etc., use at your own risk.
Go
1
star