- No strict type checker
- No C-like pointer arithmetic
- No function-like macros
- No variable shadowing
- No
break
,continue
stmt. Usegoto
- Allows
13 <= age < 20
instead of13 <= age && age < 20
- Variable length args
func(...)
can be accessed with built-in variablesargc i64
andargv *i64
- All values are extended to 64-bit when accessed
- The compiler is written in itself
- Default args don't have to be on the end (WIP)
#include "std/header.ibu"
func main() i32 {
printf("Hello, world!\n");
return 0;
}
Important
Only supports x86-64 linux for now
$ git clone git@github.com:v420v/ibu.git
$ cd ibu
$ make init
$ git clone git@github.com:v420v/ibu.git
$ cd ibu
$ make up
$ make ibu
$ make init
Command | Execution |
---|---|
make up |
docker compose up -d |
make ibu |
docker compose exec ibulang bash |
make down |
docker compose down |
$ ./ibuc <filename>.ibu
Currently, the compiler outputs assembly to stdout.
$ ./ibuc main.ibu | as - -o main.o
$ as -o lib/runtime.o lib/runtime.s
$ ./ibuc lib/linux-syscall/linux-syscall.ibu | as - -o lib/linux-syscall.o
$ ./ibuc lib/std/std.ibu | as - -o lib/std.o
$ ld -o main main.o lib/runtime.o lib/linux-syscall.o lib/std.o
$ ./main
File | Content |
---|---|
src/ibu.ibu |
Entry point |
src/tokenizer/tokenizer.ibu |
Lexical analyzer |
src/preprocessor/preprocessor.ibu |
Preprocessor |
src/parser/parser.ibu |
Parser |
src/codegen/codegen.ibu |
Code generator |
lib/linux-syscall/linux-syscall.ibu |
Linux system call library |
lib/std/std.ibu |
Standard library |
lib/runtime/runtime.ibu |
Runtime library |