Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/kitech/cygo

A toy programming language base on Golang and compile to C, no name yet
https://github.com/kitech/cygo

coroutine golang mini-golang-binary-size programming-language

Last synced: 20 days ago
JSON representation

A toy programming language base on Golang and compile to C, no name yet

Awesome Lists containing this project

README

        

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