Brett Slatkin: Why am I building a new functional programming language?

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
  • futhark

    :boom::computer::boom: A data-parallel functional programming language

  • > He spoke of the potential for functional languages to provide a significant, intrinsic advantage when it comes to parallel computing.

    > (...)

    > If that were true, you'd expect that the many existing functional programming languages would have already satisfied this need. But in my opinion, they haven't

    Well there is https://futhark-lang.org/ - it runs on the GPU, and is awesome.

    On the CPU side, I think that Rust plus https://github.com/rayon-rs/rayon was a huge breakthrough on writing parallel programs using both functional and imperative programming, and future languages should learn from its successes. The ownership system & the borrow checker, plus other type-level features like the Send and Sync traits, were essential to enable sharing read-only data between threads without synchronization, or sharing read-write data with synchronization, all checked at compile time for data races (which is a huge problem to solve, and is something that neither Go nor Java protects against at compile time)

    Indeed Futhark shares a key feature with Rust: it uses uniqueness types to enable in-place updates, which is kind like a limited form of Rust ownership: if you are the sole user of some memory, you can update it and other code will be none the wiser. This kind of thing is very important to build functional programs that are performant in practice.

  • rayon

    Rayon: A data parallelism library for Rust

  • > He spoke of the potential for functional languages to provide a significant, intrinsic advantage when it comes to parallel computing.

    > (...)

    > If that were true, you'd expect that the many existing functional programming languages would have already satisfied this need. But in my opinion, they haven't

    Well there is https://futhark-lang.org/ - it runs on the GPU, and is awesome.

    On the CPU side, I think that Rust plus https://github.com/rayon-rs/rayon was a huge breakthrough on writing parallel programs using both functional and imperative programming, and future languages should learn from its successes. The ownership system & the borrow checker, plus other type-level features like the Send and Sync traits, were essential to enable sharing read-only data between threads without synchronization, or sharing read-write data with synchronization, all checked at compile time for data races (which is a huge problem to solve, and is something that neither Go nor Java protects against at compile time)

    Indeed Futhark shares a key feature with Rust: it uses uniqueness types to enable in-place updates, which is kind like a limited form of Rust ownership: if you are the sole user of some memory, you can update it and other code will be none the wiser. This kind of thing is very important to build functional programs that are performant in practice.

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • wat-js

    Concurrency and Metaprogramming for JS

  • https://github.com/manuel/wat-js

    If you have delimited continuations then you can construct coroutines/threads/await/async, promises etc.

    I guess that this might be suitable for many scenarios thanks to nodejs, but the runtimes it relies on are not exactly small.

  • julia

    The Julia Programming Language

  • Without articulating what particular tradeoffs the author is balancing and sounding like they only recently realized/discovered the parallelism advantage possible to functional programming languages and paradigms, it is hard to know for sure, but I might venture a guess that Julia will be superior to what they build: https://julialang.org

  • HVM

    A massively parallel, optimal functional runtime in Rust

  • See also the Higher-Order Virtual Machine for a functional, non-garbage-collected, and parallel runtime: https://github.com/HigherOrderCO/HVM

  • Kind

    A next-gen functional language (by HigherOrderCO)

  • Hey, that's pretty cool! The lang that targets this runtime is https://github.com/HigherOrderCO/Kind

  • pandoc

    Universal markup converter

  • It's not at all difficult (https://pandoc.org/). However, I'd hazard a guess that pandoc written in Rust or C (with idioms appropriate to those languages) would be much more performant.

  • SaaSHub

    SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives

    SaaSHub logo
  • ada-spark-rfcs

    Platform to submit RFCs for the Ada & SPARK languages

  • Ada might be getting pattern matching soon too:

    https://github.com/AdaCore/ada-spark-rfcs/blob/master/protot...

  • ECMAScript 6 compatibility table

    ECMAScript compatibility tables

  • Case in point: Tail Call Optimization has been part of the JS spec since ES6, but remains completely unimplemented in all mainstream browsers/engines besides Safari[1]. For all but the most predictable inputs, you're pretty much forced to use loops where recursion would otherwise be preferable.

    Additional case in point: async Iterables cannot be processed as a piped stream. You must use the for await construct, which is a shame considering the FP niceties that the Array type already provides for more traditional lists. Once again, you are forced to use an imperative construct unless you specifically want to defeat the purpose of using an Iterable in the first place by trying to convert it into an Array (... and potentially choking in the process, I might add!).

    [1]: https://kangax.github.io/compat-table/es6/

  • Rx.NET

    The Reactive Extensions for .NET

  • The thing that really irks me is that the generator pattern doesn't have to be an OO-first feature. Observable streams[1] work with the same basic foundation and those are awesome for FP.

    [1]: https://reactivex.io/

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • 🧙‍♂️Master JavaScript with these 5 GitHub repositories🪄✨🚀

    4 projects | dev.to | 16 Mar 2024
  • Announcing Chapel 1.32

    6 projects | news.ycombinator.com | 9 Oct 2023
  • [ANN] Haskell Streamly 0.9.0 Release!

    6 projects | /r/haskell | 25 May 2023
  • How much are you meant to comment on a code?

    1 project | /r/AskProgramming | 11 May 2023
  • What is React State Management?

    5 projects | dev.to | 6 Apr 2023