• Ephera@lemmy.ml
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 year ago

    Only Clojure supports parallelism.

    It’s wild to me that this is said almost between the lines. In this particular benchmark, it obviously didn’t help, but for many workloads that’s going to make a massive difference or even leave Clojure as the only viable choice.

    • ☆ Yσɠƚԋσʂ ☆@lemmy.mlOP
      link
      fedilink
      arrow-up
      3
      ·
      1 year ago

      Indeed, and it’s also worth noting that doing parallelism in Clojure is inherently easier than in an imperative language since data is immutable by default. If you’re using Python or Ruby then you have to consider parallelism up front in your design, meanwhile with Clojure you can just swap map with pmap.

      • Ephera@lemmy.ml
        link
        fedilink
        English
        arrow-up
        2
        ·
        1 year ago

        Ah, interesting. I’m currently in the Rust rabbit hole, which takes a very different path towards race condition safety (it’s imperative and the compiler separately checks that you’re not using mutability in parallel contexts), but you actually get quite a similar feature, in that you can swap .iter().map() with .par_iter().map() (via a library).

        • ☆ Yσɠƚԋσʂ ☆@lemmy.mlOP
          link
          fedilink
          arrow-up
          2
          ·
          1 year ago

          Yeah, borrow checking approach in Rust is pretty neat since it lets the compiler track exactly where a data structure is being mutated at compile time. Rust approach is more efficient overall as well, but structural sharing has its own benefits as well since you get stuff like history for free. XTDB is a neat project that leverages this property for a temporal db.