1.7 KiB
1.7 KiB
sx
*** HIGHLY EXPERIMENTAL *** DON'T USE ***
This experiment is trying to answer a few questions:
Q: Can we have an system language to build declarative ui ?
NOTE:
i hope you have memory... currently it doesn't free anything :D
Quick Sort Example
#import "modules/std.sx";
quickSort :: (items: []$T) {
partition :: (items: []T, lo: s32, hi: s32) -> s32 {
pivot := items[hi];
i := lo - 1;
j := lo;
while j < hi {
if items[j] < pivot {
i += 1;
tmp := items[i];
items[i] = items[j];
items[j] = tmp;
}
j += 1;
}
i += 1;
tmp := items[i];
items[i] = items[hi];
items[hi] = tmp;
i;
}
sort :: (items: []T, lo: s32, hi: s32) {
if lo < hi {
pi := partition(items, lo, hi);
sort(items, lo, pi - 1);
sort(items, pi + 1, hi);
}
}
sort(items, 0, items.len - 1);
}
main :: () {
arr := []s32.[1, 2, 3, 5, 2, 2, 3, 4, 5, 6, 6, 1];
quickSort(arr);
for arr {
if it_index > 0 { write(", "); }
print("{}", it);
}
write("\n");
}
Building
Requires Zig 0.16+ and LLVM 19.
zig build
Usage
# compile to binary
sx build examples/06-generic.sx
# compile and run
sx run examples/06-generic.sx
# emit LLVM IR
sx ir examples/06-generic.sx
# start the language server
sx lsp
Acknowledgments
- Jonathan Blow — for Jai, the language that inspired this one
- Andrew Kelley — for Zig, which made this compiler a joy to write