examples | ||
src | ||
.gitignore | ||
go.mod | ||
go.sum | ||
main_test.go | ||
main.go | ||
README.md |
q
A simple programming language.
Features
- Fast compilation
- Small binaries
Installation
git clone https://git.akyoto.dev/cli/q
cd q
go build
Usage
Build a Linux ELF executable from examples/hello
:
./q build examples/hello
./examples/hello/hello
Documentation
main.go
Entry point. It simply calls cli.Main
which we can use for testing.
src/cli/Main.go
The command line interface expects a command like build
as the first argument.
Commands are implemented as functions in the src/cli directory.
Each command has its own set of parameters.
src/cli/Build.go
The build command creates a new Build
instance with the given directory and calls the Run
method.
If no directory is specified, it will use the current directory.
If the --dry
flag is specified, it will perform all tasks except the final write to disk.
This flag should be used in most tests and benchmarks to avoid needless disk writes.
q build
q build examples/hello
q build examples/hello --dry
src/build/Build.go
The Build
type defines all the information needed to start building an executable file.
The name of the executable will be equal to the name of the build directory.
Run
starts the build which will scan all .q
source files in the build directory.
Every source file is scanned in its own goroutine for performance reasons.
Parallelization here is possible because the order of code in a directory is not significant.
The main function is meanwhile waiting for new function objects to arrive from the scanners. Once a function has arrived, it will create another goroutine for the function compilation. The function will then be translated to generic assembler instructions.
All the functions that are required to run the program will be added to the final assembler. The final assembler resolves label addresses, optimizes the performance and generates the specific x86-64 machine code from the generic instruction set.
The Run
method is currently not fully implemented.
Tests
go test -coverpkg=./...
Benchmarks
go test -bench=. -benchmem
License
Please see the license documentation.
Copyright
© 2023 Eduard Urbach