- Notifications
You must be signed in to change notification settings - Fork18
Vox language compiler. AOT / JIT / Linker. Zero dependencies
License
MrSmith33/vox
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
- Latest CI build
- Channel on /r/ProgrammingLanguages discord - Projects Q-Y -> Vox
Vox is a multiparadigm programming language inspired by D (60%), Jai (30%), and Zig (10%).
- Fast compilation
- Strong metaprogramming
- Can be used for scripting and standalone programs (both JIT and AOT compilation)
- No dependencies (except D compiler)
- Same syntax for most portions of the language (struct, function, enum, for, while, if, UFCS, slices, arrays)
- Conditional compilation
- Templates, Variadic templates, and functions
- C interoperability
- Modules / Packages
- No GC, minimal runtime, no classes (only structs), no exceptions
- More compile-time features, faster CTFE
- Using templates for heavy calculations is discouraged, instead, CTFE can be used for introspection, and code generation.
- Macros (WIP)
- No C++ interoperability
Supported:
- windows-x64 - host and target
- linux-x64 - host and target
- macos-x64 - only jit-mode
Planned:
- linux-arm64
- wasm
- windows-arm64?
- spirv (Vulkan/OpenCL/OpenGL shaders)
- Strong focus on application extensions
- Maximize user productivity
- Maximize application performance
- AOT and JIT, plugin support, runtime compilation, embedded compiler, tiered compilation
- Static typing
- Great error messages
- Fast / Incremental compilation
- Minimize effort needed for installation, setup, integration
- Minimal dependencies/encapsulate dependency into module or package
- Runtime as a library/minimal runtime/no runtime
- Embedding/extern C
- Code driven compilation, extending compiler from inside of the program being compiled
- Processor intrinsics
- Conditional compilation
- CTFE, Templates, Introspection, Code generation
i32fib(i32 number) {if (number<1)return0;if (number<3)return1;returnfib(number-1)+ fib(number-2);}structPoint { i32 x; i32 y;}T min[T](T a, T b) {if (a< b)return a;return b;}
Cross-platform hello worldhttps://gist.github.com/MrSmith33/34a7557ad5ac23ebe6cf27bef15a39a6
Fibonaccihttps://gist.github.com/MrSmith33/9645d9552b567fdbdc1a4d8822b4f1f7
Fannkuchhttps://gist.github.com/MrSmith33/ac14e66a83b9d047793adede464ca1ef
Roguelike tutorial using SDL2 -repo
Voxel engine that uses Vox as a scripting language:Voxelman 2
Example of JIT compilation for amd64 from D code:
code
// Source codestring source = q{voidtest(i32* array, i32 index, i32 value) { array[index] = value; }};// Error handling is omittedDriver driver;driver.initialize(jitPasses);scope(exit) driver.releaseMemory;driver.beginCompilation();driver.addModule(SourceFileInfo("test", source));driver.compile();driver.markCodeAsExecutable();// Get function pointerauto testFun = driver.context.getFunctionPtr!(void,int*,int,int)("test");// Use compiled functionint[2] val = [42,56];testFun(val.ptr,1,10);assert(val[1]==10);
Inmain.d
uncomment one of the following lines:
//version = bench; // Runs benchmark//version = devtest; // Run single test with fine-tuned logging. Useful for development. Uses tester.runDevTests(). Toggle options there for precise analisys while developing.//version = test; // Runs test suite. Uses tester.runAllTests().
and run with:source> dmd -m64 -i main.d && main
Benchmarking:
ldc2 -d-version=bench -m64 -O3 -release -boundscheck=off -enable-inlining -flto=full -i main.d && main
Debug CLI build:
dmd -i -g -m64 -version=cli main.d -of=vox.exe
Release CLI build:
ldc2 -d-version=cli -m64 -O3 -release -boundscheck=off -enable-inlining -flto=full -mcpu=native -i main.d -of=vox.exe
Debug shared library build:
ldc2 -m64 -shared -g -d-debug -fvisibility=hidden -link-defaultlib-shared=false -i c_api.d -of=libvox.dll
Compiling with Profile Guided Optimization:
ldc2 -d-version=test -m64 -release -fprofile-instr-generate -mcpu=native -i main.d -of=vox_instrumented.exevox_instrumentedldc-profdata merge default.profraw -output vox.profdataldc2 -d-version=cli -m64 -O3 -release -boundscheck=off -enable-inlining -flto=full -mcpu=native -fprofile-instr-use=vox.profdata -i main.d -of=vox.exe
Gives the full list of flags
vox--help
.vx
files are source code files..har
files, akaHuman Readable Archive files. A text file that combines multiple textual files.
Each file must begin with--- <path>
, three dashes, space, and name.
Files can be nested inside directories--- dir/dir2/file.txt
.
Example:
--- main.vximport kernel32;voidmain() { ExitProcess(42); }--- kernel32.vx@extern(module,"kernel32")noreturnExitProcess(u32 uExitCode);
Can be compiled withvox program.har
The compiler contains embedded tools:
Prints content of vox.pdb file into stdout.
vox pdb-dump vox.pdb
To get some syntax highlighting on GitHub define.gitattributes
file in the repository with the following content (docs):
*.vx linguist-language=D
All.vx
files will be highlighted and classified as D.
- Impl size: 40k LoC of D, 3MB exe
- Time to compile: 4s debug / 45s release
- Test suite: 95ms for 361 tests
- Time to compile 10MLoC of fibonacci: 8s on Windows, 7.5s on Linux
For more in detail description of implementation seeinternals.md
About
Vox language compiler. AOT / JIT / Linker. Zero dependencies
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.
Contributors5
Uh oh!
There was an error while loading.Please reload this page.