Colang是一种编程语言,旨在创造一种动态语法的静态编译语言
./colang [options] file
run file ast -> asm 编译为汇编-链接生成可执行程序自动执行
-s file ast -> asm 编译为汇编
-llvm file ast -> ir -> asm 基于llvm生成汇编
- compiler
- run 采用gcc进行汇编和链接glibc
- -s 生成.s汇编文件
- llvm
- asmer 自举汇编编译器,翻译机器指令
- linker 自举链接器,生成可执行二进制文件
> uname -a
Linux ubuntu 4.4.0-157-generic #185-Ubuntu SMP Tue Jul 23 09:17:01 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
> gcc -v
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)
> git clone https://github.com/brewlin/colang.git
> cd colang/tests
> export CO_SRC=/path/to/colang/runtime
> cmake .. & make
> dos2unix auto_tests.sh & sh auto_tests.sh
更多语法测试用例在/tests
目录下,包含了各种数据结构、运算、gc、demo测试
- 完成python的内存分配器+标记清除式GC
- 优化
> 256 bytes
的大内存gc - 优化采用
golang
的多线程内存分配 + 增量式三色标记gc
- long int
- double
- string
- bool
- map
- array
- object
package main
import fmt
class http{
# member
request
# func
func handler(){
fmt.println("hello world!")
fmt.println(this.request)
}
}
func main(){
a = "this is a string"
fmt.println(a)
a = 1000
fmt.println(a)
a = ["1",2,"33",4,"some string word"]
fmt.print(a[0],a[1],a[2],a[3],a[4])
//or fmt.print(a)
b = {"sdfds":"sdfsd",1:2,"sdfds":3,"a":a}
fmt.print(b["a"],b["sdfds"])
obj = new http()
obj.request = {"method":"POST"}
obj.handler()
}
- func
- return
- package,import
- if
- while
- continue,break
package main
func main(){
a = "str"
if(a == "str"){
}
b = 10
while(b){
if(b == 5){
continue
}
if(b == 2){
break
}
b -= 1
}
}
-
+ and +=
-
- and -=
-
* and *=
-
\ and \=
-
<< and <<=
-
>> and >>=
-
& and &=
-
| and |=
-
|| and &&
-
> and >=
-
< and <=
-
== and !=