Pure is a modern-style functional programming language based on term rewriting. It offers equational definitions with pattern matching, full symbolic rewriting capabilities, dynamic typing, eager and lazy evaluation, lexical closures, built-in list and matrix support and an easy-to-use C interface. The interpreter uses LLVM as a backend to JIT-compile Pure programs to fast native code.

For instance, here is a famous equation which you hopefully remember from high school algebra: (x+y)^2 = x2+2*x*y+y2; Again, you can just paste this line into the interpreter, and lo and behold, it just works in Pure:

(a*x+(y+b))^2;
(a*x)^2+2*(a*x)*(y+b)+(y^2+2*y*b+b^2)

Now this might seem like an arcane feature, but many if not most real-world programming tasks involve a substantial amount of symbolic computations these days, and as a term rewriting language, Pure makes those easy. E.g., check the units.pure script in the sources for a practical example. (More examples from the sources can be found on the Examples wiki page.)

  • jaror
    link
    fedilink
    14 months ago

    The symbolic rewriting is interesting.

    I do wonder what “modern-style” functional programming means.

    Also their FAQ says:

    But considering other FPLs like Haskell and ML, Pure’s library support isn’t bad

    Clicking that link reveals a list of about 34 libraries. In comparison, Haskell’s current curated Stackage snapshot has 3340 packages in it (the total number of packages is probably more than 10x that). So, I think it is odd to claim its ecosystem is anywhere near Haskell’s.

    • @noli
      link
      14 months ago

      Maybe they also include the C interop in that library support?