on master help sign in
Merge pull request #147 from keatondunsford/push-to-www
d8dcb88Galen Wolfe-Pauly
docs.md+21−22
@@ -7,13 +7,15 @@ sort: 4
7
7
8<div class="lead">
8<div class="lead">
9 <div class="logo inverse"></div>
9 <div class="logo inverse"></div>
10− <h1 class="blue i-b">Urbit docs</h1>
10+ <h1 class="blue i-b">Urbit documentation</h1>
11</div>
11</div>
12
12
13<div class="col-md-12 head">
13<div class="col-md-12 head">
14
14
15<div class="col-md-8">
15<div class="col-md-8">
16
16
17+**Urbit** is a secure peer-to-peer network of personal servers, built on a clean-slate system software stack.
18+
17Check out the [technical overview](about/overview) for a high-level
19Check out the [technical overview](about/overview) for a high-level
18architecture description. To install and run Urbit, head to the Using section, starting with the [installation guide](using/install) and continuing forward.
20architecture description. To install and run Urbit, head to the Using section, starting with the [installation guide](using/install) and continuing forward.
19
21
@@ -29,37 +31,34 @@ etc, should start with the [Nock definition](nock/definition) and work upward fr
29
31
30</div>
32</div>
31
33
34+</div>
35+
36+<div class="col-md-12 head">
37+
32<div class="col-md-4">
38<div class="col-md-4">
33
39
34<b>Community & contact</b>
40<b>Community & contact</b>
35<ul>
41<ul>
36−<li>Find us on<a href="https://urbit.org/stream"><code>talk</code></a>!</li>
42+<li>Chat with us on <a href="https://urbit.org/stream"><code>:talk</code></a></li>
37−<li>Our discussion<a href="http://urbit.org/fora/"><code>fora</code></a>.</li>
43+<li>Our discussion forum <a href="http://urbit.org/fora"><code>fora</code></a></li>
44+<li>On Twitter <a href="https://twitter.com/urbit_">@urbit_</a></li>
38−<li>On Reddit <a href="https://reddit.com/r/urbit">/r/urbit</a>.</li>
45+<li>On Reddit <a href="https://reddit.com/r/urbit">/r/urbit</a></li>
39−<li>On Twitter <a href="https://twitter.com/urbit_">@urbit_</a>.</li>
40−<li>Our developer <a href="https://groups.google.com/forum/#!forum/urbit-dev">mailing list</a>.</li>
41−<li>Or email us at <a href="mailto:urbit@urbit.org">urbit@urbit.org</a>.</li>
46+<li>Or email us at <a href="mailto:urbit@urbit.org">urbit@urbit.org</a></li>
42</ul>
47</ul>
43
48
44−<br />
49+</div>
45−
46−<b>Community docs</b>
47−<ul>
48−<li>The <code>~master-morzod</code><a href="http://micnus-tarwyl-haltem-linhut--dilhul-talbes-wolnyx-lasbud.urbit.org/docs/">docs</a>, and <a href="http://urbit.org/fora/posts/~2016.12.25..06.35.44..a1ec~/"><code>fora</code></a> post.</li>
49−<li><a href="https://github.com/Fang-/Urbit-By-Doing">Urbit by Doing</a>, by <code>~palfun-foslup</code>.</li>
50−</ul>
51
50
52−<br />
51+<div class="col-md-4">
53
52
54<b>Source code on <a href="https://github.com/urbit">GitHub</a></b>
53<b>Source code on <a href="https://github.com/urbit">GitHub</a></b>
55<ul>
54<ul>
56−<li><a href="https://github.com/urbit/urbit"><code>vere</code></a> - Urbit's VM.</li>
55+<li><a href="https://github.com/urbit/urbit"><code>vere</code></a> - Urbit's VM</li>
57−<li><a href="https://github.com/urbit/arvo"><code>arvo</code></a> - Urbit's OS.</li>
56+<li><a href="https://github.com/urbit/arvo"><code>arvo</code></a> - Urbit's OS</li>
58−<li><a href="https://github.com/urbit/tree"><code>tree</code></a> - Urbit's web UI.</li>
57+<li><a href="https://github.com/urbit/tree"><code>tree</code></a> - Urbit's web publishing UI</li>
59−<li><a href="https://github.com/urbit/talk"><code>talk</code></a> - Urbit's web chat.</li>
58+<li><a href="https://github.com/urbit/talk"><code>talk</code></a> - Urbit's web chat</li>
60−<li><a href="https://github.com/urbit/sole"><code>sole</code></a> - Urbit's web console.</li>
59+<li><a href="https://github.com/urbit/sole"><code>sole</code></a> - Urbit's web console</li>
61−<li><a href="https://github.com/urbit/examples"><code>examples</code></a> - Hoon, Arvo and Tree.</li>
60+<li><a href="https://github.com/urbit/examples"><code>examples</code></a> - Hoon, Arvo and Tree</li>
62−<li><a href="https://github.com/urbit/docs"><code>docs</code></a> - Urbit documentation repository.</li>
61+<li><a href="https://github.com/urbit/docs"><code>docs</code></a> - The repo for these docs</li>
63</ul>
62</ul>
64
63
65</div>
64</div>
docs/about.md+1−1
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 1
3+sort: 3
4---
4---
5
5
6# About
6# About
docs/about/objections.md+8−2
@@ -1,3 +1,9 @@
1+---
2+navhome: '/docs'
3+next: True
4+sort: 5
5+title: Common objections to Urbit
6+---
1
7
2# Common objections to Urbit
8# Common objections to Urbit
3
9
@@ -117,7 +123,7 @@ The correct way to think about jets is not to compare them to a perfect interpre
117
123
118Compared to both intrinsics and an FFI, your jets have one key disadvantage: they need to be specified in pure code. You may not have this executable specification, which means you need to write it. Is this really so bad for your development process? An executable specification? Which can be trivially tested against the efficient implementation?
124Compared to both intrinsics and an FFI, your jets have one key disadvantage: they need to be specified in pure code. You may not have this executable specification, which means you need to write it. Is this really so bad for your development process? An executable specification? Which can be trivially tested against the efficient implementation?
119
125
120−Compared to intrinsics, jets give you true separation between mechanism and policy; only the interpreter, not the programmer and not the compiler, needs to know what's accelerated.
126+Compared to intrinsics, jets give you true separation between mechanism and policy; only the interpreter, not the programmer and not the compiler, needs to know what's accelerated.
121
127
122Compared to an FFI, jets preclude I/O, so can be trivially sandboxed. Except that the programmer needs to mark routines which may benefit from optimization with a hint, here too we separate mechanism (efficient implementation) from policy.
128Compared to an FFI, jets preclude I/O, so can be trivially sandboxed. Except that the programmer needs to mark routines which may benefit from optimization with a hint, here too we separate mechanism (efficient implementation) from policy.
123
129
@@ -133,7 +139,7 @@ TLDR: no, it doesn't.
133
139
134We can prune the event log because the Urbit transition function doesn't have any access to the event history -- just the current state and the current event.
140We can prune the event log because the Urbit transition function doesn't have any access to the event history -- just the current state and the current event.
135
141
136−Urbit defines the semantics of a complete event log. It doesn't and can't require an implementation to maintain the whole log. It can maintain a checkpoint and the log since that checkpoint. The current implementation of Urbit maintains
142+Urbit defines the semantics of a complete event log. It doesn't and can't require an implementation to maintain the whole log. It can maintain a checkpoint and the log since that checkpoint. The current implementation of Urbit maintains
137
143
138However, any practical urbit maintains a periodically updated checkpoint. Our present implementation doesn't provide a way to prune the event log, but that's just a missing feature.
144However, any practical urbit maintains a periodically updated checkpoint. Our present implementation doesn't provide a way to prune the event log, but that's just a missing feature.
139
145
docs/arvo/api.md+1−1
@@ -1,7 +1,7 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3next: true
3next: true
4−sort: 12
4+sort: 21
5title: API Connectors
5title: API Connectors
6---
6---
7
7
docs/arvo/basic.md+1−1
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 1
3+sort: 11
4next: true
4next: true
5title: Basic Hoon
5title: Basic Hoon
6---
6---
docs/arvo/generators.md+1−1
@@ -1,7 +1,7 @@
1---
1---
2navhome: '/docs'
2navhome: '/docs'
3next: True
3next: True
4−sort: 8
4+sort: 18
5title: Using Generators with Apps
5title: Using Generators with Apps
6---
6---
7
7
docs/arvo/http.md+2−2
@@ -1,7 +1,7 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3next: false
3next: false
4−sort: 9
4+sort: 19
5title: HTTP Requests and Timers
5title: HTTP Requests and Timers
6---
6---
7
7
@@ -145,7 +145,7 @@ progress, then we send an HTTP request.
145If the argument is neither 'off' nor 'on', then we assume it's an
145If the argument is neither 'off' nor 'on', then we assume it's an
146actual url, so we save it in `target`.
146actual url, so we save it in `target`.
147
147
148−Here's the move that sends the HTTP request:
148+Here's the move that sends the HTTP request:
149```
149```
150[ost.hid %hiss /request ~ %httr %purl (need (epur target))]
150[ost.hid %hiss /request ~ %httr %purl (need (epur target))]
151```
151```
docs/arvo/internals.md+1−1
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 15
3+sort: 22
4---
4---
5
5
6# Arvo internals
6# Arvo internals
docs/arvo/marks.md+1−1
@@ -1,7 +1,7 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3next: true
3next: true
4−sort: 6
4+sort: 16
5title: Marks
5title: Marks
6---
6---
7
7
docs/arvo/network.md+1−2
@@ -1,7 +1,7 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3next: false
3next: false
4−sort: 3
4+sort: 13
5title: Network messages
5title: Network messages
6---
6---
7
7
@@ -341,4 +341,3 @@ urbit as for sending messages between apps on different urbits.
341- Put `even` and `odd` on two separate urbits and pass the messages
341- Put `even` and `odd` on two separate urbits and pass the messages
342 over the network. Post a link to a working solution in :talk to
342 over the network. Post a link to a working solution in :talk to
343 receive a cookie.
343 receive a cookie.
344−
docs/arvo/security-driver.md+2−2
@@ -1,7 +1,7 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3next: false
3next: false
4−sort: 10
4+sort: 20
5title: Security Drivers
5title: Security Drivers
6---
6---
7
7
@@ -130,7 +130,7 @@ five "special" arms:
130- `++filter-request` is a function which takes a hiss (http
130- `++filter-request` is a function which takes a hiss (http
131 request) and produces a `sec-move` (defined in zuse), which is
131 request) and produces a `sec-move` (defined in zuse), which is
132 one of:
132 one of:
133−
133+
134 * `[%send hiss]`, which sends the new hiss. This is the
134 * `[%send hiss]`, which sends the new hiss. This is the
135 case in, for example, basic auth, where all we need to do is
135 case in, for example, basic auth, where all we need to do is
136 add an extra header to the request.
136 add an extra header to the request.
docs/arvo/state.md+2−2
@@ -1,7 +1,7 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3next: true
3next: true
4−sort: 4
4+sort: 14
5title: State
5title: State
6---
6---
7
7
@@ -100,7 +100,7 @@ ever go through the hassle of having to set up and write to a database.
100```
100```
101~fintud-macrep:dojo> :examples-last 7
101~fintud-macrep:dojo> :examples-last 7
102[%last 0]
102[%last 0]
103−>=
103+>=
104~fintud-macrep:dojo> :examples-last [1 2 3]
104~fintud-macrep:dojo> :examples-last [1 2 3]
105[%last 7]
105[%last 7]
106>=
106>=
docs/arvo/subject.md+1−1
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 2
3+sort: 12
4next: true
4next: true
5title: The subject
5title: The subject
6---
6---
docs/arvo/subscriptions.md+2−2
@@ -1,7 +1,7 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3next: true
3next: true
4−sort: 5
4+sort: 15
5title: Subscriptions
5title: Subscriptions
6---
6---
7
7
@@ -106,7 +106,7 @@ Cheat sheet:
106- `$%` ([buccen](../../hoon/twig/buc-mold/cen-book/)) is a type
106- `$%` ([buccen](../../hoon/twig/buc-mold/cen-book/)) is a type
107 constructor: it defines a new type, composed of `n` types that it is
107 constructor: it defines a new type, composed of `n` types that it is
108 passed. For example `$% @ * ^ ==` is the type of either `@`,
108 passed. For example `$% @ * ^ ==` is the type of either `@`,
109− `*`, or a cell `^`.
109+ `*`, or a cell `^`.
110<!-- XX this is a union, right? -->
110<!-- XX this is a union, right? -->
111
111
112- You may have noticed the separate `|%`
112- You may have noticed the separate `|%`
docs/arvo/web-apps.md+3−3
@@ -1,7 +1,7 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3next: true
3next: true
4−sort: 7
4+sort: 17
5title: Web Apps
5title: Web Apps
6---
6---
7
7
@@ -195,8 +195,8 @@ $(function() {
195 ,function(err,res) {
195 ,function(err,res) {
196 if(err)
196 if(err)
197 return $err.text("There was an error. Sorry!")
197 return $err.text("There was an error. Sorry!")
198− if(res.data !== undefined &&
198+ if(res.data !== undefined &&
199− res.data.ok !== undefined &&
199+ res.data.ok !== undefined &&
200 res.data.ok !== true)
200 res.data.ok !== true)
201 $err.text(res.data.res)
201 $err.text(res.data.res)
202 else
202 else
docs/hoon/advanced.md+2−2
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 7
3+sort: 17
4next: true
4next: true
5title: Advanced types
5title: Advanced types
6---
6---
@@ -193,6 +193,6 @@ If a name is in the `q.p` map, it's a bridge. When we search for
193a name, we also compile the bridge, and check if the name
193a name, we also compile the bridge, and check if the name
194resolves against the bridge product. If so, we use it.
194resolves against the bridge product. If so, we use it.
195
195
196−These hacks let us deal with interesting large-scale problems,
196+These hacks let us deal with interesting large-scale problems,
197like complex library dependencies. You definitely don't need to
197like complex library dependencies. You definitely don't need to
198understand them to just write simple Hoon programs.
198understand them to just write simple Hoon programs.
docs/hoon/basic.md+3−3
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 5
3+sort: 15
4next: true
4next: true
5title: Basic types
5title: Basic types
6---
6---
@@ -8,7 +8,7 @@ title: Basic types
8# Basic types
8# Basic types
9
9
10A `span` is a set of nouns and an interpretation of these nouns.
10A `span` is a set of nouns and an interpretation of these nouns.
11−Officially, we don't use the word "type" in Hoon. But if we had
11+Officially, we don't use the word "type" in Hoon. But if we had
12to say "type," it would mean `span`.
12to say "type," it would mean `span`.
13
13
14## Type, span and mold
14## Type, span and mold
@@ -40,7 +40,7 @@ hopefully you aren't!
40
40
41## `span`: a set of nouns
41## `span`: a set of nouns
42
42
43−Below is the mold for `span`. You haven't seen this syntax before,
43+Below is the mold for `span`. You haven't seen this syntax before,
44and we haven't explained it yet; just treat it as pseudocode.
44and we haven't explained it yet; just treat it as pseudocode.
45
45
46This is a slightly simplified version of `span`. We undo and explain the
46This is a slightly simplified version of `span`. We undo and explain the
docs/hoon/concepts.md+6−6
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 3
3+sort: 13
4next: true
4next: true
5title: Concepts
5title: Concepts
6---
6---
@@ -27,7 +27,7 @@ mean `span`, or `mold`, or `mark`, or possibly all three.
27Other common programming concepts used only informally in Hoon
27Other common programming concepts used only informally in Hoon
28are "function," "object," "event," "expression," "variable,"
28are "function," "object," "event," "expression," "variable,"
29"label," "closure", "environment," "scope," and probably a few
29"label," "closure", "environment," "scope," and probably a few
30−more. We do use these words informally, but we're always making
30+more. We do use these words informally, but we're always making
31an analogy whose precision depends on context.
31an analogy whose precision depends on context.
32
32
33Hoon has concepts *like* all these abstractions, but they remain
33Hoon has concepts *like* all these abstractions, but they remain
@@ -51,7 +51,7 @@ simpler (Lisp atoms effectively have dynamic type bits).
51
51
52The simplest noun syntax uses brackets, like `[a b]` for the cell
52The simplest noun syntax uses brackets, like `[a b]` for the cell
53of `a` and `b`. Brackets nest right; `[a b c d]` is `[a [b [c
53of `a` and `b`. Brackets nest right; `[a b c d]` is `[a [b [c
54−d]]]`. You'll also see braces: `{a b c d}`.
54+d]]]`. You'll also see braces: `{a b c d}`.
55
55
56A noun list, by convention, points right and is zero-terminated.
56A noun list, by convention, points right and is zero-terminated.
57Hoon uses tuples (improper nouns) more freely than Lisp; only
57Hoon uses tuples (improper nouns) more freely than Lisp; only
@@ -64,7 +64,7 @@ etc, this refers to the integer `0x6f.6f66`, aka `7.303.014`.
64
64
65One common operation on nouns is `slot`, a tree addressing
65One common operation on nouns is `slot`, a tree addressing
66scheme which maps an atom to a subtree. The whole noun is slot
66scheme which maps an atom to a subtree. The whole noun is slot
67−`1`; the left child of `n` is `2n`, the right child `2n+1`.
67+`1`; the left child of `n` is `2n`, the right child `2n+1`.
68
68
69Nothing in Nock, Hoon or Urbit can create cycles in a noun or
69Nothing in Nock, Hoon or Urbit can create cycles in a noun or
70detect pointer equivalence. Nouns are generally implemented
70detect pointer equivalence. Nouns are generally implemented
@@ -164,7 +164,7 @@ formula. The gate's argument is its *sample*; the result is its
164### `core` (object)
164### `core` (object)
165
165
166A `core` has no exact equivalent in conventional languages, but
166A `core` has no exact equivalent in conventional languages, but
167−the closest equivalent is an object. An object has methods; a
167+the closest equivalent is an object. An object has methods; a
168core has functionally computed attributes (*arms*). An arm that
168core has functionally computed attributes (*arms*). An arm that
169produces a gate is the Hoon equivalent of a conventional method;
169produces a gate is the Hoon equivalent of a conventional method;
170think of it as a computed attribute whose value is a lambda.
170think of it as a computed attribute whose value is a lambda.
@@ -201,7 +201,7 @@ whose value is of type `atom`; it's a subtree of type `foo:atom`.
201
201
202### `limb` (attribute or variable reference)
202### `limb` (attribute or variable reference)
203
203
204−A [`limb`](../twig/limb/limb), like `foo`, is Hoon's equivalent of a variable
204+A [`limb`](../twig/limb/limb), like `foo`, is Hoon's equivalent of a variable
205reference. A limb is a twig; given a subject span, `mint`
205reference. A limb is a twig; given a subject span, `mint`
206resolves it to a Nock formula and a product span.
206resolves it to a Nock formula and a product span.
207
207
docs/hoon/demo.md+2−2
@@ -1,13 +1,13 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 1
3+sort: 10
4next: true
4next: true
5title: Demo
5title: Demo
6---
6---
7
7
8# Demo
8# Demo
9
9
10−Here's everyone's favorite whiteboard example, FizzBuzz. Each
10+Here's everyone's favorite whiteboard example, FizzBuzz. Each
11line is commented with its number:
11line is commented with its number:
12
12
13```
13```
docs/hoon/examples.md+2−2
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 8
3+sort: 18
4title: Examples
4title: Examples
5next: true
5next: true
6---
6---
@@ -253,7 +253,7 @@ moves (`move)`; actions are tic-tac-toe results (`fact`).
253 :loop :cast (list fact) :: 3
253 :loop :cast (list fact) :: 3
254 :ifno feed ~ :: 4
254 :ifno feed ~ :: 4
255```
255```
256−
256+
257Line `1` wraps a conclusion around a stack of cores. The cores
257Line `1` wraps a conclusion around a stack of cores. The cores
258at `11` and `26` are the data structures and functions of the
258at `11` and `26` are the data structures and functions of the
259engine; the conclusion is the interface and top-level logic. It
259engine; the conclusion is the interface and top-level logic. It
docs/hoon/exercises.md+1
@@ -1,6 +1,7 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3sort: 11
3sort: 11
4+title: Exercises
4---
5---
5
6
6# Exercises
7# Exercises
docs/hoon/irregular.mdnew file+279
@@ -0,0 +1,279 @@
1+---
2+navhome: /docs/
3+sort: 21
4+title: Irregular forms
5+comments: true
6+---
7+
8+## Irregular forms, a compilation
9+##### `~palfun-foslup`
10+
11+<br />
12+
13+*Original `fora` post* [*here*](http://urbit.org/fora/posts/~2016.12.29..19.37.08..89d5~/).
14+
15+##### Reading guide
16+Headings contain runes, phonetics and tokens. Description contains a link to the docs and a short description of the rune. Both regular (R) and irregular (I) forms are given.
17+
18+Want to `ctrl-f` to find out the meaning of something weird you saw? Search for `\symbol`. ie `\?` or `\=`. It'll show you to the irregular forms that uses that symbol.
19+
20+## . dot (nock)
21+
22+Anything Nock can do, Hoon can do also.
23+
24+### .+ dotlus :bump
25+
26+[docs](https://urbit.org/docs/hoon/twig/dot-nock/lus-bump/) \\+
27+`{$bump p/atom}`: increment an atom with Nock 4.
28+
29+R: `.+(p)`
30+I: `+(p)`
31+
32+### .= dottis :same
33+
34+[docs](https://urbit.org/docs/hoon/twig/dot-nock/tis-same/) \\=
35+`{$same p/seed q/seed}`: test for equality with Nock 5.
36+
37+R: `.=(p q)`
38+I: `=(p q)`
39+
40+## ; sem (make)
41+
42+Miscellaneous useful macros.
43+
44+### ;: semcol :wad
45+
46+[docs](https://urbit.org/docs/hoon/twig/sem-make/col-wad/) \\:
47+`{$wad p/seed q/(list seed)}`: call a binary function as an n-ary function.
48+
49+R: `;:(p q)`
50+I: `:(p q)`
51+
52+## : col (cells)
53+
54+The cell twigs.
55+
56+### :- colhep :cons
57+
58+[docs](https://urbit.org/docs/hoon/twig/col-cell/hep-cons/) \\[\\]\\^\\+\\\`\\~
59+`{$cons p/seed q/seed}`: construct a cell (2-tuple).
60+
61+R: `:-(p q)`
62+I:
63+
64+```
65+ [a b] ==> :-(a b)
66+[a b c] ==> [a [b c]]
67+ a^b^c ==> [a b c]
68+ a+b ==> [%a b]
69+ `a ==> [~ a]
70+ ~[a b] ==> [a b ~]
71+ [a b]~ ==> [[a b] ~]
72+```
73+
74+## = tis (flow)
75+
76+Flow twigs change the subject. All non-flow twigs (except cores) pass the subject down unchanged.
77+
78+### =< tisgal :rap
79+
80+[docs](https://urbit.org/docs/hoon/twig/tis-flow/gal-rap/) \\:
81+`{$rap p/seed q/seed}`: compose two twigs, inverted.
82+
83+R: `=<(p q)`
84+I: `p:q`
85+
86+## | bar (core)
87+
88+[docs](https://urbit.org/docs/hoon/twig/bar-core/) \\$
89+Core twigs are flow twigs.
90+
91+Technically not irregular syntax, but worth mentioning.
92+
93+* `|= bartis :gate`
94+* `|. bardot :trap`
95+* `|- barhep :loop`
96+* `|* bartar :gill`
97+
98+The above runes produce a core with a single arm, named `$` (or `:moar`). We can recompute this arm with changes, useful for recursion among other things. Commonly used with the irregular syntax for `%=`, `:make`, like so: `$()`.
99+
100+## % cen (call)
101+
102+The invocation family of twigs.
103+
104+### %= centis :make
105+
106+[docs](https://urbit.org/docs/hoon/twig/cen-call/tis-make/) \\(\\)
107+`{$make p/wing q/(list (pair wing seed))}`: take a wing with changes.
108+
109+R: `%=(p a 1)`
110+I: `p(a 1)`
111+
112+### %~ censig :open
113+
114+[docs](https://urbit.org/docs/hoon/twig/cen-call/sig-open/) \\~
115+`{$cnsg p/wing q/seed r/seed}`: call with multi-armed door.
116+
117+R: `%~(p q r)`
118+I: `~(p q r)`
119+
120+### %- cenhep :call
121+
122+[docs](https://urbit.org/~~/docs/hoon/twig/cen-call/hep-call/) \\(\\)
123+`{$call p/seed q/seed}`: call a gate (function).
124+
125+R: `%-(p q)`
126+I: `(p q)`
127+
128+Note: `(p)` becomes `$:p` (`=<($ p)`), which behaves as you would expect (func call w/o args).
129+
130+## $ buc (mold)
131+
132+A mold is a gate (function) that helps us build simple and rigorous data structures.
133+
134+### $: buccol :bank
135+
136+[docs](https://urbit.org/docs/hoon/twig/buc-mold/col-bank/) \\{\\}
137+`{$bank p/(list moss)}`: form a mold which recognizes a tuple.
138+
139+R: `$:(p q)`
140+I: `{p q}`
141+
142+### $= buctis :coat
143+
144+[docs](https://urbit.org/docs/hoon/twig/buc-mold/tis-coat/) \\/
145+`{$coat p/@tas q/moss}`: mold which wraps a face around another mold.
146+
147+R: `$=(p q)`
148+I: `p/q`
149+
150+### $? bucwut :pick
151+
152+[docs](https://urbit.org/docs/hoon/twig/buc-mold/wut-pick/) \\?
153+`{$pick p/(list moss)}`: mold which normalizes a general union.
154+
155+R: `$?(p)`
156+I: `?(p)`
157+
158+### $_ buccab :shoe
159+
160+[docs](https://urbit.org/docs/hoon/twig/buc-mold/cab-shoe/) \\_
161+`{$shoe p/seed}`: mold which normalizes to an example.
162+
163+R: `$_(p)`
164+I: `_p`
165+
166+## ? wut (test)
167+
168+Hoon has the usual branches and logical tests.
169+
170+### ?! wutzap :not
171+
172+[docs](https://urbit.org/docs/hoon/twig/wut-test/zap-not/) \\!
173+`{$not p/seed}`: logical not.
174+
175+R: `?!(p)`
176+I: `!(p)`
177+
178+### ?& wutpam :and
179+
180+[docs](https://urbit.org/docs/hoon/twig/wut-test/pam-and/) \\&
181+`{$and p/(list seed)}`: logical and.
182+
183+R: `?&(p)`
184+I: `&(p)`
185+
186+### ?& wutbar :or
187+
188+[docs](https://urbit.org/docs/hoon/twig/wut-test/bar-or/) \\|
189+`{$or p/(list seed)}`: logical or.
190+
191+R: `?|(p)`
192+I: `|(p)`
193+
194+## ^ ket (cast)
195+
196+Lets us adjust spans without violating type constraints.
197+
198+### ^- kethep :cast
199+
200+[docs](https://urbit.org/docs/hoon/twig/ket-cast/hep-cast/) \\\`
201+`{$cast p/moss q/seed}`: typecast by mold.
202+
203+R: `^-(p q)`
204+I: ```p`q``
205+
206+### ^= kettis :name
207+
208+[docs](https://urbit.org/docs/hoon/twig/ket-cast/tis-name/) \\=
209+`{$name p/toga q/seed}`: name a value.
210+
211+R: `^=(p q)`
212+I: `p=q`
213+
214+## Miscellaneous
215+
216+### Trivial molds
217+
218+\\*\\^\\?
219+
220+* `*` noun.
221+* `^` cell.
222+* `?` loobean.
223+* `$~` null.
224+
225+### Values
226+
227+\\~\\-\\.\\&\\|
228+
229+* `~` null.
230+* `&` loobean true.
231+* `|` loobean false.
232+* `%a` constant `a`, where `a` can be an ((ir)regularly defined) atom or a symbol.
233+
234+See [:sand](https://urbit.org/docs/hoon/twig/atom/sand/) for other irregular definitions of atoms.
235+
236+### List addressing
237+* `&n` nth element of a list.
238+* `|n` tail of list after nth element (i.e. n is the head).
239+
240+### Limbs :limb
241+
242+[docs](https://urbit.org/docs/hoon/twig/limb/limb/) \\+\\.\\^
243+`{$limb p/(each @ud {p/@ud q/@tas})}`: attribute of subject.
244+
245+* `+15` is slot 15
246+* `.` is the whole subject (slot 1)
247+* `^a` is the `a` "of a higher scope", i.e. "resolve variable a, ignoring the first one found".
248+* `^^p` even higher, etc.
249+* 'Lark' syntax for slots / tree addressing:
250+```
251++1
252++2 -
253++3 +
254++4 -<
255++5 ->
256++6 +<
257++7 +>
258++8 -<-
259+...
260+```
261+
262+
263+### Wings :wing
264+
265+[docs](https://urbit.org/~~/docs/hoon/twig/limb/wing/) \\.
266+`{$wing p/(list limb)`; a limb search path.
267+
268+`a.b` finds limb `a` within limb `b` ("var" `a` within "var" `b`).
269+
270+### Printing stuff
271+
272+* `<a b c>` prints a [tape](https://urbit.org/docs/hoon/library/2q/#-tape).
273+* `>a b c<` prints a [tank](https://urbit.org/docs/hoon/library/2q/#-tank).
274+
275+## Commentary
276+
277+ In our in-house examples throughout our documentation, we use irregular forms instead of regular for the sake of verbosity. But remember with irregular forms: everything is just runes! Like magic. In general, irregular forms (usually) read better, but of course regular forms provide more information about what you're doing by showing you the full rune. Of course, it's up to you, the Hoon programmer, as to whether or not you want to use these.
278+
279+ ##### If we missed any, or if you saw something weird that's not in here, feel free to comment below!
docs/hoon/library.md+1−1
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 10
3+sort: 20
4title: Standard library
4title: Standard library
5---
5---
6
6
docs/hoon/mission.md+1−1
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 2
3+sort: 12
4next: true
4next: true
5title: Mission
5title: Mission
6---
6---
docs/hoon/reference.md+1−1
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 9
3+sort: 19
4title: Twig reference
4title: Twig reference
5---
5---
6
6
docs/hoon/syntax.md+3−3
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 4
3+sort: 14
4next: true
4next: true
5title: Syntax
5title: Syntax
6---
6---
@@ -187,7 +187,7 @@ is self-terminating. Otherwise the twig is terminated by a
187The *running* body is a list of twigs. The *jogging* body is a
187The *running* body is a list of twigs. The *jogging* body is a
188list of twig pairs, separated by a `gap`. The *battery* body is
188list of twig pairs, separated by a `gap`. The *battery* body is
189a list of symbol-twig pairs, separated by a gap, prefixed by `++`
189a list of symbol-twig pairs, separated by a gap, prefixed by `++`
190−and then a gap.
190+and then a gap.
191
191
192This definition is enough to parse. But the proper shape of the
192This definition is enough to parse. But the proper shape of the
193whitespace gaps demands an informal convention.
193whitespace gaps demands an informal convention.
@@ -342,7 +342,7 @@ In the *lapidary* naming style, labels are pronounceable
342three-letter strings, usually CVC (consonant-vowel-consonant).
342three-letter strings, usually CVC (consonant-vowel-consonant).
343Sometimes they encode a mnemonic, but usually they are just
343Sometimes they encode a mnemonic, but usually they are just
344memorable. Labels are reused wherever the analogy seems
344memorable. Labels are reused wherever the analogy seems
345−appropriate.
345+appropriate.
346
346
347In the *ultralapidary* naming style, labels are single letters,
347In the *ultralapidary* naming style, labels are single letters,
348starting in order of construction from `a`, or within a tuple
348starting in order of construction from `a`, or within a tuple
docs/hoon/twig.md+2−2
@@ -1,6 +1,6 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 6
3+sort: 16
4next: true
4next: true
5title: Expressions
5title: Expressions
6---
6---
@@ -60,7 +60,7 @@ have a span that describes it.)
60And of course, Hoon is a functional language, so seeds sometimes
60And of course, Hoon is a functional language, so seeds sometimes
61produce a mold -- because we do pass around functions as values.
61produce a mold -- because we do pass around functions as values.
62Don't worry about this issue. It will totally make sense soon.
62Don't worry about this issue. It will totally make sense soon.
63−
63+
64But writing `[%foo %bar]` where you mean `{$foo $bar}`, or the
64But writing `[%foo %bar]` where you mean `{$foo $bar}`, or the
65reverse, is a common beginner's mistake in Hoon. At least it
65reverse, is a common beginner's mistake in Hoon. At least it
66always results in a compiler error (since the noun types are so
66always results in a compiler error (since the noun types are so
docs/learn.mdnew file+24
@@ -0,0 +1,24 @@
1+---
2+navhome: /docs/
3+sort: 2
4+---
5+
6+# Learn
7+
8+Learn Hoon from the ground up through our in-house Urbyte series, or delve into the great doc efforts by some of our community members.
9+
10+#### Urbytes
11+
12+<list dataPath="/docs/learn/urbyte/" />
13+
14+#### Community docs
15+
16+* `~master-morzod` -
17+[docs](http://micnus-tarwyl-haltem-linhut--dilhul-talbes-wolnyx-lasbud.urbit.org/docs/), [`fora` post](https://urbit.org/fora/posts/~2016.12.25..06.35.44..a1ec~/)
18+
19+* `~hidduc-posmeg` -
20+[docs](https://fosnut-dandut.urbit.org/pages/hidducs-notes/tutorial), [`fora` post](https://urbit.org/fora/posts/~2017.2.12..21.54.40..6fde~/)
21+
22+* `~palfun-foslup` - [Urbit by Doing](https://github.com/Fang-/Urbit-By-Doing)
23+
24+* `@knubie` - [Learning Hoon](https://github.com/knubie/learning-hoon)
docs/learn/community.mdnew file+20
@@ -0,0 +1,20 @@
1+---
2+navhome: /docs/
3+next: true
4+title: Community docs
5+sort: 2
6+---
7+
8+# Community docs
9+
10+* The `~master-morzod`
11+[docs](http://micnus-tarwyl-haltem-linhut--dilhul-talbes-wolnyx-lasbud.urbit.org/docs/),
12+and [`fora`](https://urbit.org/fora/posts/~2016.12.25..06.35.44..a1ec~/) post.
13+
14+* The (formerly) `~hidduc-posmeg`
15+[docs](https://fosnut-dandut.urbit.org/pages/hidducs-notes/tutorial),
16+and [`fora`](https://urbit.org/fora/posts/~2017.2.12..21.54.40..6fde~/) post.
17+
18+* [Urbit by Doing](https://github.com/Fang-/Urbit-By-Doing), by `~palfun-foslup`.
19+
20+* [Learning Hoon](https://github.com/knubie/learning-hoon), by `knubie`.
docs/byte.md → docs/learn/urbyte.mdrenamed+3−1
@@ -1,6 +1,8 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3+next: true
4+title: Urbytes
3−sort: 3
5+sort: 1
4---
6---
5
7
6# Urbytes
8# Urbytes
docs/byte/0.md → docs/learn/urbyte/0.mdrenamed+2−2
@@ -5,7 +5,7 @@ next: true
5title: Setup and nouns
5title: Setup and nouns
6---
6---
7
7
8−# Urbyte 0: setup and nouns
8+# Urbyte 0: Setup and nouns
9
9
10This is the first post in our new Urbyte series.
10This is the first post in our new Urbyte series.
11
11
@@ -109,7 +109,7 @@ $ ls -a /path/to/mycomet
109./ ../ .urb/
109./ ../ .urb/
110```
110```
111
111
112−Restarting uses almost the same command, but without `-c` (which
112+Restarting uses almost the same command, but without `-c` (which
113means "create"). There are also fewer startup messages:
113means "create"). There are also fewer startup messages:
114
114
115```
115```
docs/byte/1.md → docs/learn/urbyte/1.mdrenamed+3−3
@@ -5,7 +5,7 @@ next: true
5title: Atoms, auras, types
5title: Atoms, auras, types
6---
6---
7
7
8−# Urbyte 1: atoms, auras, types
8+# Urbyte 1: Atoms, auras, types
9
9
10Thanks for reading Urbyte 0! In Urbyte 1, we'll look a little
10Thanks for reading Urbyte 0! In Urbyte 1, we'll look a little
11more deeply at atoms and other simple noun types.
11more deeply at atoms and other simple noun types.
@@ -41,7 +41,7 @@ string starting with `@`, like `@ud` for unsigned decimal.
41Hoon has a wide (but not extensible) variety of atom syntaxes.
41Hoon has a wide (but not extensible) variety of atom syntaxes.
42Each syntax for an atom produces an appropriate predefined aura.
42Each syntax for an atom produces an appropriate predefined aura.
43And Hoon's printer can invertibly print any aura Hoon can parse.
43And Hoon's printer can invertibly print any aura Hoon can parse.
44−Because atoms make great path nodes and paths make great URLs,
44+Because atoms make great path nodes and paths make great URLs,
45all regular atom syntaxes use only URL-safe characters.
45all regular atom syntaxes use only URL-safe characters.
46
46
47## Examples
47## Examples
@@ -211,7 +211,7 @@ strings, which nothing in Hoon recognizes. The set of syntaxes
211that Hoon knows how to parse and/or print is fixed. But there
211that Hoon knows how to parse and/or print is fixed. But there
212are plenty of good reasons to use your own user-defined auras.
212are plenty of good reasons to use your own user-defined auras.
213
213
214−If your program uses both fortnights and furlongs, Hoon will not
214+If your program uses both fortnights and furlongs, Hoon will not
215parse a user-defined fortnight syntax. It will not print furlongs
215parse a user-defined fortnight syntax. It will not print furlongs
216in the dojo. But the type system will keep you from accidentally
216in the dojo. But the type system will keep you from accidentally
217passing a furlong to a function that expects a fortnight.
217passing a furlong to a function that expects a fortnight.
docs/byte/2.md → docs/learn/urbyte/2.mdrenamed+1−1
@@ -4,7 +4,7 @@ sort: 3
4title: Subject-oriented programming
4title: Subject-oriented programming
5---
5---
6
6
7−# Urbyte 2: subject-oriented programming
7+# Urbyte 2: Subject-oriented programming
8
8
9Thanks for reading Urbytes 0 and 1! In Urbyte 2, we'll take
9Thanks for reading Urbytes 0 and 1! In Urbyte 2, we'll take
10nouns for granted and have some real fun with them.
10nouns for granted and have some real fun with them.
docs/using.md+3−3
@@ -1,10 +1,10 @@
1---
1---
2navhome: /docs/
2navhome: /docs/
3−sort: 2
3+sort: 1
4---
4---
5
5
6−# Using
6+# Get Started
7
7
8−These short guides will get you installed, setup, and walk you through the basic features of Urbit.
8+These short guides will get you installed, setup, and will walk you through the basic features of Urbit.
9
9
10<list/>
10<list/>