@@ -19,10 +19,9 @@ ones, which mean almost the same things. But why?
19Hoon has no close relatives. The normal jargon of programming
19Hoon has no close relatives. The normal jargon of programming
20maps poorly onto its semantics. For example, although Hoon is a
20maps poorly onto its semantics. For example, although Hoon is a
21typed language, the term "type" is not formally defined in Hoon.
21typed language, the term "type" is not formally defined in Hoon.
22−"Type" is a great word, but Hoon has three quite separate
22+"Type" is a great word, but Hoon has three separate concepts
23−concepts which could comfortably claim it. We say "type" all the
23+which could comfortably claim it. We say "type" all the time; we
24−time; we mean `span`, or `mold`, or `mark`, or possibly all
24+mean `span`, or `mold`, or `mark`, or possibly all three.
27Other common programming concepts used only informally in Hoon
26Other common programming concepts used only informally in Hoon
28are "function," "object," "event," "expression," "variable,"
27are "function," "object," "event," "expression," "variable,"
@@ -30,17 +29,21 @@ are "function," "object," "event," "expression," "variable,"
30more. We do use these words informally, but we're always making
29more. We do use these words informally, but we're always making
31an analogy whose precision depends on context.
30an analogy whose precision depends on context.
33−## Overview
32+Hoon has concepts *like* all these abstractions, but they remain
33+*false cognates*. The closer an inexact cognate, the more
34+unsettling it feels when the abstractions don't match. Learning
35+a few new words is a small price for avoiding this pain point.
35−This document is a quick overview of Hoon, structured as a
37+## Concepts
36−glossary of a few major concepts: `noun` (data), `nock`
39+A few major Hoon concepts: `noun` (data), `nock` (interpreter),
37−(interpreter), `mint` (compiler), `span` (type), `twig`
40+`mint` (compiler), `span` (type), `twig` (expression), `gate`
38−(expression), `gate` (function), `mold` (constructor), `core`
41+(function), `mold` (constructor), `core` (object), `mark`
39−(object), `mark` (protocol).
42+(protocol).
41### `noun` (data value)
44### `noun` (data value)
43−A value in Hoon is called a [`noun`](noun). A noun is either a
46+A value in Hoon is called a `noun`. A noun is either a
44unsigned integer of any size (`atom`), or an ordered pair of any
47unsigned integer of any size (`atom`), or an ordered pair of any
45two nouns (`cell`). Nouns are like Lisp S-expressions, but
48two nouns (`cell`). Nouns are like Lisp S-expressions, but
46simpler (Lisp atoms effectively have dynamic type bits).
49simpler (Lisp atoms effectively have dynamic type bits).
@@ -62,14 +65,19 @@ One common operation on nouns is `slot`, a tree addressing
62scheme which maps an atom to a subtree. The whole noun is slot
65scheme which maps an atom to a subtree. The whole noun is slot
63`1`; the left child of `n` is `2n`, the right child `2n+1`.
66`1`; the left child of `n` is `2n`, the right child `2n+1`.
68+Nothing in Nock, Hoon or Urbit can create cycles in a noun or
69+detect pointer equivalence. Nouns are generally implemented
70+with reference counting, and have a lazy short Merkle hash to
71+help with equality testing and associative containers.
65### `nock` (interpreter)
73### `nock` (interpreter)
67−Hoon compiles itself to the [Nock](../nock) VM. Nock is a
75+Hoon compiles itself to the [Nock](../../nock) VM. Nock is a
68Turing-complete, non-lambda combinator function. The function
76Turing-complete, non-lambda combinator function. The function
69takes a cell `{subject formula}`, and produces a noun `product`.
77takes a cell `{subject formula}`, and produces a noun `product`.
71To program in Hoon, this is all you need to know about Nock. But
79To program in Hoon, this is all you need to know about Nock. But
72−it's still fun and useful to [learn more](../nock).
80+it's still bfun and useful to [learn more](../../nock).
74## Compilation concepts
82## Compilation concepts