Languages

Languages#

Nock is Turing-complete, but as you’ve probably come to realize, it’s not exactly a “programming” language: it’s too abstruse and economical to be used directly for most programming tasks. Instead, Nock is best thought of as a compilation target for higher-level languages.

At the current time, the high-level languages under most active development that target Nock are Hoon and Jock. There is also an Urwasm Nock compatibility layer for executing WebAssembly code on a Nock runtime.

  • Hoon is a mature systems programming language with much syntax and flexibility.

  • Jock is a scripting language designed as a more developer-friendly alternative to Hoon.

There have also been a few experimental compilers built to play with language concepts:

  • Hick by ~tacryt-socryp, a Lisp-like Hoon.

    (seq
      (put x 5)
      (put y (ffi add (get x) 1))
      (ffi mul (get x) (get y)))
    

    Hick is a proof of concept for what S-expression syntax might look like in Hoon.

  • Loon by ~fodwyt-ragful, a Lisp.

    • Discussion of Loon: Loon is an experimental Lisp dialect that compiles to Nock, with a unique split between two forms of abstraction: fn for ordinary closures and dfn for bare Nock formulas.

  • North by ~lagrev-nocfep, a Forth interpreter running as a Gall agent.

    • Discussion of North: North is an ANSI-compatible Forth interpreter that runs on a Nock host, demonstrating how different computation models can be implemented on top of Nock.

  • Trinitite by ~lagrev-nocfep, not a language, a Raspberry Pi Forth-based Nock OS.