Quxlang in Q3 is now in the stage of “mostly works” with caveats. I would say in many ways Quxlang is caught up with early 2000s programming languages now. It’s not a direct competitor to something modern like C++26, and the compiler isn’t sufficiently mature and battle hardened to go up against established programming languages, but it’s way ahead of where it was before.
We now have 2 core features, interfaces and generics. These do not do the same thing as in other languages. Interfaces essentially allow you to implement vtable-like mechanisms with compiler supported syntax using INTERFACE and IMPLEMENTATION declarations. Generics are for implementing type-erasure.
Getting threading basically working was also a major milestone achieved recently, although it’s not thoroughly tested against all possible edge cases yet.
The std and runtime modules in the repo have support for things like arguments, files, etc. now. Basic data structures like std::map, std::set, std::list, and std::dynarr (dynamic array, similar to C++’s std::vector) have been added.
Of course, the compiler wont auto-include a std module, but one will be shipped as part of the Quxlang project, which you can use as-is or fork. The compiler and the std/runtime module are separate pieces, but the broader Quxlang project will still include a standard library separately from QXC.
Back to generics, In many ways, generics in Quxlang are similar to C++ concepts, but they use type erasure rather than compile time instantiation as their implementation mechanism. More detail on that is posted on Quxlang.Dev, which is the a new website which has an overview of various Quxlang syntax examples. Right now it’s quite rough but my goal is to make that the best resource for learning Quxlang.
Object oriented programming, including virtual inheritance was also implemented. I very quickly learned why so many other programming languages refused to implement virtual inheritance. But that is over now, and it seems to work. That goodness, because it was something of a nightmare to implement.
We also saw revision of the memory allocator model to one that might hopefully provide better performance.
Quxlang has a few major features which are still missing:
- Coroutines
- Exception Unwinding
- Better Reflection
- Concepts
Quxlang will likely need an LSP, debugger support, and various other things. But for now, the language is looking up and hopefully we can do something interesting with it soon.
Leave a comment