on master help sign in
Various fixes and improvements.
commitbeeb398b65ce5a32b4b8db94f67278019e9fbcc0 authorC. Guy Yarvin <cgyarvin@gmail.com> dateMon 4 Apr 2016, 16:15 (11 years ago) parent4a847c9
61 files changed+218−187
docs.md+9 docs/programming.md+2 docs/programming/architecture.md−9 docs/programming/learning/core.md → docs/programming/core.md+7−7 docs/programming/learning/core/jargon.md → docs/programming/core/concepts.md+1−1 docs/programming/learning/core/demo.md → docs/programming/core/demo.md+3−3 docs/programming/learning/core/examples.md → docs/programming/core/examples.md docs/programming/learning/core/mint.md → docs/programming/core/mint.md docs/programming/learning/core/nock.md → docs/programming/core/nock.md docs/programming/learning/core/noun.md → docs/programming/core/noun.md docs/programming/learning/core/philosophy.md → docs/programming/core/philosophy.md+1−1 docs/programming/core/span.md+157 docs/programming/learning/core/twig.md → docs/programming/core/twig.md+17−13 docs/programming/learning/core/twig/atom.md → docs/programming/core/twig/atom.md docs/programming/learning/core/twig/call.md → docs/programming/core/twig/call.md docs/programming/learning/core/twig/cast.md → docs/programming/core/twig/cast.md docs/programming/learning/core/twig/cell.md → docs/programming/core/twig/cell.md docs/programming/learning/core/twig/core.md → docs/programming/core/twig/core.md docs/programming/learning/core/twig/flow.md → docs/programming/core/twig/flow.md docs/programming/learning/core/twig/limb.md → docs/programming/core/twig/limb.md docs/programming/learning/core/twig/mold.md → docs/programming/core/twig/mold.md docs/programming/learning/core/twig/nock.md → docs/programming/core/twig/nock.md docs/programming/learning/core/twig/syntax.md → docs/programming/core/twig/syntax.md docs/programming/learning/core/twig/syntax/design.md → docs/programming/core/twig/syntax/design.md docs/programming/learning/core/twig/syntax/motivation.md → docs/programming/core/twig/syntax/motivation.md docs/programming/learning/core/twig/test.md → docs/programming/core/twig/test.md docs/programming/learning/deep.md → docs/programming/deep.md docs/programming/learning/deep/0-nouns.md → docs/programming/deep/0-nouns.md docs/programming/learning/deep/1-twigs.md → docs/programming/deep/1-twigs.md docs/programming/learning/deep/2-syntax.md → docs/programming/deep/2-syntax.md docs/programming/learning/deep/3-program.md → docs/programming/deep/3-program.md docs/programming/learning/deep/4-functions.md → docs/programming/deep/4-functions.md docs/programming/learning.md−9 docs/programming/learning/arvo.md−9 docs/programming/learning/core/span.md−118 docs/programming/reference.md+2−2 docs/programming/architecture/arvo.md → docs/programming/reference/arvo.md docs/programming/architecture/arvo/ames.md → docs/programming/reference/arvo/ames.md docs/programming/architecture/arvo/ames/commentary.md → docs/programming/reference/arvo/ames/commentary.md docs/programming/architecture/arvo/behn.md → docs/programming/reference/arvo/behn.md docs/programming/architecture/arvo/clay.md → docs/programming/reference/arvo/clay.md docs/programming/architecture/arvo/clay/architecture.md → docs/programming/reference/arvo/clay/architecture.md docs/programming/architecture/arvo/clay/commentary.md → docs/programming/reference/arvo/clay/commentary.md docs/programming/architecture/arvo/dill.md → docs/programming/reference/arvo/dill.md docs/programming/architecture/arvo/eyre.md → docs/programming/reference/arvo/eyre.md docs/programming/architecture/arvo/eyre/commentary.md → docs/programming/reference/arvo/eyre/commentary.md docs/programming/architecture/arvo/ford.md → docs/programming/reference/arvo/ford.md docs/programming/architecture/arvo/ford/commentary.md → docs/programming/reference/arvo/ford/commentary.md docs/programming/architecture/arvo/gall.md → docs/programming/reference/arvo/gall.md docs/programming/architecture/nockref.md → docs/programming/reference/nock/reference.md docs/programming/architecture/nock.md → docs/programming/reference/nock/tutorial.md docs/programming/architecture/runtime.md → docs/programming/reference/runtime.md docs/programming/system.md+10 docs/programming/learning/arvo/basic.md → docs/programming/system/basic.md+9−15 docs/programming/learning/arvo/generators.md → docs/programming/system/generators.md docs/programming/learning/arvo/http.md → docs/programming/system/http.md docs/programming/learning/arvo/marks.md → docs/programming/system/marks.md docs/programming/learning/arvo/network.md → docs/programming/system/network.md docs/programming/learning/arvo/state.md → docs/programming/system/state.md docs/programming/learning/arvo/subscriptions.md → docs/programming/system/subscriptions.md docs/programming/learning/arvo/web-apps.md → docs/programming/system/web-apps.md
docs.md+9
@@ -3,6 +3,15 @@ anchor: none
33footer: true
44---
55
6+Welcome to the Urbit documentation, served from Urbit. (If you
7+create an urbit, you can make a tree site like this one; just
8+copy a tree of Markdown files into a mounted `/===/web` node.)
9+
10+To understand what Urbit is, what it's designed to do, and what
11+it's made of, look into the [About](About) node. To install and
12+use Urbit, see [Using](Using). To learn how to program in Urbit,
13+see [Programming](Programming).
14+
615<div class="lead">
716 <div class="logo inverse"></div>
817 <h1 class="blue i-b">Urbit docs</h1>
docs/programming.md+2
@@ -4,4 +4,6 @@ sort: 1
44
55# About
66
7+To learn about the
8+
79<list dataPath="docs/about"></list>
docs/programming/architecture.mddeleted−9
@@ -1,9 +0,0 @@
1−---
2−sort: 1
3−---
4−
5−# Architecture
6−
7−Design and technical overview documents.
8−
9−<list dataPath="docs/architecture"></list>
docs/programming/learning/core.md → docs/programming/core.mdrenamed+7−7
@@ -11,14 +11,14 @@ means "hooligan" in Australian. Practically, "Hoon" is a short
1111punchy name which search engines handle well.
1212
1313This manual defines a practical Hoon subset we call Core Hoon.
14−(Some of the internal structures we present are simplified to
15−reflect the Core subset.)
14+Some of the internal structures we present are simplified to
15+reflect the Core subset.
1616
1717To read it for the first time, read these links in order:
1818
19−<list>
20−</list>
19+<list/>
20+
21+The Core manual is as terse as possible and written from a
22+top-down reference perspective. This will suit some and not others. For a
23+more narrative, bottom-up analysis, read [Deep Hoon](deep).
2124
22−Once you've been through all this material, you can try some
23−[exercises]() if you feel you're ready, or read [Deep Hoon]() for
24−a more narrative introduction.
docs/programming/learning/core/jargon.md → docs/programming/core/concepts.mdrenamed+1−1
@@ -2,7 +2,7 @@
22sort: 3
33---
44
5−# Terminology
5+# Concepts and terminology
66
77Usually, a new language is an improvement on one you already
88know. If it isn't, it probably at least shares concepts with a
docs/programming/learning/core/demo.md → docs/programming/core/demo.mdrenamed+3−3
@@ -51,6 +51,6 @@ The tail of the pair is line 14, which repeats the loop (like
5151Clojure `recur`), with `count` incremented. This list of strings
5252is the rest of the output list.
5353
54−You can test this code by typing it into `home/gen/fizzbuzz.hoon`
55−in your Urbit mount directory, then typing `+fizzbuzz 100` in the
56−Urbit dojo (shell).
54+You can test this code by mounting your home desk with `|mount %home`;
55+copying it into `home/gen/fizzbuzz.hoon` in your Urbit pier; then
56+typing `+fizzbuzz 100` in the Urbit dojo (shell).
docs/programming/learning/core/examples.md → docs/programming/core/examples.mdrenamed

The content is the same.

docs/programming/learning/core/mint.md → docs/programming/core/mint.mdrenamed

The content is the same.

docs/programming/learning/core/nock.md → docs/programming/core/nock.mdrenamed

The content is the same.

docs/programming/learning/core/noun.md → docs/programming/core/noun.mdrenamed

The content is the same.

docs/programming/learning/core/philosophy.md → docs/programming/core/philosophy.mdrenamed+1−1
@@ -2,7 +2,7 @@
22sort: 2
33---
44
5−# Philosophy
5+# Mission statement
66
77Hoon is a strict, typed functional language which compiles itself
88to the Nock VM (whose spec fits on a T-shirt).
docs/programming/core/span.mdnew file+157
@@ -0,0 +1,157 @@
1+---
2+sort: 7
3+---
4+
5+# Type: `span`
6+
7+A `span` is a set of nouns and an interpretation of these nouns.
8+
9+## Span, mold, type: what's in a type system?
10+
11+There is no Hoon syntax for a span. The programmer never defines
12+a span explicitly. It is always produced as the inferred range
13+of an expression (twig).
14+
15+But we still need simple, well-formed expressions that produce
16+regular and well-shaped ranges, for three reasons.
17+
18+First: in most cases, this trivial generator should be much
19+simpler than the computation itself. Casting the actual result
20+to its ideal shape makes sure we know what we're building.
21+
22+Second: we can define a standard form for such generators, and
23+the standard form is useful. The standard form is a constructor
24+function, or *mold*.
25+
26+A mold is an idempotent function (`gate`), accepting any noun.
27+(An idempotent function is one such that f(f(x)) equals f(x) if
28+f(x) does not crash.) The product range of the function is the
29+span, or *icon*, of the mold.
30+
31+Usually we use molds purely in the first sense: as an abstract
32+definition of a noun. Don't actually call a mold unless you're
33+actually validating untrusted foreign data. As a beginner,
34+hopefully you aren't!
35+
36+(It's also important to remember that any twig can be a mold.
37+Some stems are macros designed for making molds, but a mold is
38+defined by how it's used, not what it's made of. The Hoon type
39+system cannot even check the mold definition, since Hoon lacks
40+dependent type and therefore can't verify idempotence.)
41+
42+To summarize: a Hoon "type declaration" is the definition of a
43+function, the mold. A mold and a span are different things. A
44+mold is a constructor. A span defines a set of nouns, possibly
45+infinite, and annotates them with semantics.
46+
47+Either mold or span could be called a "type," but not both. We
48+often say "type" in Hoon. But we always mean it informally.
49+Ideally, the meaning is obvious from context. ("Type" can also
50+mean a `mark`, Urbit's equivalent of a MIME type.)
51+
52+## The `span` mold
53+
54+Usually in Hoon we define the semantics of a primitive by the
55+state the span of all nouns that implement that primitive. We
56+state this span as the icon of a mold. That mold is produced by
57+a kernel arm `span`:
58+
59+```
60+++ term @tas
61+++ span
62+ $@ $? $noun
63+ $void
64+ == $% {$atom p/term q/(unit atom)}
65+ {$cell p/span q/span}
66+ {$core p/span q/(map term span)}
67+ {$face p/term q/span}
68+ {$fork p/(set span)}
69+ {$hold p/span q/twig}
70+ ==
71+```
72+
73+This is a syntactically correct Hoon twig, but treat it as
74+pseudocode. If a span is an atom, it's either the atomic string
75+`noun` or `void`; if a cell, it's a tuple with one of the heads
76+`atom`, `cell`, `core`, etc. We'll go through each of these
77+cases below.
78+
79+## `$noun` and `$void`
80+
81+`$noun` is the set of all nouns. `$void` is the set of no nouns.
82+
83+## `{$cell p/span q/span}`
84+
85+`{$cell p/span q/span}` is the set of all cells with head `p` and
86+tail `q`.
87+
88+## `{$fork p/(set span)}
89+
90+`{$fork p/(set span)}` is the union of all spans in the set `p`.
91+
92+## `{$hold p/span q/twig}`
93+
94+A `$hold` span, with span `p` and twig `q`, is a lazy reference
95+to the span of `(mint p q)`. In English it means: "the type of
96+the product when we compile `q` against subject `p`.
97+
98+## `{$face p/term q/span}
99+
100+A `{$face p/term q/span}` wraps the label `p` around the span
101+`q`. `p` is a `term` or `@tas`, an atomic ASCII string which
102+obeys symbol rules: lowercase and digit only, infix hyphen,
103+first character must be lowercase.
104+
105+See the [twig chapter](twig) for how labels are resolved. It's
106+nontrivial.
107+
108+## `{%atom p/term q/(unit atom))}
109+
110+An `$atom` is an atom, with two twists. `q` is a `unit`, Hoon's
111+equivalent of a nullable pointer or a Haskell `Maybe`. If `q`
112+is `~`, null, the span is *warm*; any atom is in the span.
113+If `q` is `[~ x]`, where `x` is any atom, the span is *cold*;
114+its only legal value is the constant `x`.
115+
116+`p` in the atom is a terminal used as an *aura*, or soft atom
117+type. Auras are a lightweight, advisory representation of the
118+units, semantics, and/or syntax of an atom. An aura is an atomic
119+string; Two auras are compatible if one is a prefix of the other.
120+
121+For instance, `@t` means UTF-8 text (LSB low), `@ta` means ASCII
122+text, and `@tas` means an ASCII symbol. `@u` means an unsigned
123+integer, `@ud` an unsigned decimal, `@ux` an unsigned
124+hexadecimal. You can use a `@ud` atom as a `@u` or vice versa,
125+but not as a `@tas`.
126+
127+Auras are truly soft; you can turn any aura into any other,
128+statically, by casting through the empty aura `@`. Hoon is not
129+dependently typed and can't statically enforce data constraints
130+(for example, it can't enforce that a `@tas` is really a symbol).
131+
132+## `{$core p/span q/(map term span)}
133+
134+A `$core` is a code-data cell. The data (or *payload*) is the
135+tail; the code (or *battery*) is the head. `p`, a span, is the
136+span of the payload. `q`, a name-twig table, is the source code
137+for the battery.
138+
139+Each twig in the battery source is compiled to a formula, with
140+the core itself as the subject. The battery is a tree of these
141+formulas, or *arms*. An arm is a computed attribute against its
142+core.
143+
144+All code-data structures in normal languages (functions, objects,
145+modules, etc) become cores in Hoon. A Hoon battery looks a bit
146+like a method table, but not every arm is a "method" in the OO
147+sense. An arm is a computed attribute. A method is an arm whose
148+product is a Hoon function (or *gate*).
149+
150+A gate is a core with one arm, whose name is the empty symbol
151+`$`, and a payload whose shape is `{sample context}`. The
152+*context* is the subject in which the gate was defined; the
153+*sample* is the argument.
154+
155+To call this function on an argument `x`, replace the sample (at
156+tree address `6` in the core) with `x`, then compute the arm.
157+(Of course, we don't mutate the noun, we make a mutant copy.)
docs/programming/learning/core/twig.md → docs/programming/core/twig.mdrenamed+17−13
@@ -11,7 +11,7 @@ The definition of `twig` is the definition of Hoon. So let's
1111define the syntax and semantics of Hoon, a twig at a time. But
1212first, basic twig anatomy.
1313
14−## Twig anatomy
14+## Twig anatomy and jargon
1515
1616A twig is a tagged union (`book`) with the form `{stem bulb}`,
1717where the `stem` is an atomic symbol. The bulb for each stem has
@@ -25,9 +25,19 @@ The bulb is usually a tuple, sometimes a list or map. An element
2525of this structure is a *subexpression*.
2626
2727Usually a subexpression is itself a `twig`; sometimes it's an
28−`@tas` (symbol) or a `wing` (reference path). Solely for
29−clarity, we use the type alias `moss` for twigs meant to produce
30−molds. A `moss` is just a twig, both in syntax and semantics.
28+`@tas` (symbol) or a `wing` (reference path).
29+
30+## Moss versus wood
31+
32+Solely for clarity, we use the type alias `moss` for twigs whose
33+product is used as a mold. A `moss` is just a twig, both in
34+syntax and semantics; again, the difference is how we use it.
35+
36+Twigs are described as *mossy* and *woody*; an example of X is
37+the woody form of X, a mpld producing X is its woody form. For
38+instance, `$foo` (mossy) is a mold whose product is always `%foo`
39+(woody). (Obviously, wood is *yang* and moss is *yin*, so we
40+can also say "yang foo" or "yin foo".)
3141
3242## Twig categories
3343
@@ -36,13 +46,7 @@ match their rune prefix. Read forward by category:
3646
3747<div><list/></div>
3848
39−## Structures
40−
41−The whole Crash twig system, as a
42−
43−```
44−|%
45−++
46−--
47−```
49+## Twig structure
4850
51+The full Core Hoon `twig`. Note that this is simplified, but
52+everything useful can still be done in Core.
docs/programming/learning/core/twig/atom.md → docs/programming/core/twig/atom.mdrenamed

The content is the same.

docs/programming/learning/core/twig/call.md → docs/programming/core/twig/call.mdrenamed

The content is the same.

docs/programming/learning/core/twig/cast.md → docs/programming/core/twig/cast.mdrenamed

The content is the same.

docs/programming/learning/core/twig/cell.md → docs/programming/core/twig/cell.mdrenamed

The content is the same.

docs/programming/learning/core/twig/core.md → docs/programming/core/twig/core.mdrenamed

The content is the same.

docs/programming/learning/core/twig/flow.md → docs/programming/core/twig/flow.mdrenamed

The content is the same.

docs/programming/learning/core/twig/limb.md → docs/programming/core/twig/limb.mdrenamed

The content is the same.

docs/programming/learning/core/twig/mold.md → docs/programming/core/twig/mold.mdrenamed

The content is the same.

docs/programming/learning/core/twig/nock.md → docs/programming/core/twig/nock.mdrenamed

The content is the same.

docs/programming/learning/core/twig/syntax.md → docs/programming/core/twig/syntax.mdrenamed

The content is the same.

docs/programming/learning/core/twig/syntax/design.md → docs/programming/core/twig/syntax/design.mdrenamed

The content is the same.

docs/programming/learning/core/twig/syntax/motivation.md → docs/programming/core/twig/syntax/motivation.mdrenamed

The content is the same.

docs/programming/learning/core/twig/test.md → docs/programming/core/twig/test.mdrenamed

The content is the same.

docs/programming/learning/deep.md → docs/programming/deep.mdrenamed

The content is the same.

docs/programming/learning/deep/0-nouns.md → docs/programming/deep/0-nouns.mdrenamed

The content is the same.

docs/programming/learning/deep/1-twigs.md → docs/programming/deep/1-twigs.mdrenamed

The content is the same.

docs/programming/learning/deep/2-syntax.md → docs/programming/deep/2-syntax.mdrenamed

The content is the same.

docs/programming/learning/deep/3-program.md → docs/programming/deep/3-program.mdrenamed

The content is the same.

docs/programming/learning/deep/4-functions.md → docs/programming/deep/4-functions.mdrenamed

The content is the same.

docs/programming/learning.mddeleted−9
@@ -1,9 +0,0 @@
1−---
2−sort: 2
3−---
4−
5−# Learning
6−
7−Learning to program in Urbit.
8−
9−<list dataPath="docs/architecture"></list>
docs/programming/learning/arvo.mddeleted−9
@@ -1,9 +0,0 @@
1−---
2−sort: 3
3−---
4−
5−# Arvo programming
6−
7−Short, example-based tutorials of simple Arvo techniques.
8−
9−<list/></list>
docs/programming/learning/core/span.mddeleted−118
@@ -1,118 +0,0 @@
1−---
2−sort: 7
3−---
4−
5−# Type: `span`
6−
7−A `span` is a type as most languages define it: a set of values
8−and a semantic interpretation of these values.
9−
10−## `mold`: type (as constructor)
11−
12−Why isn't `span` called "type"? Because Hoon also has a `mold`,
13−a completely different concept that could also be called a "type."
14−Hoon has no syntax for declaring spans. Spans are always created
15−by `mint`, using type inference.
16−
17−But we do want to define data structures with regular shapes. A
18−*mold* is an idempotent function (`gate`), accepting any noun.
19−The span of our structure is the result set of this function.
20−
21−In theory, either molds or spans could be called "types." In
22−practice, they're both called "types." The T-word has to stay
23−informal: it can't be banned, and it's already confusing enough.
24−
25−## `span`: definition
26−
27−This twig defines a mold named `span`, whose icon is the set of
28−all spans. Don't worry about the syntax yet:
29−
30−```
31−++ span
32− $@ $? $noun
33− $void
34− == $% {$atom p/term q/(unit atom)}
35− {$cell p/span q/span}
36− {$core p/span q/(map term span)}
37− {$face p/term q/span}
38− {$fork p/(set span)}
39− {$hold p/span q/twig}
40− ==
41−```
42−
43−## `$noun` and `$void`
44−
45−`$noun` is the set of all nouns. `$void` is the set of
46−no nouns.
47−
48−## `{$cell p/span q/span}`
49−
50−`{$cell p/span q/span}` is the set of all cells with head `p` and
51−tail `q`.
52−
53−## `{$fork p/(set span)}
54−
55−`{$fork p/(set span)}` is the union of all spans in the set `p`.
56−
57−## `{$hold p/span q/twig}`
58−
59−A `$hold` span, with span `p` and twig `q`, is a lazy reference
60−to the span of `(mint p q)`. In English it means: "the type of
61−the product when we compile `q` with the subject `p`. (Hoon is
62−a strict language and the Hoon compiler is written in Hoon, so
63−laziness has to be implemented manually.)
64−
65−## `{$face p/term q/span}
66−
67−A `{$face p/term q/span}` wraps the label `p` around the span
68−`q`. See the twig section for how labels are resolved.
69−
70−## `{%atom p/term q/(unit atom))}
71−
72−An `$atom` is an atom, with two twists. `q` is a `unit`, Hoon's
73−equivalent of `Maybe` in Haskell or a nullable in Rust. If `q`
74−is `~`, null, the span is *warm*; any atom is in the span.
75−If `q` is `[~ x]`, where `x` is any atom, the span is *cold*;
76−its only legal value is the constnat `x`.
77−
78−`p` in the atom is a terminal used as an *aura*, or soft atom
79−type. Auras are a lightweight, advisory representation of the
80−units, semantics, and/or syntax of an atom. Two auras are
81−compatible if one is a prefix of the other.
82−
83−For instance, `@t` means UTF-8 text (LSB low), `@ta` means ASCII
84−text, and `@tas` means an ASCII symbol. `@u` means an unsigned
85−integer, `@ud` an unsigned decimal, `@ux` an unsigned
86−hexadecimal. You can use a `@ud` atom as a `@u` or vice versa,
87−but not as a `@tas`.
88−
89−Auras are truly soft; you can turn any aura into any other,
90−statically, by casting through the empty aura `@`. Hoon is not
91−dependently typed and can't enforce data constraints.
92−
93−## `{$core p/span q/(map term span)}
94−
95−A `$core` is a code-data cell. The data (or *payload*) is the
96−tail; the code (or *battery*) is the head. `p`, a span, is the
97−span of the payload. `q`, a name-twig table, is the source code
98−for the battery.
99−
100−Each twig in the battery source is compiled to a formula, with
101−the core itself as the subject. The battery is a tree of these
102−formulas, or *arms*. An arm is a computed attribute against its
103−core.
104−
105−All code-data structures in normal languages (functions, objects,
106−modules, etc) become cores in Hoon. A Hoon battery looks a bit
107−like a method table, but not every arm is a "method" in the OO
108−sense. An arm is a computed attribute. A method is an arm whose
109−product is a Hoon function (or *gate*).
110−
111−A gate is a core with one arm, whose name is the empty symbol
112−`$`, and a payload whose shape is `{sample context}`. The
113−*context* is the subject in which the gate was defined; the
114−*sample* is the argument.
115−
116−To call this function on an argument `x`, replace the sample (at
117−tree address `6` in the core) with `x`, then compute the arm.
118−(Of course, we don't mutate the noun, we make a mutant copy.)
docs/programming/reference.md+2−2
@@ -1,9 +1,9 @@
11---
2−sort: 3
2+sort: 4
33---
44
55# Reference
66
7−Hoon language and library reference documentation.
7+Background information on Nock, Hoon, Arvo,
88
99<list dataPath="docs/system"></list>
docs/programming/architecture/arvo.md → docs/programming/reference/arvo.mdrenamed

The content is the same.

docs/programming/architecture/arvo/ames.md → docs/programming/reference/arvo/ames.mdrenamed

The content is the same.

docs/programming/architecture/arvo/ames/commentary.md → docs/programming/reference/arvo/ames/commentary.mdrenamed

The content is the same.

docs/programming/architecture/arvo/behn.md → docs/programming/reference/arvo/behn.mdrenamed

The content is the same.

docs/programming/architecture/arvo/clay.md → docs/programming/reference/arvo/clay.mdrenamed

The content is the same.

docs/programming/architecture/arvo/clay/architecture.md → docs/programming/reference/arvo/clay/architecture.mdrenamed

The content is the same.

docs/programming/architecture/arvo/clay/commentary.md → docs/programming/reference/arvo/clay/commentary.mdrenamed

The content is the same.

docs/programming/architecture/arvo/dill.md → docs/programming/reference/arvo/dill.mdrenamed

The content is the same.

docs/programming/architecture/arvo/eyre.md → docs/programming/reference/arvo/eyre.mdrenamed

The content is the same.

docs/programming/architecture/arvo/eyre/commentary.md → docs/programming/reference/arvo/eyre/commentary.mdrenamed

The content is the same.

docs/programming/architecture/arvo/ford.md → docs/programming/reference/arvo/ford.mdrenamed

The content is the same.

docs/programming/architecture/arvo/ford/commentary.md → docs/programming/reference/arvo/ford/commentary.mdrenamed

The content is the same.

docs/programming/architecture/arvo/gall.md → docs/programming/reference/arvo/gall.mdrenamed

The content is the same.

docs/programming/architecture/nockref.md → docs/programming/reference/nock/reference.mdrenamed

The content is the same.

docs/programming/architecture/nock.md → docs/programming/reference/nock/tutorial.mdrenamed

The content is the same.

docs/programming/architecture/runtime.md → docs/programming/reference/runtime.mdrenamed

The content is the same.

docs/programming/system.mdnew file+10
@@ -0,0 +1,10 @@
1+---
2+sort: 3
3+---
4+
5+# Systems programming in Arvo
6+
7+Short, example-based tutorials of simple Arvo techniques, for people
8+who already know Hoon (or are not afraid to pretend they do).
9+
10+<list/></list>
docs/programming/learning/arvo/basic.md → docs/programming/system/basic.mdrenamed+9−15
@@ -2,11 +2,16 @@
22logo: black
33sort: 1
44next: true
5−title: Basic Hoon
5+title: Hoon refresher / crash course
66---
77
88# Basic Hoon
99
10+(This recapitulates material you've already learned in Core Hoon.
11+It will be a very abrupt tutorial if you don't know Hoon already,
12+but it may just suffice. If you don't find it obvious at first
13+glance, read it over again
14+
1015Our goal is to get you programming interesting and useful things
1116as soon as possible. To get there we have to quickly cover some
1217of the fundamentals of hoon. To do this we'll walk through two
@@ -15,19 +20,17 @@ Euler](https://projecteuler.net/) problem and
1520[fizzbuzz](https://en.wikipedia.org/wiki/Fizz_buzz).
1621
1722To run this code, you'll need an urbit, and you'll need the
18−`%examples` desk from `~wactex-ribmex`. If you haven't installed
23+`%examples` desk from `~zod`. If you haven't installed
1924urbit yet, check out the [installation
2025instructions](http://urbit.org/docs/user/install). Once urbit is
2126intalled, take a look at the [basic
2227operation](http://urbit.org/docs/user/basic) of your urbit.
2328
24−If you haven't pulled the examples desk from `~wactex-ribmex`, do
29+If you haven't pulled the examples desk from `~zod`, do
2530so now:
2631
27− ~fintud-macrep:dojo> |merge %examples ~wactex-ribmex %examples
32+ ~fintud-macrep:dojo> |merge %examples ~zod %examples
2833 >=
29− ; ~wactex-ribmex is your neighbor
30− ; ~wactex-ribmex is your neighbor
3134 [time passes...]
3235 merged with strategy %init
3336
@@ -392,12 +395,6 @@ accessible.
392395 42 (regardless of input). Change the `=<` line to `[(add 5 7)
393396 (^add 5 7)]`. Can you recognize what's happening?
394397
395−- Write a program that prints the numbers from 1 to 100 (entered
396− from the command line), except that for multiples of three
397− print 'Fizz' instead of the number and for the multiples of
398− five print 'Buzz'. For numbers which are multiples of both
399− three and five print 'FizzBuzz'.
400−
401398Cheatsheet:
402399
403400- To pass arguments from the command line to a program, you
@@ -405,9 +402,6 @@ Cheatsheet:
405402 `[^ [[arg=TYPE ~] ~]]` where `TYPE` is replaced with the
406403 type of argument you're expecting. Then `+euler1 a` from
407404 the dojo sets `arg` to `a`.
408−- A list of strings is of type `(list ,@t)`, so the result of
409− the fizzbuzz function is of this type (hint: you'll need to
410− use `^-`)
411405- The empty list is `~`
412406- Lisp-style cons (construct a cell/prepend an element) is
413407 `[new-element list]`
docs/programming/learning/arvo/generators.md → docs/programming/system/generators.mdrenamed

The content is the same.

docs/programming/learning/arvo/http.md → docs/programming/system/http.mdrenamed

The content is the same.

docs/programming/learning/arvo/marks.md → docs/programming/system/marks.mdrenamed

The content is the same.

docs/programming/learning/arvo/network.md → docs/programming/system/network.mdrenamed

The content is the same.

docs/programming/learning/arvo/state.md → docs/programming/system/state.mdrenamed

The content is the same.

docs/programming/learning/arvo/subscriptions.md → docs/programming/system/subscriptions.mdrenamed

The content is the same.

docs/programming/learning/arvo/web-apps.md → docs/programming/system/web-apps.mdrenamed

The content is the same.