Go for 1.0!!!
This is a fun post to write as the project is at a bit of a milestone! I have decided to mark the current state of the platform as 1.0
!
This isn’t to say the stack, or even the language, is done and ready to use as a practical tool. However, it does mean that the core parts of the language are there (and expected to be stable) and basic components of the stack, namely the type-checker and a simple JavaScript compiler do something reasonable. This isn’t enough to be ready for primetime but is enough to start building interesting applications with and have confidence that the language and runtime are not going to change out from under you!
So, what does Bosque code look like? You can see a range of examples on the github readme page but two simple examples are one checking the sign of numbers in a list or another computing an absolute value:
function allPositive(...args: List<Int>): Bool {
return args.allOf(pred(x) => x >= 0i);
}
function abs(x: BigInt): BigInt {
if (x < 0I) {
return -x;
}
return x;
}
These two samples give a nice feel of the language, block structured, strong type system, and plenty of functors for easy composition.
What’s next?
Well there is still a lot of work to do on the core language/compiler/runtime! Many features are marked todo (early returns, bulk operations, variants, etc.) and others are only partially implemented (like virtual methods). Standard library is very very minimal and, of course we want to get a nice set of small sample applications to show off the language and runtime.
On a larger scale we are looking at two major features for the 2.0 phase of the project:
- Small Model Verifier – a symbolic checker with guarantees of the decidability of the presence or absence of small inputs that trigger any runtime failure/assertion/pre/post/invariant condition.
- A Ω()-time and O(1)-space runtime and AOT compiler – a runtime that is designed to be performant, low memory, and predictable in its behavior.
The plan is to implement these in Bosque itself as a dog-fooding excercise, and because Bosque is just a nice language to work in, even if it is still a bit rough around the edges. Then we also be able to use this code as a validation test for the verifier and benchmarks for the runtime – just for some classic meta-circular fun!
As always, feedback is welcome and I am looking forward to seeing what (brave) early users do with the language and runtime!