cygo
cygo copied to clipboard
A toy programming language base on Golang and compile to C, no name yet
Compile Go to C, with a generic library contains Go core features, like goroutine,channel,GC.
That's will generate minimal binary. The farther plan is compile any Go package to C.
The pain of Go
- Too large binary size
- Not zero cost call with C
- Builtin string/array/map no methods
- Too verbosity error handling, not like the Go2
try
error handling proposal
Features
- goroutine
- channel
- defer
- GC
- CGO
- interface
- closure
- string/array/map with lot builtin methods
-
catch
statement error handling (https://github.com/kitech/cygo/blob/0f213381f06116d0f6f2ca6bf2ccbe70ab088882/bysrc/tpkgs/catch2/t.go#L18) - unused var warning, not error
- for range => for in
- type foo struct => struct foo
- unsafe.Pointer => voidptr
- uintptr => usize
- seamless C symbol use
- zero cost C call
- all variables reference
Install
cd $GOPATH
git clone https://github.com/kitech/cygo
cd cygo/bysrc
go build -o cygo
Example
./cygo ./tpkgs/hello
cmake .
make
more examples/tests https://github.com/kitech/cygo/tree/master/bysrc/tpkgs/
Source code structure:
- main compiler source https://github.com/kitech/cygo/tree/master/bysrc/
- goroutine/channel implemention in C https://github.com/kitech/cygo/tree/master/corona-c/
- some go stdlib implemention https://github.com/kitech/cygo/tree/master/xgo/
Supported important syntax
- defer
- closure
- select
Todos
- [ ] dynamic stack resize
- [ ] correct and more safe point for GC
- [ ] support more OS/platforms
- [ ] so much to do
Supported original Go packages
- unsafe
- errors
资料
- minigo
- tinygo
- Let's Build A Simple Interpreter https://github.com/rspivak/lsbasi
- dwarf https://github.com/gimli-rs/gimli