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

Our great sponsors
  • SonarQube - Static code analysis for 29 languages.
  • InfluxDB - Access the most powerful time series database as a service
  • ONLYOFFICE ONLYOFFICE Docs — document collaboration in your environment
  • 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.

  • SonarQube

    Static code analysis for 29 languages.. Your projects are multi-language. So is SonarQube analysis. Find Bugs, Vulnerabilities, Security Hotspots, and Code Smells so you can release quality code every time. Get started analyzing your projects today for free.

  • 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.

  • InfluxDB

    Access the most powerful time series database as a service. Ingest, store, & analyze all types of time series data in a fully-managed, purpose-built database. Keep data forever with low-cost storage and superior data compression.

  • 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 5/6/7 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