Language Basics
Jock is a high-level, general-purpose, functional programming language which targets the Nock ISA. Jock supports basic programming control constructs and data types, as well as cross-compatibility with Hoon (a powerful lower-level language also targeting the Nock ISA). Jock's syntax is similar to Python, Swift, Ruby, and other scripting languages.
Every Jock expression must result in a value, and values must be composed together in a “sensical” way. As a language which is functional-as-in-Lisp-like, Jock can emit side effects, but typically is conceived of as a pure function operating on input.
The simplest possible Jock programs are, therefore, simply data literals, like 5. We call bare values like these atoms and collections of them cells (pairs) or tuples (general n-ary).
Atoms
Jock currently supports the following data types:
A noun is the most general type, being either an atom or a cell; the type is written
*.1.000is a numeric atom 1000 or 1,000 (German-style delimiters); the type is written@orAtomorUint.0xdead.beefis a hexadecimal atom; there is not yet a type marker.'this is å message'is a string atom; there is not yet a type marker.true/falseare loobeans; the type is written?.%txtis a text constant or symbol.
Containers
Containers are collections of other containers and/or atoms.
Cell/Tuple
The simplest container is a cell (Nock pair) or a tuple.
(1 2) // a pair of atoms
(1 2 3) // a 3-tuple of atoms
((1 2) (3 4)) // a pair of pairs of atomsThe next simplest container is a list (null-terminated tuple), which has its own syntax.
Jock also supports Sets, collections of unique elements.
Expressions
Expressions in Jock may be as simple as data literals (as above), ranging up to function calls and operator expressions.
Statements
Statements involve Jock keywords and must adhere to Jock syntax.
Most statements end with a required ; “mic” to denote the program's continuation. Only terminal expressions (expressions that result in a value to be returned out of the evaluation tree) do not end in a ; “mic”.
Variables
Variable names (including method names) are snake-case.
Type names start with a single upper-case letter.
Last updated