The repo can be found here.
Due to the relatively poor state of multithreading in Nim and the reliance on external libraries like Arraymancer for heavy numerical workloads (also the performance issues with boxed values due to ref object
everywhere), I started writing a language from scratch, with built-in support for concurrency via parallel blocks (without macros) and a C backend, similar to Nim.
GC is optional and the stdlib will work with or without the GC.
Example:
int glob_value = 0
float glob_value_2 = 0.0
parallel:
glob_value = some_heavy_task()
glob_value_2 = some_other_heavy_task()
The idea is to make things like accessing shared memory concurrently a trivial process by automating the generation of thread synchronization code.
Also there are parallel fors, like so:
parallel for x = 1 to 5:
print "x = %d" | x
parallel for y = 10 to 20:
print "y = %d" | y
sleep 0.1
print "Nested parallel for loop completed."
In addition to the concurrency features, the language's type system is being designed to avoid common performance pitfalls found in Nim, particularly around the overuse of heap-allocated ref objects. Instead, it encourages value types by default.
It is not ready for use at all currently, though will likely see further development until it is.
Compiler implemented in Go, originally with Participle, recursive-descent approach. All examples in the tests/
directory compile.
The official project site is here.
Top comments (0)