top | item 44797334

Show HN: Scar – A programming language for easy concurrency and parallelism

7 points| death_eternal | 6 months ago |scarlang.pages.dev

7 comments

order

death_eternal|6 months ago

Repo: https://github.com/navid-m/scar

Because of 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."
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 examples directory compile.

ljchen|6 months ago

Interesing idea. I am wondering what are the use cases on top of your head? I am asking because in my understanding people who care concurrency and parallelism are often those who care performance.

death_eternal|6 months ago

Like I said, the use case is heavy numerical workloads with, e.g. dataframes, in a context where the data is too big for something like python to handle. Using Nim for this is quite difficult too due to value unboxing overhead. It is easier to optimize for things like cache locality and avoid unnecessary allocations using this tool.

renox|6 months ago

That's a minor detail but C's "%d" isn't something to copy in a new language, python's format/template string is much better.