81 lines
1.5 KiB
Markdown
81 lines
1.5 KiB
Markdown
# 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
|
|
|
|
```sx
|
|
#import "modules/std.sx";
|
|
|
|
quick_sort :: (items: []$T) {
|
|
partition :: (items: []T, lo: s64, hi: s64) -> s64 {
|
|
pivot := items[hi];
|
|
i := lo - 1;
|
|
j := lo;
|
|
while j < hi {
|
|
if items[j] < pivot {
|
|
i += 1;
|
|
items[i], items[j] = items[j], items[i];
|
|
}
|
|
j += 1;
|
|
}
|
|
i += 1;
|
|
items[i], items[hi] = items[hi], items[i];
|
|
i;
|
|
}
|
|
|
|
sort :: (items: []T, lo: s64, hi: s64) {
|
|
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 : []s64 = .[333, 2, 3, 5, 2, 2, 3, 4, 5, 6, 6, 1];
|
|
quick_sort(arr);
|
|
print("{}\n", arr);
|
|
}
|
|
```
|
|
|
|
## Building
|
|
|
|
Requires **Zig 0.16+** and **LLVM 19**.
|
|
|
|
```sh
|
|
zig build
|
|
```
|
|
|
|
## Usage
|
|
|
|
```sh
|
|
# 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](https://en.wikipedia.org/wiki/Jonathan_Blow) — for Jai, the language that inspired this one
|
|
- [Andrew Kelley](https://andrewkelley.me) — for Zig, which made this compiler a joy to write
|