|
||
---|---|---|
docs | ||
examples/hello | ||
lib | ||
src | ||
tests | ||
.gitignore | ||
go.mod | ||
go.sum | ||
main.go |
q
A programming language including compiler, assembler and linker with the following goals:
- Fast compilation
- High performance
- Tiny executables
Installation
Build:
git clone https://git.urbach.dev/cli/q
cd q
go build
Symlink:
ln -s $PWD/q ~/.local/bin/q
Usage
Build:
q build examples/hello
Run:
./examples/hello/hello
Tests
To run all tests:
go run gotest.tools/gotestsum@latest
Every package must pass its unit tests.
The code coverage should ideally be around 80-100% for each package.
Integration tests that test the output of the produced executables are located in the dedicated tests
directory.
Platforms
Matrix
arm64 | x86-64 | |
---|---|---|
Linux | ✔️ | ✔️ |
Mac | ✔️* | ✔️ |
Windows | ✔️* | ✔️ |
Those marked with a star are supported in theory but there are no developer machines to test them.
Cross compilation
Compilation for a different target is supported out of the box:
q build examples/hello --os linux
q build examples/hello --os mac
q build examples/hello --os windows
q build examples/hello --arch x86
q build examples/hello --arch arm
Security
PIE
All executables are built as Position Independent Executables (PIE) supporting a dynamic base address.
Memory pages
Code and data are separated into different memory pages and loaded with different access permissions.
Read | Execute | Write | |
---|---|---|---|
Code | ✔️ | ✔️ | ❌ |
Data | ✔️ | ❌ | ❌ |
Status
q
is under heavy development and not ready for production yet.
Feel free to get in touch if you are interested in helping out.
License
Please see the license documentation.
Copyright
© 2025 Eduard Urbach