on master help sign in
Merge pull request #478 from urbit/zola-port
b9bf333Morgan Sutherland
READMEnew file+3
@@ -0,0 +1,3 @@
1+# Urbit Docs
2+
3+Urbit documentation as it appears on [urbit.org](https://urbit.org/docs/).
_index.mdnew file+7
@@ -0,0 +1,7 @@
1++++
2+title = "Docs"
3+template = "sections/docs.html"
4++++
5+Welcome to the documentation for the Urbit project, including the Azimuth identity layer, the Arvo operating system, and the Hoon programming language. This documentation is maintained by [Tlon](https://tlon.io) in a public [Github repository](https://github.com/urbit/docs). Issues and contributions are welcome.
6+
7+Please make your way to the [Introduction](/docs/getting-started/) for an overview of the docs.
concepts.udondeleted−43
@@ -1,43 +0,0 @@
1−:- :~ navhome/'/docs/'
2− navuptwo/'true'
3− next/'true'
4− sort/'3'
5− title/'Concepts'
6− ==
7−;>
8−
9−# Concepts
10−
11−The documents in this section are high-level introductions to the Urbit project and components thereof.
12−
13−## [Azimuth](/docs/concepts/azimuth)
14−
15−A quick explanation of Azimuth, the Urbit identity layer. This document also explains how Azimuth and Arvo are different, while being the two parallel systems that compose Urbit.
16−
17−### [Why Urbit Uses a Blockchain](/docs/concepts/azimuth/blockchain)
18−
19−Azimuth is built on the Ethereum blockchain. This document explains why.
20−
21−### [The Urbit HD Wallet](/docs/concepts/azimuth/blockchain)
22−
23−A detailed discussion of the unique wallet system used to own and manage Azimuth identities.
24−
25−## [Technical Overview](/docs/concepts/technical-overview)
26−
27−A more in-depth description of the entire Urbit stack.
28−
29−## [Contributing](/docs/concepts/contributing)
30−
31−A guide to getting involved with the Urbit project.
32−
33−## [Community Tutorials](/docs/concepts/community-tutorials)
34−
35−A collection of unofficial but useful Urbit learning resources.
36−
37−## [Source Code](/docs/concepts/source-code-overview)
38−
39−An explanation of Urbit's constituent GitHub repos.
40−
41−## [Galaxies, Stars, and Planets](/docs/concepts/galaxies-stars-and-planets)
42−
43−An explanation of the Urbit address-space hierarchy.
concepts/_index.mdnew file+7
@@ -0,0 +1,7 @@
1++++
2+title = "Concepts"
3+weight = 3
4+sort_by = "weight"
5+template = "sections/docs/chapters.html"
6++++
7+The documents in this section are high-level introductions to the Urbit project and components thereof.
concepts/arvo-vs-azimuth.mdnew file+15
@@ -0,0 +1,15 @@
1++++
2+title = "Arvo vs. Azimuth"
3+weight = 4
4+template = "doc.html"
5+description = "A quick explanation of the two parallel systems that compose Urbit."
6++++
7+Urbit is a project, not a single computer system. It has three components: Arvo, the operating system; Azimuth, the identity system; and Aegean, the pattern for creating software experiences for individual Urbit communities. This document compares the first two.
8+
9+[*Arvo*](https://github.com/urbit/arvo) is an operating system that provides the software for a personal server. These personal servers together constitute the peer-to-peer Arvo network. To make this network work on the social level, Arvo is built to work with a system of scarce and immutable identities.
10+
11+[*Azimuth*](https://github.com/urbit/azimuth) is the public-key infrastructure built to be such a system. A suite of smart-contracts on the Ethereum blockchain, Azimuth determines which Ethereum addresses own which Azimuth identities, called _points_. All point-related operations, such as transfers, are governed at this layer. But Azimuth isn't built strictly for Arvo -- it could be used as a generalized identity system for other projects.
12+
13+These otherwise-parallel systems meet when you want to connect to the Arvo network. Your Arvo personal server, called your _ship_, needs to be able to prove cryptographically that it is who it says it is. This proof comes in the form of a keyfile, derived from your point, that you use to start your ship.
14+
15+A metaphor might help illustrate the relationship between these two systems: the Arvo network is the neighborhood that you live in; Azimuth is the bank vault that stores the deed to your house.
concepts/azimuth.udon → concepts/azimuth/_index.mdrenamed+6−21
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'false'
3− sort/'9'
4− title/'Azimuth'
2+title = "Azimuth"
5− ==
3+weight = 6
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Azimuth
6++++
9−
10Azimuth is a general-purpose public-key infrastructure (PKI) on the Ethereum blockchain, used as a platform for Urbit identities that we call _points_. You need a point to use the Arvo network.
7Azimuth is a general-purpose public-key infrastructure (PKI) on the Ethereum blockchain, used as a platform for Urbit identities that we call _points_. You need a point to use the Arvo network.
11
8
12The primary way to interact with Azimuth is through our [Bridge](https://github.com/urbit/bridge) application and the node libraries that it depends on, azimuth-js and keygen-js. Take a look at the source and play around or see [Getting Started](/docs/getting-started).
9The primary way to interact with Azimuth is through our [Bridge](https://github.com/urbit/bridge) application and the node libraries that it depends on, azimuth-js and keygen-js. Take a look at the source and play around or see [Getting Started](/docs/getting-started).
@@ -22,15 +19,3 @@ Urbit is a project, not a single computer system. It has three components: Arvo,
22These otherwise-parallel systems meet when you want to connect to the Arvo network. Your Arvo personal server, called your _ship_, needs to be able to prove cryptographically that it is who it says it is. This proof comes in the form of a keyfile, derived from your point, that you use to start your ship.
19These otherwise-parallel systems meet when you want to connect to the Arvo network. Your Arvo personal server, called your _ship_, needs to be able to prove cryptographically that it is who it says it is. This proof comes in the form of a keyfile, derived from your point, that you use to start your ship.
23
20
24A metaphor might help illustrate the relationship between these two systems: the Arvo network is the neighborhood that you live in; Azimuth is the bank vault that stores the deed to your house.
21A metaphor might help illustrate the relationship between these two systems: the Arvo network is the neighborhood that you live in; Azimuth is the bank vault that stores the deed to your house.
25−
26−## Further Reading
27−
28−If you want to know more about Azimuth, check out the pages below.
29−
30−### [Why Urbit Uses a Blockchain](/docs/concepts/azimuth/blockchain)
31−
32−An explanation for why Ethereum makes sense for Azimuth.
33−
34−### [The Urbit HD Wallet](/docs/concepts/azimuth/wallet)
35−
36−A detailed discussion of the unique wallet system used to own and manage Azimuth identities.
concepts/azimuth/blockchain.udon → concepts/azimuth/blockchain.mdrenamed+8−10
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Why Urbit Uses a Blockchain'
2+title = "Why Urbit Uses a Blockchain"
2− sort/'1'
3+weight = 1
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Why Urbit Uses a Blockchain
7−
8The Arvo network is composed of personal servers: instances of the Arvo operating system, called ships,
6The Arvo network is composed of personal servers: instances of the Arvo operating system, called ships,
9that communicate as peers.
7that communicate as peers.
10
8
@@ -41,9 +39,9 @@ their property.
41
39
42Moving the Urbit land registry to Ethereum is an easy and obvious solution to
40Moving the Urbit land registry to Ethereum is an easy and obvious solution to
43this problem. We chose Ethereum over Bitcoin because the former is built for
41this problem. We chose Ethereum over Bitcoin because the former is built for
44−computation while the latter is not. We need a computational blockchain to
42+computation Landscape the latter is not. We need a computational blockchain to
45enforce the specific rules of the Urbit identity registry.
43enforce the specific rules of the Urbit identity registry.
46
44
47For more background on the decision to use the Ethereum blockchain, check out
45For more background on the decision to use the Ethereum blockchain, check out
48−[these](urbit.org/posts/essays/urbit-and-the-blockchain)
46+[these](https://urbit.org/posts/essays/urbit-and-the-blockchain/)
49−[two](urbit.org/posts/essays/bootstrapping-urbit-from-ethereum/) posts.
47+[two](https://urbit.org/posts/essays/bootstrapping-urbit-from-ethereum/) posts.
concepts/azimuth/wallet.udon → concepts/azimuth/wallet.mdrenamed+18−35
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'The Urbit HD Wallet'
2+title = "The Urbit HD Wallet"
2− sort/'2'
3+weight = 2
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# The Urbit HD Wallet
7−
8Owners of Azimuth _points_ need safeguards that allow for the use of Urbit
6Owners of Azimuth _points_ need safeguards that allow for the use of Urbit
9without jeopardizing cryptographic ownership of their assets. Toward this end,
7without jeopardizing cryptographic ownership of their assets. Toward this end,
10we created the *Urbit Hierarchical Deterministic (HD) Wallet* for the storage of
8we created the *Urbit Hierarchical Deterministic (HD) Wallet* for the storage of
@@ -21,7 +19,7 @@ are also derived from the wallet.
21Urbit HD wallets are composed of the following items, which are each assigned to
19Urbit HD wallets are composed of the following items, which are each assigned to
22their own individual Ethereum key-pairs.
20their own individual Ethereum key-pairs.
23
21
24−## Master Ticket
22+#### Master Ticket
25
23
26Think of your master ticket like a very high-value password. The master ticket
24Think of your master ticket like a very high-value password. The master ticket
27is the secret code from which all of your other keys are derived. Technically,
25is the secret code from which all of your other keys are derived. Technically,
@@ -29,49 +27,34 @@ your master ticket is seed entropy. You should never share it with anyone, and
29store it very securely. This ticket can derive all of your other keys: your
27store it very securely. This ticket can derive all of your other keys: your
30ownership key and all of the related proxies.
28ownership key and all of the related proxies.
31
29
32−## Ownership Address
30+#### Ownership Address
33
31
34An ownership address has all rights over the assets deeded to it. These rights
32An ownership address has all rights over the assets deeded to it. These rights
35are on-chain actions described and implemented in the Ecliptic, Azimuth's suite
33are on-chain actions described and implemented in the Ecliptic, Azimuth's suite
36of governing smart-contracts.
34of governing smart-contracts.
37
35
38−## Proxies
36+#### Proxies
39
37
40Proxy addresses allow you to execute non-ownership related actions like spawning
38Proxy addresses allow you to execute non-ownership related actions like spawning
41child points, voting, and setting networking keys without jeopardizing the keys
39child points, voting, and setting networking keys without jeopardizing the keys
42you've designated with ownership rights. Setting proxy rights is optional, but
40you've designated with ownership rights. Setting proxy rights is optional, but
43it is recommended for on-chain actions you will execute more frequently.
41it is recommended for on-chain actions you will execute more frequently.
44
42
45−### Management Proxy
43+- *Management Proxy*
46−
47−Can set Arvo networking keys and conduct sponsorship-related operations.
48−
49−#### Networking Keys
50−
51−Networking keys -- encryption and authentication key-pairs -- are used
52−for communicating on the Arvo network. They are contained in the keyfile
53−that you use to boot a ship.
54−
55−Unlike proxies, networking keys are not Ethereum wallets. They are just a public
56−key that is the point's state on the blockchain, combined with a private key
57−that is stored somewhere on your machine.
58−
59−The HD Wallet structure makes networking keys easy to change if the need arises.
60−If you want or need to rotate your keys, you only need to access your management proxy
61−to reset them. After you've done that, download a new keyfile and add it to your
62−ship.
63
44
64−### Voting Proxy
45+ Can configure or set Arvo networking keys and conduct sponsorship related
46+ operations.
65
47
66−Galaxies only. Galaxies are the part of the galactic senate, and this means
48+- *Voting Proxy*
67−they can cast votes on new proposals including changes to the Ecliptic.
68
49
69−### Spawn Proxy
50+ Galaxies only. Galaxies are the part of the galactic senate, and this means
51+ they can cast votes on new proposals including changes to the Ecliptic.
70
52
71−For stars and galaxies only. Can create new child points.
53+- *Spawn Proxy*
72
54
55+ For stars and galaxies only. Can create new child points.
73
56
74−;img@"https://media.urbit.org/fora/proposals/UP-8.jpg";
57+![](https://media.urbit.org/fora/proposals/UP-8.jpg)
75
58
76
59
77Most Ethereum tokens use the ERC-20 standard for smart contracts. Azimuth points
60Most Ethereum tokens use the ERC-20 standard for smart contracts. Azimuth points
@@ -88,5 +71,5 @@ Points, and all of their blockchain operations, are governed by the Ecliptic.
88The Ecliptic is an Ethereum smart-contract that governs point state and the
71The Ecliptic is an Ethereum smart-contract that governs point state and the
89ownership, spawn, management, and voting rights affiliated with your points.
72ownership, spawn, management, and voting rights affiliated with your points.
90
73
91−For the technical implementation details of Azimuth, take a look at the
74+For the technical implementation details Azimuth, take a look at the
92[Github repo](https://github.com/urbit/azimuth).
75[Github repo](https://github.com/urbit/azimuth).
concepts/community-tutorials.udon → concepts/community-tutorials.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'false'
3− sort/'9'
4− title/'Community Tutorials'
2+title = "Community Tutorials"
5− ==
3+weight = 9
6−;>
4+template = "doc.html"
7−
5+description = "A collection of unofficial but useful Urbit learning resources."
8−# Community Docs
6++++
9−
10Here are some tutorials written by members of the Urbit community. Some are a little outdated, but they may still prove useful.
7Here are some tutorials written by members of the Urbit community. Some are a little outdated, but they may still prove useful.
11
8
12- [Generators](https://github.com/joemfb/mardev/tree/master/docs/gen) by `~master-morzod`
9- [Generators](https://github.com/joemfb/mardev/tree/master/docs/gen) by `~master-morzod`
concepts/contributing.udon → concepts/contributing.mdrenamed+7−10
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Contributing"
3− sort/'3'
3+weight = 3
4− title/'Contributing'
4+template = "doc.html"
5− ==
5+description = "A guide to getting involved with the Urbit project."
6−;>
6++++
7−
8−# Contributing
9−
10We accept submissions for improving our [code](https://github.com/urbit/urbit/) and [documentation](https://github.com/urbit/docs/) alike.
7We accept submissions for improving our [code](https://github.com/urbit/urbit/) and [documentation](https://github.com/urbit/docs/) alike.
11
8
12If you're interested in contributing, but don't know where to start, feel free to [send us an email](mailto:support@urbit.org).
9If you're interested in contributing, but don't know where to start, feel free to [send us an email](mailto:support@urbit.org).
@@ -15,7 +12,7 @@ If you're interested in contributing, but don't know where to start, feel free t
15
12
16Our official guide to contributing can be found [here](https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md), which is most useful for large and low-level changes.
13Our official guide to contributing can be found [here](https://github.com/urbit/urbit/blob/master/CONTRIBUTING.md), which is most useful for large and low-level changes.
17
14
18−Before contributing code, you should familiarize yourself with the [Hoon style guide](/docs/learn/hoon/style). For a good example of preferred Hoon coding style, see [ford.hoon](https://github.com/urbit/arvo/blob/master/sys/vane/ford.hoon).
15+Before contributing code, you should familiarize yourself with the [Hoon style guide](/docs/learn/arvo/style). For a good example of preferred Hoon coding style, see [ford.hoon](https://github.com/urbit/arvo/blob/master/sys/vane/ford.hoon).
19
16
20## Community Guidelines
17## Community Guidelines
21
18
concepts/galaxies-stars-and-planets.udon → concepts/galaxies-stars-and-planets.mdrenamed+7−7
@@ -1,9 +1,9 @@
1++++
1−:- :~ title/'Galaxies, Stars, and Planets'
2+title = "Galaxies, Stars, and Planets"
2− ==
3+weight = 7
3−;>
4+template = "doc.html"
4−
5+description = "An explanation of the Urbit address-space hierarchy. "
5−# Galaxies, Stars, and Planets
6++++
6−
7The current internet has no consistent system of identity. There are only quasi-identities such as IP addresses, Google accounts and email addresses, each able to be assumed and abandoned without much trouble. The result is a hostile social experience, since bad actors -- spammers, scammers, malware-spreaders, and harassers -- have an inexhaustible supply of places to hide.
7The current internet has no consistent system of identity. There are only quasi-identities such as IP addresses, Google accounts and email addresses, each able to be assumed and abandoned without much trouble. The result is a hostile social experience, since bad actors -- spammers, scammers, malware-spreaders, and harassers -- have an inexhaustible supply of places to hide.
8
8
9That's why we built a system for persistent identity called [Azimuth](../arvo-vs-azimuth). Azimuth identities are called _points_, and you need one to use the Arvo network. Points are secure, since they are owned and controlled with key-pair the Ethereum blockchain, which Azimuth is built on top of.
9That's why we built a system for persistent identity called [Azimuth](../arvo-vs-azimuth). Azimuth identities are called _points_, and you need one to use the Arvo network. Points are secure, since they are owned and controlled with key-pair the Ethereum blockchain, which Azimuth is built on top of.
@@ -26,7 +26,7 @@ Planets are intended for everyday use by an adult human, and there is a maximum
26
26
27## Moons and Comets
27## Moons and Comets
28
28
29−In addition to these three classes of Azimuth points, there two other kinds of Urbit identities, but they do _not_ use Azimuth.
29+In addition to these three classes of Azimuth points, there two other kinds of Urbit identities, but they do _not_ use Azimuth.
30
30
31*Moons* are 64 bits, are issued by planets, and have names like `~doznec-salfun-naptul-habrys`. Moons are meant for connected devices: phones, smart TVs, digital thermostats. Moons are not independent, but are subordinated to their parent planet.
31*Moons* are 64 bits, are issued by planets, and have names like `~doznec-salfun-naptul-habrys`. Moons are meant for connected devices: phones, smart TVs, digital thermostats. Moons are not independent, but are subordinated to their parent planet.
32
32
concepts/source-code-overview.udon → concepts/source-code-overview.mdrenamed+6−10
@@ -1,13 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'2'
5− title/'Source Code Overview'
2+title = "Source Code Overview"
6− ==
3+weight = 2
7−;>
4+template = "doc.html"
8−
5+description = "An explanation of Urbit's constituent GitHub repos."
9−# Source Code Overview
6++++
10−
11We host all our source code on GitHub at [github.com/urbit](https://github.com/urbit).
7We host all our source code on GitHub at [github.com/urbit](https://github.com/urbit).
12
8
13Since there's quite a number of repos, we'll talk about a few of the most
9Since there's quite a number of repos, we'll talk about a few of the most
concepts/technical-overview.udon → concepts/technical-overview.mdrenamed+7−11
@@ -1,13 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Technical overview"
3− next/'true'
3+weight = 1
4− sort/'1'
4+template = "doc.html"
5− title/'Technical overview'
5+description = "A more in-depth description of the entire Urbit stack."
6− ==
6++++
7−;>
8−
9−# Technical overview
10−
11Urbit is a clean-slate software stack designed to implement an encrypted P2P
7Urbit is a clean-slate software stack designed to implement an encrypted P2P
12network of general-purpose personal servers. Each server on this network is a
8network of general-purpose personal servers. Each server on this network is a
13deterministic computer called an 'urbit' that runs on a Unix-based virtual
9deterministic computer called an 'urbit' that runs on a Unix-based virtual
@@ -114,7 +110,7 @@ about 3000 lines of Hoon.
114### Nock
110### Nock
115
111
116Nock is a low-level [homoiconic](https://en.wikipedia.org/wiki/Homoiconicity)
112Nock is a low-level [homoiconic](https://en.wikipedia.org/wiki/Homoiconicity)
117−combinator language. It's so simple that its [specification](/docs/learn/nock/definition)
113+combinator language. It's so simple that its [specification](../../nock/definition)
118fits on a t-shirt. In some ways Nock resembles a nano-Lisp but its ambitions
114fits on a t-shirt. In some ways Nock resembles a nano-Lisp but its ambitions
119are more narrow. Most Lisps are one-layer: a practical language is to be
115are more narrow. Most Lisps are one-layer: a practical language is to be
120created by extending a theoretically simple interpreter. The abstraction is
116created by extending a theoretically simple interpreter. The abstraction is
getting-started.udon → getting-started/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'1'
4− title/'Getting Started'
2+title = "Getting Started"
5− ==
3+weight = 1
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Getting Started
6++++
9−
10Pages in this section are guides to getting you started with Urbit.
7Pages in this section are guides to getting you started with Urbit.
11
8
12But first, the absolute basics. Arvo is the name of the Urbit operating system and the name of network. Azimuth is the name of the Urbit identity layer. Urbit is the project as the whole.
9But first, the absolute basics. Arvo is the name of the Urbit operating system and the name of network. Azimuth is the name of the Urbit identity layer. Urbit is the project as the whole.
getting-started/booting-a-ship.udon → getting-started/booting-a-ship.mdrenamed+6−8
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Booting a Ship'
2+title = "Booting a Ship"
2− sort/'3'
3+weight = 3
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Booting a Ship
7−
8Now the rubber meets the road. You'll be booting your ship with the keyfile that you [downloaded from Bridge](../azimuth.udon).
6Now the rubber meets the road. You'll be booting your ship with the keyfile that you [downloaded from Bridge](../azimuth.udon).
9
7
10Note that this document is only for booting a ship that uses the live Arvo network. If you just want to create an unnetworked ship for development purposes, read [this guide](../creating-a-development-ship) instead.
8Note that this document is only for booting a ship that uses the live Arvo network. If you just want to create an unnetworked ship for development purposes, read [this guide](../creating-a-development-ship) instead.
@@ -13,7 +11,7 @@ Note that this document is only for booting a ship that uses the live Arvo netwo
13
11
14This will look something like `~lodleb-ritrul`. You can see the name of your point(s) when you log into your wallet using the Bridge client.
12This will look something like `~lodleb-ritrul`. You can see the name of your point(s) when you log into your wallet using the Bridge client.
15
13
16−;img@"http://media.urbit.org/site/bridge-0.png"(width "100%");
14+![](http://media.urbit.org/site/bridge-0.png)
17
15
18## Step 2: Find the path to your keyfile
16## Step 2: Find the path to your keyfile
19
17
getting-started/creating-a-development-ship.udon → getting-started/creating-a-development-ship.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Creating a Development Ship'
2+title = "Creating a Development Ship"
2− sort/'4'
3+weight = 4
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Creating a Development Ship
7−
8To do work with Hoon and with the system, we recommended using a "fake" ship -- one not connected to the network.
6To do work with Hoon and with the system, we recommended using a "fake" ship -- one not connected to the network.
9
7
10Because such a ship has no presence on the network, you don't need an Azimuth identity for its purposes. You just need to have [installed our software](../installing-urbit).
8Because such a ship has no presence on the network, you don't need an Azimuth identity for its purposes. You just need to have [installed our software](../installing-urbit).
getting-started/installing-urbit.udon → getting-started/installing-urbit.mdrenamed+6−12
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Installing Urbit'
2+title = "Installing Urbit"
2− sort/'2'
3+weight = 2
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Installing Urbit
7−
8Arvo runs nicely on a Unix-like operating system -- Ubuntu, Fedora, macOS, and FreeBSD, for example. If you're using Windows, you'll need to get one of the aforementioned systems. Don't worry: most of them are free. Let's get it onto your machine.
6Arvo runs nicely on a Unix-like operating system -- Ubuntu, Fedora, macOS, and FreeBSD, for example. If you're using Windows, you'll need to get one of the aforementioned systems. Don't worry: most of them are free. Let's get it onto your machine.
9
7
10But first, some terminology:
8But first, some terminology:
@@ -199,11 +197,7 @@ One you've completed your installation, you can continue on to the instructions
199Or, if you want to try testing and writing code, check out the guide to [getting an unnetworked development ship](../creating-a-development-ship).
197Or, if you want to try testing and writing code, check out the guide to [getting an unnetworked development ship](../creating-a-development-ship).
200
198
201
199
202−;=
203− ;h2
204− ;div(id "swap"): Set Up Swap
200+## Set Up Swap
205− ==
206−==
207
201
208If you're running Urbit in the cloud on a small instance, you may need to additionally configure swap space. If you're not, you can safely ignore this section.
202If you're running Urbit in the cloud on a small instance, you may need to additionally configure swap space. If you're not, you can safely ignore this section.
209
203
getting-started/operating-a-star.udon → getting-started/operating-a-star.mdrenamed+10−12
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Operating a Star'
2+title = "Operating a Star"
2− sort/'5'
3+weight = 5
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Operating a Star
7−
8A _ship_ is an instance of the Arvo operating system that is used as a personal server on the Arvo network. Stars are a type of ship that act as infrastructure for the Arvo network. In the Arvo ship-hierarchy, stars are below galaxies and above planets.
6A _ship_ is an instance of the Arvo operating system that is used as a personal server on the Arvo network. Stars are a type of ship that act as infrastructure for the Arvo network. In the Arvo ship-hierarchy, stars are below galaxies and above planets.
9
7
10Parallel to the Arvo network is Azimuth, the Urbit identity system that uses the Ethereum blockchain. All ships must boot with a corresponding _point_ -- an Azimuth identity -- to use the Arvo network.
8Parallel to the Arvo network is Azimuth, the Urbit identity system that uses the Ethereum blockchain. All ships must boot with a corresponding _point_ -- an Azimuth identity -- to use the Arvo network.
@@ -13,15 +11,15 @@ Important star operations happen on both the Arvo side and the Azimuth side. On
13
11
14## Powers of a Star
12## Powers of a Star
15
13
16−Stars are above planets in the network hierarchy in the sense that each star sponsors some number of planets: stars assist their planets by facilitating peer discovery, routing packets, providing DNS routing, and pushing software updates. A star is the *sponsor* of the planets it provides those services to; those planets, in turn, are the *dependents* of that star.
14+Stars are above planets in the network hierarchy in the sense that each star sponsors some number of planets: stars discover peers for planets, route packets for planets, provide DNS routing for planets, and push software updates to planets. A star that fulfills this is called the *sponsor* of planets that receive such services from the star; those planets, in turn, are called *dependents* of that star.
17
15
18−Stars are also the "parents" planets. A new planet comes into existence only when spawned by a parent star. A parent star is the sponsor of its child planets by default. This can change if a planet chooses to find a new sponsor (see the "Escaping a Sponsor" section below).
16+Stars are also the "parents" planets. A new planet comes into existence only when spawned by a parent star. A parent planet is the sponsor of its children planets by default. This can change if a planet chooses to find a new sponsor (see the "Escaping a Sponsor" section below).
19
17
20−Planets must have a sponsor star to use most features of the Arvo network. A planet cannot fully boot without a sponsor, and cannot make new connections to peers as long as it is not connected to a sponsor. Sponsorless planets will still be able to message known peers, until they change their IP addresses.
18+Planets must have a sponsor star to use most features of the Arvo network. A planet cannot boot without a sponsor, and cannot make new connections to peers as long as it is not connected to a sponsor. Sponsorless planets will still be able to message discovered peers until any such peers change their IP addresses.
21
19
22## Responsibilities
20## Responsibilities
23
21
24−Like with real-life infrastructure, the operation of Arvo infrastructure comes with unique responsibilities. For reasons stated above, stars that are depended upon as sponsors should always be online on a reliable cloud service. These systems have layers of redundancies that make them much more resilient than local machines, so stars hosted in the cloud are unlikely to leave their dependents in the dark.
22+Like with real-life infrastructure, the operation of Arvo infrastructure comes with unique responsibilities. For reasons stated above, stars should be always be online on a reliable cloud service, such as Amazon Web Services or Google Cloud Platform. These systems have layers of redundancies that make them much more resilient than local machines, so stars hosted on the cloud are unlikely to leave their dependents in the dark.
25
23
26## Operations
24## Operations
27
25
@@ -45,7 +43,7 @@ Occasionally, your star might lose network connectivity due to a known timer iss
45
43
46Planets are, of course, able to change sponsors. To do this, they must request that a different star takes them on as a dependent and that star must accept the request. Planets cannot emancipate themselves from a sponsor without having a new sponsor lined up.
44Planets are, of course, able to change sponsors. To do this, they must request that a different star takes them on as a dependent and that star must accept the request. Planets cannot emancipate themselves from a sponsor without having a new sponsor lined up.
47
45
48−All of these actions happen on Azimuth. There will be [Bridge](../using-bridge) functionality to handle these actions in the future, but for now users will need to interact directly with the contracts with MetaMask, through services such as [Etherscan.io](https://etherscan.io/address/ecliptic.eth#writeContract). A sketch of the process is listed below; for now, only the Ethereum-savvy should act on these steps.
46+All of these actions happen on Azimuth. There will be Bridge functionality to handle these actions in the future, but for now users will need to interact directly with the contracts with MetaMask, through services such as [Etherscan.io](https://etherscan.io/address/ecliptic.eth#writeContract). A sketch of the process is listed below; for now, only the Ethereum-savvy should act on these steps.
49
47
50+ The planet calls the `escape` function in the Ecliptic contract and writes the resulting data to the blockchain.
48+ The planet calls the `escape` function in the Ecliptic contract and writes the resulting data to the blockchain.
51+ If the chosen star wants to become the planet's sponsor, it calls the `adopt` function in the Ecliptic contract.
49+ If the chosen star wants to become the planet's sponsor, it calls the `adopt` function in the Ecliptic contract.
getting-started/using-bridge.udon → getting-started/using-bridge.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Using Bridge'
2+title = "Using Bridge"
2− sort/'1'
3+weight = 1
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Using Bridge
7−
8[Bridge](https://github.com/urbit/bridge) is the client we built for interacting with [Azimuth](/docs/pki), the Urbit PKI, and managing your Azimuth identities, called _points_. Importantly, Bridge also allows you to generate a keyfile that you will need to boot your ship so that it can use the Arvo network.
6[Bridge](https://github.com/urbit/bridge) is the client we built for interacting with [Azimuth](/docs/pki), the Urbit PKI, and managing your Azimuth identities, called _points_. Importantly, Bridge also allows you to generate a keyfile that you will need to boot your ship so that it can use the Arvo network.
9
7
10This guide assumes that you own an Azimuth point, or that you have found someone to send an Azimuth point to your Ethereum address and are looking to claim it.
8This guide assumes that you own an Azimuth point, or that you have found someone to send an Azimuth point to your Ethereum address and are looking to claim it.
learn.udon → learn/_index.mdrenamed+6−8
@@ -1,11 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'4'
3− title/'Learn'
2+title = "Learn"
4− ==
3+weight = 4
5−;>
4+sort_by = "weight"
6−
5+template = "sections/docs/chapters.html"
7−# Learn
6++++
8−
9Tutorials and explanations for all the components of Urbit.
7Tutorials and explanations for all the components of Urbit.
10
8
11## Arvo(/docs/learn/arvo)
9## Arvo(/docs/learn/arvo)
learn/arvo.udon → learn/arvo.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Arvo'
2+title = "Arvo"
2− sort/'1'
3+weight = 1
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Arvo
7−
8Arvo is Urbit's functional operating system, written in [Hoon](/docs/learn/hoon). It's composed of modules called _vanes_:
6Arvo is Urbit's functional operating system, written in [Hoon](/docs/learn/hoon). It's composed of modules called _vanes_:
9
7
10## [Ames](ames)
8## [Ames](ames)
learn/arvo/_index.mdnew file+112
@@ -0,0 +1,112 @@
1++++
2+title = "Arvo"
3+weight = 1
4+sort_by = "weight"
5+template = "sections/docs/chapters.html"
6++++
7+Arvo is Urbit's functional operating system, written in [Hoon](/docs/learn/hoon). It's composed of modules called _vanes_:
8+
9+## [Ames](ames)
10+
11+Ames is the name of our network and the vane that communicates over it. It's an encrypted P2P network composed of instances of the Arvo operating system.
12+
13+## [Behn](behn)
14+
15+Behn is our timer. It allows vanes and applications to set and timer events, which are managed in a simple priority queue.
16+
17+## [Clay](clay)
18+
19+Clay is our filesystem and revision-control system.
20+
21+## [Dill](dill)
22+
23+Dill is our terminal driver. Unix sends keyboard events to dill from the terminal, and dill produces terminal output.
24+
25+## [Eyre](eyre)
26+
27+Eyre is our HTTP server. Unix sends HTTP messages to `%eyre`, and `%eyre` produces HTTP messages in response.
28+
29+## [Ford](ford)
30+
31+Ford is our build system. It handles resources and publishing.
32+
33+## [Gall](gall)
34+
35+Gall is the vane for controlling userspace apps.
36+
37+### [Hall](hall)
38+
39+Hall isn't a vane, but an important Gall app that functions as the Urbit messaging protocol.
40+
41+## Principles
42+
43+At a high level `%arvo` takes a mess of Unix I/O events and turns them into something clean and structured for the programmer.
44+
45+`%arvo` is designed to avoid the usual state of complex event networks: event spaghetti. We keep track of every event's cause so that we have a clear causal chain for every computation. At the bottom of every chain is a Unix I/O event, such as a network request, terminal input, file sync, or timer event. We push every step in the path the request takes onto the chain until we get to the terminal cause of the computation. Then we use this causal stack to route results back to the caller.
46+
47+### Ducts
48+
49+The `%arvo` causal stack is called a `++duct`. This is represented simply as a list of paths, where each path represents a step in the causal chain. The first element in the path is the first letter of whichever vane handled that step in the computation, or the empty span for Unix.
50+
51+Here's a duct that was recently observed in the wild:
52+
53+```
54+~[
55+ /g/a/~zod/4_shell_terminal/u/time
56+ /g/a/~zod/shell_terminal/u/child/4/main
57+ /g/a/~zod/terminal/u/txt
58+ /d/term-mess
59+ //term/1
60+]
61+```
62+
63+This is the duct the timer vane receives when "timer" sample app asks the timer vane to set a timer. This is also the duct over which the response is produced at the specified time. Unix sent a terminal keystroke event (enter), and Arvo routed it to `%dill` (our terminal), which passed it on to the `%gall` app terminal, which sent it to shell, its child, which created a new child (with process id 4), which on startup asked the timer vane to set a timer.
64+
65+The timer vane saves this duct, so that when the specified time arrives and Unix sends a wakeup event to the timer vane, it can produce the response on the same duct. This response is routed to the place we popped off the top of the duct, i.e. the time app. This app produces the text "ding", which falls down to the shell, which drops it through to the terminal. Terminal drops this down to dill, which converts it into an effect that Unix will recognize as a request to print "ding" to the screen. When dill produces this, the last path in the duct has an
66+initial element of the empty span, so this is routed to Unix, which applies the effects.
67+
68+This is a call stack, with a crucial feature: the stack is a first-class citizen. You can respond over a duct zero, one, or many times. You can save ducts for later use. There are definitely parallels to Scheme-style continuations, but simpler and with more structure.
69+
70+### Making Moves
71+
72+If ducts are a call stack, then how do we make calls and produce results? Arvo processes "moves" which are a combination of message data and metadata. There are two types of moves. A `%pass` move is analogous to a call:
73+
74+```
75+[duct %pass return-path=path vane-name=@tD data=card]
76+```
77+
78+Arvo pushes the return path (preceded by the first letter of the vane name) onto the duct and sends the given data, a card, to the vane we specified. Any response will come along the same duct with the path `return-path`.
79+
80+A `%give` move is analogous to a return:
81+
82+```
83+[duct %give data=card]
84+```
85+
86+Arvo pops the top path off the duct and sends the given card back to the caller.
87+
88+### Vanes
89+
90+As shown above, we use Arvo proper to route and control the flow of moves. However, Arvo proper is rarely directly responsible for processing the event data that directly causes the desired outcome of a move. This event data is contained within a card, which is simply a `(pair term noun)`. Instead, Arvo proper passes the card off to one of its vanes, which each present an interface to clients for a particular well-defined, stable, and general-purpose piece of functionality.
91+
92+As of this writing, we have seven vanes, which each provide the following services:
93+
94+- `%ames`: the name of both our network and the vane that communicates over it.
95+- `%behn`: a simple timer.
96+- `%clay`: our version-controlled, referentially- transparent, and global filesystem.
97+- `%dill`: a terminal driver. Unix sends keyboard events to `%dill` from either the console or telnet, and `%dill` produces terminal output.
98+- `%eyre`: an http server. Unix sends http messages to `%eyre`, and `%eyre` produces http messages in response.
99+- `%ford`: handles resources and publishing.
100+- `%gall`: manages our userspace applications. `%gall` keeps state and manages subscribers.
101+
102+### Cards
103+
104+Cards are the vane-specific portion of a move. Each vane defines a protocol for interacting with other vanes (via Arvo) by defining four types of cards: kisses, gifts, notes, and signs.
105+
106+When one vane is `%pass`ed a card in its `++kiss`, Arvo activates the `++call` gate with the card as its argument. To produce a result, the vane `%give`s one of the cards defined in its `++gift`. If the vane needs to request something of another vane, it `%pass`es it a `++note` card. When that other vane returns a result, Arvo activates the `++take` gate of the initial vane with one of the cards defined in its `++sign`.
107+
108+In other words, there are only four ways of seeing a move: (1) as a request seen by the caller, which is a ++note. (2) that same request as seen by the callee, a `++kiss`. (3) the response to that first request as seen by the callee, a `++gift`. (4) the response to the first request as seen by the caller, a `++sign`.
109+
110+When a `++kiss` card is passed to a vane, Arvo calls its `++call` gate, passing it both the card and its duct. This gate must be defined in every vane. It produces two things in the following order: a list of moves and a possibly modified copy of its context. The moves are used to interact with other vanes, while the new context allows the vane to save its state. The next time Arvo activates the vane it will have this context as its subject.
111+
112+This overview has detailed how to pass a card to a particular vane. To see the cards each vane can be `%pass`ed as a `++kiss` or return as a `++gift` (as well as the semantics tied to them), each vane's public interface is explained in detail in its respective overview.
learn/arvo/ames.udon → learn/arvo/ames.mdrenamed+6−15
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'1'
5− title/'Ames'
2+title = "Ames"
6− ==
3+weight = 1
7−;>
4+template = "doc.html"
8−
5++++
9−# Ames
10−
11Our networking protocol.
6Our networking protocol.
12
7
13`%ames` is the name of both our network and the vane that communicates
8`%ames` is the name of both our network and the vane that communicates
@@ -27,11 +22,7 @@ routing is handled entirely in `%ames`. Finally, the actual `%ames`
27protocol itself, including how to route incoming packets to the correct
22protocol itself, including how to route incoming packets to the correct
28vane or app, is defined in `%ames`.
23vane or app, is defined in `%ames`.
29
24
30−;=
31− ;h2
32− ;div(id "commentary"): Commentary
25+## Commentary
33− ==
34−==
35
26
36`%ames` is our networking protocol.
27`%ames` is our networking protocol.
37
28
learn/arvo/behn.udon → learn/arvo/behn.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'2'
5− title/'Behn'
2+title = "Behn"
6− ==
3+weight = 2
7−;>
4+template = "doc.html"
8−
5++++
9−# Behn
10−
11Our simple timer.
6Our simple timer.
12
7
13It allows vanes and applications to set and timer events, which are
8It allows vanes and applications to set and timer events, which are
learn/arvo/clay.udon → learn/arvo/clay.mdrenamed+7−20
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'3'
5− title/'Clay'
2+title = "Clay"
6− ==
3+weight = 3
7−;>
4+template = "doc.html"
8−
5++++
9−# Clay
10−
11Our filesystem.
6Our filesystem.
12
7
13`%clay` is version-controlled, referentially-transparent, and global.
8`%clay` is version-controlled, referentially-transparent, and global.
@@ -25,11 +20,7 @@ zuse. Second is the write, query, and subscription logic. Finally, there
25is the logic for communicating requests to, and receiving requests from,
20is the logic for communicating requests to, and receiving requests from,
26foreign ships.
21foreign ships.
27
22
28−;=
29− ;h2
30− ;div(id "architecture"): Architecture
23+## Architecture
31− ==
32−==
33
24
34Clay is the primary filesystem for the arvo operating system,
25Clay is the primary filesystem for the arvo operating system,
35which is the core of an urbit. The architecture of clay is
26which is the core of an urbit. The architecture of clay is
@@ -445,11 +436,7 @@ the other desk, or both desks do not exist. The sync will be
445activated when the upstream desk comes into existence and will
436activated when the upstream desk comes into existence and will
446create the downstream desk if needed.
437create the downstream desk if needed.
447
438
448−;=
449− ;h2
450− ;div(id "commentary"): Commentary
439+## Commentary
451− ==
452−==
453
440
454The first part of this section will be reference documentation for the data
441The first part of this section will be reference documentation for the data
455types used by our filesystem. In fact, as a general guide, we recommend
442types used by our filesystem. In fact, as a general guide, we recommend
learn/arvo/dill.udon → learn/arvo/dill.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'4'
5− title/'Dill'
2+title = "Dill"
6− ==
3+weight = 4
7−;>
4+template = "doc.html"
8−
5++++
9−# Dill
10−
11Our terminal driver.
6Our terminal driver.
12
7
13Unix sends keyboard events to `%dill` from either the console or telnet,
8Unix sends keyboard events to `%dill` from either the console or telnet,
learn/arvo/eyre.udon → learn/arvo/eyre.mdrenamed+8−25
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'5'
5− title/'Eyre'
2+title = "Eyre"
6− ==
3+weight = 5
7−;>
4+template = "doc.html"
8−
5++++
9−# Eyre
10−
11Our HTTP server.
6Our HTTP server.
12
7
13Unix sends http messages to `%eyre`, and `%eyre` produces http messages
8Unix sends http messages to `%eyre`, and `%eyre` produces http messages
@@ -21,11 +16,7 @@ essentially stateless, like functional publishing with `%ford`.
21Additionally, there's a fairly significant component that handles
16Additionally, there's a fairly significant component that handles
22`%gall` messaging and subscriptions, which must be stateful.
17`%gall` messaging and subscriptions, which must be stateful.
23
18
24−;=
25− ;h2
26− ;div(id "reference"): Reference
19+## Reference
27− ==
28−==
29
20
30### State
21### State
31
22
@@ -50,11 +41,7 @@ Runtime
50- `++ya`
41- `++ya`
51- `++ix`
42- `++ix`
52
43
53−;=
54− ;h2
55− ;div(id "commentary"): Commentary
44+## Commentary
56− ==
57−==
58
45
59
46
60Let us follow the loading of a simple cli app, as it bounces from
47Let us follow the loading of a simple cli app, as it bounces from
@@ -298,11 +285,7 @@ infrastructure crumbles around you, only imported martian networking can be
298trusted: the `%get` and `%got` [gram]()s are used to proxy [`%this` requests]() and
285trusted: the `%get` and `%got` [gram]()s are used to proxy [`%this` requests]() and
299[`%thou` responses]() respectively.
286[`%thou` responses]() respectively.
300
287
301−;=
302− ;h2
303− ;div(id "specification"): Specification
288+## Specification
304− ==
305−==
306
289
307The `%eyre` vane serves one purpose: receiving inbound HTTP requests from browsers and clients pretending to be browsers. To facilitate this communication, `%eyre` does two things: 1. provide an API for traditional clients to talk to; and 2. provide a mechanism for saving state that allows the server to keep track of identities/sessions, subscription data, and active connections.
290The `%eyre` vane serves one purpose: receiving inbound HTTP requests from browsers and clients pretending to be browsers. To facilitate this communication, `%eyre` does two things: 1. provide an API for traditional clients to talk to; and 2. provide a mechanism for saving state that allows the server to keep track of identities/sessions, subscription data, and active connections.
308
291
learn/arvo/ford.udon → learn/arvo/ford.mdrenamed+6−15
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'6'
5− title/'Ford'
2+title = "Ford"
6− ==
3+weight = 6
7−;>
4+template = "doc.html"
8−
5++++
9−# Ford
10−
11Our typed and marked computation engine.
6Our typed and marked computation engine.
12
7
13A variety of different services are provided by `%ford`, but they mostly
8A variety of different services are provided by `%ford`, but they mostly
@@ -109,11 +104,7 @@ Slaps a hoon against a subject silk. The mark of the result is `%noun`.
109Validates untyped data from a ship against a given mark. This is an
104Validates untyped data from a ship against a given mark. This is an
110extremely useful function.
105extremely useful function.
111
106
112−;=
113− ;h2
114− ;div(id "runes"): Ford runes
107+## Ford runes
115− ==
116−==
117
108
118One of the most common ways to use ford is through ford's runes, all of which begin with `/` ("net"). A ford rune runs a step of a ford build and places the result in the subject. There are various kinds of build steps, some of which take other build steps as parameters. The most common pattern is to have a sequence of ford runes at the top of a hoon source file that import the results of evaluating other hoon files. This is how we "import a library" in urbit: we add the result of compiling another hoon file into the current subject, possibly renaming it by wrapping a face around it.
109One of the most common ways to use ford is through ford's runes, all of which begin with `/` ("net"). A ford rune runs a step of a ford build and places the result in the subject. There are various kinds of build steps, some of which take other build steps as parameters. The most common pattern is to have a sequence of ford runes at the top of a hoon source file that import the results of evaluating other hoon files. This is how we "import a library" in urbit: we add the result of compiling another hoon file into the current subject, possibly renaming it by wrapping a face around it.
119
110
learn/arvo/gall.udon → learn/arvo/gall.mdrenamed+14−54
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'6'
4− title/'Gall Apps'
2+title = "Gall Apps"
5− ==
3+weight = 6
6−;>
4+template = "doc.html"
7−
5++++
8−# Gall Apps
9−
10This is documentation about how to write Gall apps. Some knowledge of Hoon is assumed.
6This is documentation about how to write Gall apps. Some knowledge of Hoon is assumed.
11
7
12> Note: the last major revision of these lessons was in 2016. They need to be
8> Note: the last major revision of these lessons was in 2016. They need to be
@@ -14,11 +10,7 @@ This is documentation about how to write Gall apps. Some knowledge of Hoon is a
14 always accessible enough to beginners. We are planning to rewrite these in the
10 always accessible enough to beginners. We are planning to rewrite these in the
15 near future. There is still useful information to be found in the meantime.
11 near future. There is still useful information to be found in the meantime.
16
12
17−;=
18− ;h2
19− ;div(id "api"): API Connectors
13+## API Connectors
20− ==
21−==
22
14
23> Note: This lesson depends on some code that needs to be updated before the examples will work correctly. This will be addressed in the near future. We apologize!
15> Note: This lesson depends on some code that needs to be updated before the examples will work correctly. This will be addressed in the near future. We apologize!
24
16
@@ -521,11 +513,7 @@ this doc:
521--
513--
522```
514```
523
515
524−;=
525− ;h2
526− ;div(id "generators"): Generators
516+## Generators
527− ==
528−==
529
517
530Up until now we've poked apps directly. This requires the user to
518Up until now we've poked apps directly. This requires the user to
531specify the mark, and it requires the app to accept the arguments in a
519specify the mark, and it requires the app to accept the arguments in a
@@ -689,11 +677,7 @@ Which causes `~sampel-sipnym` to print `[%receiving 'howdy']` and
689- Create a generator for `:click` from [Web Apps](#backend) so that you can run `:click|poke` to poke it.
677- Create a generator for `:click` from [Web Apps](#backend) so that you can run `:click|poke` to poke it.
690
678
691
679
692−;=
693− ;h2
694− ;div(id "http"): Writing an HTTP Request
680+## Writing an HTTP Request
695− ==
696−==
697
681
698There's a variety of arvo services we haven't touched on yet.
682There's a variety of arvo services we haven't touched on yet.
699Let's figure out how to make HTTP requests and set timers.
683Let's figure out how to make HTTP requests and set timers.
@@ -901,11 +885,7 @@ Let's try it out:
901~fintud-macrep:dojo> :up &atom 'off'
885~fintud-macrep:dojo> :up &atom 'off'
902```
886```
903
887
904−;=
905− ;h2
906− ;div(id "marks"): Marks
888+## Marks
907− ==
908−==
909
889
910We've used predefined marks already, but we haven't yet created
890We've used predefined marks already, but we haven't yet created
911our own marks. Let's write a sample mark of our own, then chain
891our own marks. Let's write a sample mark of our own, then chain
@@ -1026,11 +1006,7 @@ mark.
1026
1006
1027The minimal correct input, then, is `&mime &hymn &cord &atom 17`.
1007The minimal correct input, then, is `&mime &hymn &cord &atom 17`.
1028
1008
1029−;=
1030− ;h2
1031− ;div(id "network"): Network Messages
1009+## Network Messages
1032− ==
1033−==
1034
1010
1035In the following we assume that you have some knowledge of Hoon. If you don't, check out chapters 1 and 2 of the Hoon tutorial and check back when you're ready.
1011In the following we assume that you have some knowledge of Hoon. If you don't, check out chapters 1 and 2 of the Hoon tutorial and check back when you're ready.
1036
1012
@@ -1377,11 +1353,7 @@ urbit as for sending messages between apps on different urbits.
1377- Put `even` and `odd` on two separate urbits and pass the messages over the network. Post a link to a working solution in :talk to receive a cookie.
1353- Put `even` and `odd` on two separate urbits and pass the messages over the network. Post a link to a working solution in :talk to receive a cookie.
1378
1354
1379
1355
1380−;=
1381− ;h2
1382− ;div(id "security"): Security Drivers
1356+## Security Drivers
1383− ==
1384−==
1385
1357
1386A security driver is a file in `/=home=/sec/<tld>/<domain>/hoon`
1358A security driver is a file in `/=home=/sec/<tld>/<domain>/hoon`
1387that handles the authentication for all HTTP requests to
1359that handles the authentication for all HTTP requests to
@@ -1655,11 +1627,7 @@ library.
1655Remember, of course, that the best strategy for building security
1627Remember, of course, that the best strategy for building security
1656drivers is to copy a similar one and tweak it to taste.
1628drivers is to copy a similar one and tweak it to taste.
1657
1629
1658−;=
1659− ;h2
1660− ;div(id "state"): State
1630+## State
1661− ==
1662−==
1663
1631
1664In the last section we built a few small apps that sent moves. These apps were
1632In the last section we built a few small apps that sent moves. These apps were
1665entirely stateless, however. Most useful apps require some amount of state.
1633entirely stateless, however. Most useful apps require some amount of state.
@@ -1776,11 +1744,7 @@ Sample output:
1776```
1744```
1777
1745
1778
1746
1779−;=
1780− ;h2
1781− ;div(id "subscriptions"): Subscriptions
1747+## Subscriptions
1782− ==
1783−==
1784
1748
1785We've dealt fairly extensively with "poke" messages to an app, but these
1749We've dealt fairly extensively with "poke" messages to an app, but these
1786are somewhat limited. A poke is a one-way message, but more often we
1750are somewhat limited. A poke is a one-way message, but more often we
@@ -2106,11 +2070,7 @@ nullability. If `err` is `~`, then the subscription was successful and we tell
2106that to the user. Otherwise, we print out the error message.
2070that to the user. Otherwise, we print out the error message.
2107
2071
2108
2072
2109−;=
2110− ;h2
2111− ;div(id "backend"): Backend
2073+## Backend
2112− ==
2113−==
2114
2074
2115We've done purely functional web pages as hook files, and we've
2075We've done purely functional web pages as hook files, and we've
2116done command line apps, so now let's interact with an app over
2076done command line apps, so now let's interact with an app over
learn/arvo/hall.udon → learn/arvo/hall.mdrenamed+10−35
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'7'
5− title/'Hall'
2+title = "Hall"
6− ==
3+weight = 7
7−;>
4+template = "doc.html"
8−
5++++
9−# Hall
10−
11> Last major revision of this tutorial: 2017. Some of the information and Hoon syntax here may
6> Last major revision of this tutorial: 2017. Some of the information and Hoon syntax here may
12 be outdated.
7 be outdated.
13
8
@@ -22,11 +17,7 @@ Hall is the Urbit messaging and notifications protocol. This document details Ha
22
17
23- #### [The New Gall Model](#new-gall)
18- #### [The New Gall Model](#new-gall)
24
19
25−;=
26− ;h1
27− ;div(id "architecture"): Hall Architecture
20+# Hall Architecture
28− ==
29−==
30
21
31This document is complemented by Hall's source code, but doesn't require it. Definitions of data structures, code snippets and diagrams will be provided where useful.
22This document is complemented by Hall's source code, but doesn't require it. Definitions of data structures, code snippets and diagrams will be provided where useful.
32
23
@@ -517,11 +508,7 @@ To gain a more thorough understanding of Hall's inner workings, take a look at i
517To see an expansive example of a Hall client, take a look at the code of Talk. It, too, comes with inline documentation.
508To see an expansive example of a Hall client, take a look at the code of Talk. It, too, comes with inline documentation.
518[On Github.](https://github.com/urbit/arvo/blob/master/app/talk.hoon)
509[On Github.](https://github.com/urbit/arvo/blob/master/app/talk.hoon)
519
510
520−;=
521− ;h1
522− ;div(id "interface"): The Hall Interface
511+# The Hall Interface
523− ==
524−==
525
512
526This document describes the different interfaces Hall provides and the data that is accessible and modifiable through them. Knowledge of the Urbit application model (including [new gall](#new-gall)) and [Hall's architecture](#architecture) is assumed.
513This document describes the different interfaces Hall provides and the data that is accessible and modifiable through them. Knowledge of the Urbit application model (including [new gall](#new-gall)) and [Hall's architecture](#architecture) is assumed.
527
514
@@ -883,11 +870,7 @@ When the user makes any changes to shared UI elements (elements that should pers
883
870
884`%public`: Adds or removes a circle to/from the user's public membership list.
871`%public`: Adds or removes a circle to/from the user's public membership list.
885
872
886−;=
887− ;h1
888− ;div(id "new-gall"): The New Gall Model
873+# The New Gall Model
889− ==
890−==
891
874
892This document is complemented by the source code of applications that use the new Gall model (like [Hall](https://github.com/urbit/arvo/blob/master/app/hall.hoon)), but doesn't require it. Code snippets will be provided where useful. Some knowledge of Hoon and the functioning of Hoon apps is assumed.
875This document is complemented by the source code of applications that use the new Gall model (like [Hall](https://github.com/urbit/arvo/blob/master/app/hall.hoon)), but doesn't require it. Code snippets will be provided where useful. Some knowledge of Hoon and the functioning of Hoon apps is assumed.
893
876
@@ -1111,11 +1094,7 @@ As we saw earlier, for `/number` queries the `delta`s match one-on-one with the
1111- Gall should probably cache `++feel` results during a single pass, to avoid the cycles of generating what it can be certain of is the same `(unit rumor)`. (But then for eg `/circle/nom/13` and `/circle/nom/14` it would still recalculate. Better than nothing.)
1094- Gall should probably cache `++feel` results during a single pass, to avoid the cycles of generating what it can be certain of is the same `(unit rumor)`. (But then for eg `/circle/nom/13` and `/circle/nom/14` it would still recalculate. Better than nothing.)
1112
1095
1113
1096
1114−;=
1115− ;h2
1116− ;div(id "spec"): The original new-Gall spec
1097+## The original new-Gall spec
1117− ==
1118−==
1119
1098
1120`~sorreg-namtyv`
1099`~sorreg-namtyv`
1121
1100
@@ -1271,11 +1250,7 @@ As we saw earlier, for `/number` queries the `delta`s match one-on-one with the
1271--
1250--
1272```
1251```
1273
1252
1274−;=
1275− ;h2
1276− ;div(id "example"): A new-Gall example app
1253+## A new-Gall example app
1277− ==
1278−==
1279
1254
1280```
1255```
1281:: counter app
1256:: counter app
learn/azimuth.udon → learn/azimuth.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Azimuth'
2+title = "Azimuth"
2− sort/'2'
3+weight = 2
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Azimuth
7−
8Azimuth is a general-purpose public-key infrastructure (PKI) on the Ethereum blockchain, used as a decentralized ledger for Urbit identities that we call *points*. Having a point is necessary to use the Urbit network, which makes it important to have a neutral ledger to determine who owns what.
6Azimuth is a general-purpose public-key infrastructure (PKI) on the Ethereum blockchain, used as a decentralized ledger for Urbit identities that we call *points*. Having a point is necessary to use the Urbit network, which makes it important to have a neutral ledger to determine who owns what.
9
7
10Azimuth is not, however, part of the Arvo stack. Azimuth is a parallel system that be used as a generalized identity system for other projects. Azimuth "touches" the Urbit ecosystem when a point is used to boot a virtual computer on the Urbit network for the first time. When that happens, the point considered *linked* to Azimuth and the point’s full powers are available for use. Once a point is linked, it cannot be unlinked.
8Azimuth is not, however, part of the Arvo stack. Azimuth is a parallel system that be used as a generalized identity system for other projects. Azimuth "touches" the Urbit ecosystem when a point is used to boot a virtual computer on the Urbit network for the first time. When that happens, the point considered *linked* to Azimuth and the point’s full powers are available for use. Once a point is linked, it cannot be unlinked.
learn/hoon.udon → learn/hoon/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'2'
4− title/'Hoon'
2+title = "Hoon"
5− ==
3+weight = 2
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Hoon
6++++
9−
10Hoon is a high-level, statically typed, functional programming language, custom-designed for use with Urbit. For a functional language it has a surprisingly imperative style, and mastering it doesn't require knowing any advanced mathematics.
7Hoon is a high-level, statically typed, functional programming language, custom-designed for use with Urbit. For a functional language it has a surprisingly imperative style, and mastering it doesn't require knowing any advanced mathematics.
11
8
12Hoon is an unusual language in several respects, both in syntax and semantics. It uses runes (i.e., ASCII digraphs) in place of keywords, and the spacing rules are a bit strict. A great deal can be expressed in few lines, though excessively compressed code tends to be hard to read. Hoon has surprisingly simple semantics, but mastering it requires learning concepts that don't have close analogues in other languages.
9Hoon is an unusual language in several respects, both in syntax and semantics. It uses runes (i.e., ASCII digraphs) in place of keywords, and the spacing rules are a bit strict. A great deal can be expressed in few lines, though excessively compressed code tends to be hard to read. Hoon has surprisingly simple semantics, but mastering it requires learning concepts that don't have close analogues in other languages.
learn/hoon/hoon-tutorial.udon → learn/hoon/hoon-tutorial/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'1'
4− title/'Hoon Tutorial'
2+title = "Hoon Tutorial"
5− ==
3+weight = 1
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Hoon Tutorial
6++++
9−
10This series is designed to teach you Hoon without assuming you have an extensive programming background. In fact, you should be able to follow much of it even if you have no programming experience at all, though of course experience helps. We strongly encourage you to try out all the examples of each lesson. These lessons are meant for the beginner but they aren't meant to be skimmed.
7This series is designed to teach you Hoon without assuming you have an extensive programming background. In fact, you should be able to follow much of it even if you have no programming experience at all, though of course experience helps. We strongly encourage you to try out all the examples of each lesson. These lessons are meant for the beginner but they aren't meant to be skimmed.
11
8
12Chapter 1 introduces and explains the fundamental concepts you need in order to understand Hoon's semantics.
9Chapter 1 introduces and explains the fundamental concepts you need in order to understand Hoon's semantics.
learn/hoon/hoon-tutorial/arms-and-cores.udon → learn/hoon/hoon-tutorial/arms-and-cores.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'14'
5− title/'Arms and Cores'
2+title = "Arms and Cores"
6− ==
3+weight = 14
7−;>
4+template = "doc.html"
8−
5++++
9−# 1.4 Arms and Cores
10−
11The Hoon subject is a noun. Each fragment of this noun is either an arm or a leg. In the previous lesson you learned what a leg is, and how to return legs of the subject by various means. In this lesson you'll learn what an arm is. Arms are a bit more complex than legs -- a full understanding of them requires a bit more background knowledge. Accordingly, in this lesson we must also introduce an important Hoon data structure: a 'core'.
6The Hoon subject is a noun. Each fragment of this noun is either an arm or a leg. In the previous lesson you learned what a leg is, and how to return legs of the subject by various means. In this lesson you'll learn what an arm is. Arms are a bit more complex than legs -- a full understanding of them requires a bit more background knowledge. Accordingly, in this lesson we must also introduce an important Hoon data structure: a 'core'.
12
7
13After arms are defined and explained we review wing expressions, this time focusing on wing resolution to arms.
8After arms are defined and explained we review wing expressions, this time focusing on wing resolution to arms.
learn/hoon/hoon-tutorial/atoms-auras-and-simple-cell-types.udon → learn/hoon/hoon-tutorial/atoms-auras-and-simple-cell-types.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'24'
5− title/'Atoms, Auras, and Simple Cell Types'
2+title = "Atoms, Auras, and Simple Cell Types"
6− ==
3+weight = 24
7−;>
4+template = "doc.html"
8−
5++++
9−# 2.4: Atoms, Auras, and Simple Cell Types
10−
11Like most modern high-level programming languages, Hoon has a type system. Because Hoon is a functional programming language, its type system differs somewhat from those of non-functional languages. In the next few lessons we'll go over Hoon's type system and point out some of its distinctive features. Certain advanced topics (e.g. type [polymorphism](https://en.wikipedia.org/wiki/Polymorphism_(computer_science%29)) won't be addressed until a later chapter.
6Like most modern high-level programming languages, Hoon has a type system. Because Hoon is a functional programming language, its type system differs somewhat from those of non-functional languages. In the next few lessons we'll go over Hoon's type system and point out some of its distinctive features. Certain advanced topics (e.g. type [polymorphism](https://en.wikipedia.org/wiki/Polymorphism_(computer_science%29)) won't be addressed until a later chapter.
12
7
13A type is ordinarily understood to be a set of values. Examples: the set of all atoms is a type, the set of all cells is a type, and so on.
8A type is ordinarily understood to be a set of values. Examples: the set of all atoms is a type, the set of all cells is a type, and so on.
learn/hoon/hoon-tutorial/cores-again.udon → learn/hoon/hoon-tutorial/cores-again.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Cores Again"
3− next/'true'
3+weight = 28
4− sort/'28'
4+template = "doc.html"
5− title/'Cores Again'
5++++
6− ==
7−;>
8−
9−# 2.8 Cores Again
10−
11In the last lesson you learned a bit about how to use cores as state machines. In this lesson you'll expand on that knowledge, in particular by learning how to use the `=^` rune. At the end of the lesson you'll learn how to write a generator that shuffles a 52 card deck and deals hands from it.
6In the last lesson you learned a bit about how to use cores as state machines. In this lesson you'll expand on that knowledge, in particular by learning how to use the `=^` rune. At the end of the lesson you'll learn how to write a generator that shuffles a 52 card deck and deals hands from it.
12
7
13## The `num` Core Again
8## The `num` Core Again
learn/hoon/hoon-tutorial/cores.udon → learn/hoon/hoon-tutorial/cores.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'27'
5− title/'Cores'
2+title = "Cores"
6− ==
3+weight = 27
7−;>
4+template = "doc.html"
8−
5++++
9−# 2.7 Cores
10−
11You learned what a core is in previous lessons. After a brief review, let's talk about how to use cores effectively in Hoon programming.
6You learned what a core is in previous lessons. After a brief review, let's talk about how to use cores effectively in Hoon programming.
12
7
13A core is a particularly useful kind of Hoon data: a cell whose head is a battery and whose tail is a payload:
8A core is a particularly useful kind of Hoon data: a cell whose head is a battery and whose tail is a payload:
learn/hoon/hoon-tutorial/examples.udon → learn/hoon/hoon-tutorial/examples.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'33'
5− title/'Examples'
2+title = "Examples"
6− ==
3+weight = 33
7−;>
4+template = "doc.html"
8−
5++++
9−# Examples
10−
11Let's look at two more examples of Hoon code: the Sieve of Eratosthenes (a naive prime sieve) and a tic-tac-toe engine.
6Let's look at two more examples of Hoon code: the Sieve of Eratosthenes (a naive prime sieve) and a tic-tac-toe engine.
12
7
13## Sieve of Eratosthenes
8## Sieve of Eratosthenes
learn/hoon/hoon-tutorial/gates.udon → learn/hoon/hoon-tutorial/gates.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'15'
5− title/'Gates (Hoon Functions)'
2+title = "Gates (Hoon Functions)"
6− ==
3+weight = 15
7−;>
4+template = "doc.html"
8−
5++++
9−# 1.5 Gates (Hoon Functions)
10−
11In this lesson you're going to learn about Hoon functions.
6In this lesson you're going to learn about Hoon functions.
12
7
13## What is a Function?
8## What is a Function?
learn/hoon/hoon-tutorial/hoon-programs.udon → learn/hoon/hoon-tutorial/hoon-programs.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'21'
5− title/'Hoon Programs'
2+title = "Hoon Programs"
6− ==
3+weight = 21
7−;>
4+template = "doc.html"
8−
5++++
9−# 2.1 Writing Hoon Programs
10−
11So far you've only entered short snippets of Hoon code into the dojo. Let's look at some substantive programs.
6So far you've only entered short snippets of Hoon code into the dojo. Let's look at some substantive programs.
12
7
13There many kinds of Hoon programs: generators, Gall apps, Sail documents, and more. In this chapter we'll work exclusively with a subset of the first kind: generators. This narrow focus will allow us to set aside complications that aren't necessary for learning the basics of Hoon. We won't even talk about the full range of generators supported in Urbit just yet. Other kinds of programs will be covered in other lessons.
8There many kinds of Hoon programs: generators, Gall apps, Sail documents, and more. In this chapter we'll work exclusively with a subset of the first kind: generators. This narrow focus will allow us to set aside complications that aren't necessary for learning the basics of Hoon. We won't even talk about the full range of generators supported in Urbit just yet. Other kinds of programs will be covered in other lessons.
learn/hoon/hoon-tutorial/hoon-syntax.udon → learn/hoon/hoon-tutorial/hoon-syntax.mdrenamed+6−11
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Hoon Syntax"
3− next/'true'
3+weight = 22
4− sort/'22'
4+template = "doc.html"
5− title/'Hoon Syntax'
5++++
6− ==
7−;>
8−
9−# 2.2 Hoon Syntax
10−
11The study of Hoon can be divided into two parts: syntax and semantics.
6The study of Hoon can be divided into two parts: syntax and semantics.
12
7
13The [syntax](https://en.wikipedia.org/wiki/Syntax_(programming_languages%29) of a programming language is the set of rules that determine what counts as admissible code in that language. It determines which characters may be used in the source, and also how these characters may be assembled to constitute a program. Attempting to run a program that doesn't follow these rules will result in a syntax error.
8The [syntax](https://en.wikipedia.org/wiki/Syntax_(programming_languages%29) of a programming language is the set of rules that determine what counts as admissible code in that language. It determines which characters may be used in the source, and also how these characters may be assembled to constitute a program. Attempting to run a program that doesn't follow these rules will result in a syntax error.
@@ -18,7 +13,7 @@ In this lesson we cover Hoon's syntax. A strict account of Hoon's syntax would
18
13
19## Hoon Characters
14## Hoon Characters
20
15
21−Hoon source files are composed almost entirely of the [printable ASCII characters](https://en.wikipedia.org/wiki/ASCII#Printable_characters). Hoon does not accept any other characters in source files except for [UTF-8](https://en.wikipedia.org/wiki/UTF-8) in quoted strings. Hard tab characters are illegal; use two spaces instead.
16+Hoon source files are composed almost entirely of the [printable ASCII characters](https://en.wikipedia.org/wiki/ASCII#Printable_characters). Hoon does not accept any other characters in source files except for [UTF-8](https://en.wikipedia.org/wiki/UTF-8) in quoted strings. Hard tab characters are illegal.
22
17
23```
18```
24> "You can put ½ in quotes, but not elsewhere!"
19> "You can put ½ in quotes, but not elsewhere!"
learn/hoon/hoon-tutorial/lists.udon → learn/hoon/hoon-tutorial/lists.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Standard Library: Lists"
3− next/'true'
3+weight = 29
4− sort/'29'
4+template = "doc.html"
5− title/'Standard Library: Lists'
5++++
6− ==
7−;>
8−
9−# 2.9 Standard Library: Lists
10−
11In this lesson we'll review what a list is and then cover many of the list-related functions in the Hoon standard library.
6In this lesson we'll review what a list is and then cover many of the list-related functions in the Hoon standard library.
12
7
13## List Review
8## List Review
learn/hoon/hoon-tutorial/multi-gate-cores-and-doors.udon → learn/hoon/hoon-tutorial/multi-gate-cores-and-doors.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Multi-gate Cores and Doors"
3− next/'true'
3+weight = 16
4− sort/'16'
4+template = "doc.html"
5− title/'Multi-gate Cores and Doors'
5++++
6− ==
7−;>
8−
9−# 1.6 Multi-gate Cores and Doors
10−
11It's useful to have cores whose arms evaluate to make gates. The use of such cores is common in Hoon; that's how the functions of the Hoon standard library are stored in the subject. Learning about such cores will also deepen the reader's understanding of Hoon semantics, and for that reason alone is worthwhile.
6It's useful to have cores whose arms evaluate to make gates. The use of such cores is common in Hoon; that's how the functions of the Hoon standard library are stored in the subject. Learning about such cores will also deepen the reader's understanding of Hoon semantics, and for that reason alone is worthwhile.
12
7
13In this lesson you'll also learn about a new kind of core, called a 'door'.
8In this lesson you'll also learn about a new kind of core, called a 'door'.
learn/hoon/hoon-tutorial/nouns.udon → learn/hoon/hoon-tutorial/nouns.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'12'
5− title/'Nouns'
2+title = "Nouns"
6− ==
3+weight = 12
7−;>
4+template = "doc.html"
8−
5++++
9−# 1.2 Nouns
10−
11In Urbit every piece of data is a noun. In order to understand Hoon one must first understand nouns.
6In Urbit every piece of data is a noun. In order to understand Hoon one must first understand nouns.
12
7
13## Noun Definition
8## Noun Definition
learn/hoon/hoon-tutorial/setup.udon → learn/hoon/hoon-tutorial/setup.mdrenamed+6−11
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'11'
5− title/'Setup'
2+title = "Setup"
6− ==
3+weight = 11
7−;>
4+template = "doc.html"
8−
5++++
9−# 1.1 Setup
10−
11Before we begin working on Hoon you should first (1) have Urbit installed and (2) boot an 'urbit' that you can use for trying out Hoon examples. Interactive learning is far superior to passive reading.
6Before we begin working on Hoon you should first (1) have Urbit installed and (2) boot an 'urbit' that you can use for trying out Hoon examples. Interactive learning is far superior to passive reading.
12
7
13## Installing Urbit
8## Installing Urbit
@@ -26,7 +21,7 @@ For this tutorial you'll boot and run what we call a 'comet'. *Comets* are urbi
26
21
27`~hillyn-pitwet-hasdur-paswer--miszod-rabpex-divrup-fogdur`
22`~hillyn-pitwet-hasdur-paswer--miszod-rabpex-divrup-fogdur`
28
23
29−Comet names aren't quite as memorable as others, but they're disposable identities that anyone can make for free to join the live network. Thus, comets make the ideal urbit for playing around with Hoon, asking for help from other Urbit devs in [Talk](/docs/arvo/arvo-internals/using/messaging/) if you need it, and showing off Urbit to your friends.
24+Comet names aren't quite as memorable as others, but they're disposable identities that anyone can make for free to join the live network. Thus, comets make the ideal urbit for playing around with Hoon, asking for help from other Urbit devs in [Talk](/docs/using/messaging/) if you need it, and showing off Urbit to your friends.
30
25
31## Booting a Comet
26## Booting a Comet
32
27
learn/hoon/hoon-tutorial/simple-one-gate-programs.udon → learn/hoon/hoon-tutorial/simple-one-gate-programs.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'23'
5− title/'Simple One-Gate Programs'
2+title = "Simple One-Gate Programs"
6− ==
3+weight = 23
7−;>
4+template = "doc.html"
8−
5++++
9−# 2.3 Simple One-Gate Programs
10−
11In this lesson we'll try to cover enough basic Hoon so that you can write (and understand) your own simple programs. Each of the programs given in this lesson produces a gate. (Gates are one-armed cores of Hoon that can be used as functions -- this is covered in [lesson 1.5](../gates).)
6In this lesson we'll try to cover enough basic Hoon so that you can write (and understand) your own simple programs. Each of the programs given in this lesson produces a gate. (Gates are one-armed cores of Hoon that can be used as functions -- this is covered in [lesson 1.5](../gates).)
12
7
13For each program we encourage you to: (1) write out the program yourself, (2) save it to the `/home/gen` directory of your urbit's pier, and (3) run it from the dojo. The best way to learn to program in Hoon is by getting your hands dirty.
8For each program we encourage you to: (1) write out the program yourself, (2) save it to the `/home/gen` directory of your urbit's pier, and (3) run it from the dojo. The best way to learn to program in Hoon is by getting your hands dirty.
learn/hoon/hoon-tutorial/structures-and-complex-types.udon → learn/hoon/hoon-tutorial/structures-and-complex-types.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Structures and Complex Types"
3− next/'true'
3+weight = 26
4− sort/'26'
4+template = "doc.html"
5− title/'Structures and Complex Types'
5++++
6− ==
7−;>
8−
9−# 2.6 Structures and Complex Types
10−
11In this lesson we'll talk a little about how type expressions become structures, and how these structures manifest in different ways in different parts of your Hoon code. We'll also talk about how to create your own custom-defined complex types from simpler ones.
6In this lesson we'll talk a little about how type expressions become structures, and how these structures manifest in different ways in different parts of your Hoon code. We'll also talk about how to create your own custom-defined complex types from simpler ones.
12
7
13## Structures
8## Structures
learn/hoon/hoon-tutorial/the-subject-and-its-legs.udon → learn/hoon/hoon-tutorial/the-subject-and-its-legs.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'13'
5− title/'The Subject and Its Legs'
2+title = "The Subject and Its Legs"
6− ==
3+weight = 13
7−;>
4+template = "doc.html"
8−
5++++
9−# 1.3 The Subject and Its Legs
10−
11Hoon isn't an object-oriented programming language; it's a "subject-oriented" programming language. But what's this "subject"?
6Hoon isn't an object-oriented programming language; it's a "subject-oriented" programming language. But what's this "subject"?
12
7
13## A Start
8## A Start
learn/hoon/hoon-tutorial/trees-sets-and-maps.udon → learn/hoon/hoon-tutorial/trees-sets-and-maps.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Standard Library: Trees, Sets, and Maps"
3− next/'true'
3+weight = 30
4− sort/'30'
4+template = "doc.html"
5− title/'Standard Library: Trees, Sets, and Maps'
5++++
6− ==
7−;>
8−
9−# 2.10 Hoon Standard Library: Trees, Sets, and Maps
10−
11Along with lists, the Hoon standard library also supports trees, sets, and maps as data structures. A Hoon `tree` is the data structure for a binary tree. A Hoon `set` is the data structure for a set of values. A Hoon `map` is the data structure for a set of `[key value]` pairs.
6Along with lists, the Hoon standard library also supports trees, sets, and maps as data structures. A Hoon `tree` is the data structure for a binary tree. A Hoon `set` is the data structure for a set of values. A Hoon `map` is the data structure for a set of `[key value]` pairs.
12
7
13In this lesson we'll cover each.
8In this lesson we'll cover each.
learn/hoon/hoon-tutorial/type-checking-and-type-inference.udon → learn/hoon/hoon-tutorial/type-checking-and-type-inference.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'25'
5− title/'Type Checking and Type Inference'
2+title = "Type Checking and Type Inference"
6− ==
3+weight = 25
7−;>
4+template = "doc.html"
8−
5++++
9−# 2.5 Type Checking and Type Inference
10−
11As the Hoon compiler compiles your Hoon code, it does a *type check* on certain expressions to make sure they are guaranteed to produce a value of the correct type. If it cannot be proved that the output value is correctly typed, the compile will fail with a `nest-fail` crash. In order to figure out what type of value is produced by a given expression, the compiler uses *type inference* on that code. In this lesson we'll cover various cases in which a type check is performed, and also how the compiler does type inference on an expression.
6As the Hoon compiler compiles your Hoon code, it does a *type check* on certain expressions to make sure they are guaranteed to produce a value of the correct type. If it cannot be proved that the output value is correctly typed, the compile will fail with a `nest-fail` crash. In order to figure out what type of value is produced by a given expression, the compiler uses *type inference* on that code. In this lesson we'll cover various cases in which a type check is performed, and also how the compiler does type inference on an expression.
12
7
13## Type Checking
8## Type Checking
learn/hoon/hoon-tutorial/type-polymorphism.udon → learn/hoon/hoon-tutorial/type-polymorphism.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'31'
4− title/'Type Polymorphism'
2+title = "Type Polymorphism"
5− ==
3+weight = 31
6−;>
4+template = "doc.html"
7−
5++++
8−# 3.1 Polymorphism
9−
10There are many cases in which one may want to write a function that accepts as input various different types of data. Such a function is said to be [polymorphic](https://en.wikipedia.org/wiki/Polymorphism_(computer_science%29). ("Polymorphism" = "many forms"; so polymorphic functions accept many forms of data as input.)
6There are many cases in which one may want to write a function that accepts as input various different types of data. Such a function is said to be [polymorphic](https://en.wikipedia.org/wiki/Polymorphism_(computer_science%29). ("Polymorphism" = "many forms"; so polymorphic functions accept many forms of data as input.)
11
7
12One relatively trivial form of polymorphism involves sub-typing. A gate whose sample is a raw `noun` can accept any Hoon data structure as input -- it's just that the sample will only be treated as a raw noun. For example, consider the `copy` gate below:
8One relatively trivial form of polymorphism involves sub-typing. A gate whose sample is a raw `noun` can accept any Hoon data structure as input -- it's just that the sample will only be treated as a raw noun. For example, consider the `copy` gate below:
learn/hoon/style.udon → learn/hoon/style.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Hoon Style Guide"
3− sort/'3'
3+weight = 3
4− title/'Hoon Style Guide'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Hoon Style Guide
9−
10Welcome to the Hoon style guide. It's important to familiarize yourself with our way of writing Hoon code.
6Welcome to the Hoon style guide. It's important to familiarize yourself with our way of writing Hoon code.
11
7
12## Layout
8## Layout
learn/hoon/workbook.udon → learn/hoon/workbook/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'2'
4− title/'Hoon Workbook'
2+title = "Hoon Workbook"
5− ==
3+weight = 2
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Hoon Workbook
6++++
9−
10The Workbook is the place to sharpen your Hoon skills. Each entry in the
7The Workbook is the place to sharpen your Hoon skills. Each entry in the
11Workbook is a code walkthrough followed by exercises.
8Workbook is a code walkthrough followed by exercises.
12
9
learn/hoon/workbook/bomb.udon → learn/hoon/workbook/bomb.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'7'
4− title/'Bomb Defusing'
2+title = "Bomb Defusing"
5− ==
3+weight = 7
6−;>
4+template = "doc.html"
7−
5++++
8−# Bomb Defusing
9−
10In this exercise, we will build a generator that takes a list of wires to be cut
6In this exercise, we will build a generator that takes a list of wires to be cut
11in order to defuse a bomb. The bomb is defused according to the following rules.
7in order to defuse a bomb. The bomb is defused according to the following rules.
12
8
learn/hoon/workbook/caesar.udon → learn/hoon/workbook/caesar.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'2'
4− title/'Caesar Cipher'
2+title = "Caesar Cipher"
5− ==
3+weight = 2
6−;>
4+template = "doc.html"
7−
5++++
8−# Caesar Cipher
9−
10A Caesar cipher is a very simple way to obfuscate a message. The technique
6A Caesar cipher is a very simple way to obfuscate a message. The technique
11takes a string and swaps out each component letter with another letter that is
7takes a string and swaps out each component letter with another letter that is
12a specified number of positions up or down in the alphabet. For example, with a
8a specified number of positions up or down in the alphabet. For example, with a
learn/hoon/workbook/digits.udon → learn/hoon/workbook/digits.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'4'
4− title/'Digits'
2+title = "Digits"
5− ==
3+weight = 4
6−;>
4+template = "doc.html"
7−
5++++
8−# Digits
9−
10Let's write a generator that takes a `@ud` (unsigned decimal) and returns a list
6Let's write a generator that takes a `@ud` (unsigned decimal) and returns a list
11of its digits.
7of its digits.
12
8
learn/hoon/workbook/eightball.udon → learn/hoon/workbook/eightball.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'5'
4− title/'Magic 8-Ball'
2+title = "Magic 8-Ball"
5− ==
3+weight = 5
6−;>
4+template = "doc.html"
7−
5++++
8−# Magic 8-Ball
9−
10In this lesson we'll write a generator that mimics the functionality of a
6In this lesson we'll write a generator that mimics the functionality of a
11Magic 8-Ball, producing a randomized response with each run.
7Magic 8-Ball, producing a randomized response with each run.
12
8
learn/hoon/workbook/list.udon → learn/hoon/workbook/list.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "List of Numbers"
3− sort/'1'
3+weight = 1
4− title/'List of Numbers'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# List of Numbers
9−
10This code-example is intended to familiarize you with the basics of Hoon syntax. It's okay if you don't understand everything immediately; some concepts may beyond your grasp for now. What's important is that you become accustomed to the elements of the code and their look once combined into a valid program.
6This code-example is intended to familiarize you with the basics of Hoon syntax. It's okay if you don't understand everything immediately; some concepts may beyond your grasp for now. What's important is that you become accustomed to the elements of the code and their look once combined into a valid program.
11
7
12Below is a simple Hoon program that takes a single number `n` from the user as input and produces a list of numbers from `1` up to (but not including) `n`. So, if the user gives the number `5`, the program will produce: `~[1 2 3 4]`.
8Below is a simple Hoon program that takes a single number `n` from the user as input and produces a list of numbers from `1` up to (but not including) `n`. So, if the user gives the number `5`, the program will produce: `~[1 2 3 4]`.
learn/hoon/workbook/recursion.udon → learn/hoon/workbook/recursion.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'3'
4− title/'Recursion'
2+title = "Recursion"
5− ==
3+weight = 3
6−;>
4+template = "doc.html"
7−
5++++
8−# Recursion
9−
10Recursion is a common pattern for solving certain problems in most programming
6Recursion is a common pattern for solving certain problems in most programming
11languages, and Hoon is no exception. One of the classically recursive problems
7languages, and Hoon is no exception. One of the classically recursive problems
12is that of factorial. The factorial of _n_ is the product of all positive
8is that of factorial. The factorial of _n_ is the product of all positive
learn/hoon/workbook/traffic-light.udon → learn/hoon/workbook/traffic-light.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'6'
4− title/'Traffic Light'
2+title = "Traffic Light"
5− ==
3+weight = 6
6−;>
4+template = "doc.html"
7−
5++++
8−# Traffic Light
9−
10Let's create a state machine in Hoon that models the functionality of a traffic
6Let's create a state machine in Hoon that models the functionality of a traffic
11light. Save the code below as `traffic.hoon` in your `/gen` directory.
7light. Save the code below as `traffic.hoon` in your `/gen` directory.
12
8
learn/nock.udon → learn/nock/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'3'
4− title/'Nock'
2+title = "Nock"
5− ==
3+weight = 3
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Nock
6++++
9−
10> Last major revision of this tutorial: 2016. Minor revisions were made in October 2018 to bring it in line with the new Nock 4K spec.
7> Last major revision of this tutorial: 2016. Minor revisions were made in October 2018 to bring it in line with the new Nock 4K spec.
11
8
12Nock is the low-level functional programming language that is interpreted by Vere. You don't need to know Nock to write Hoon, or even to work on most parts of Vere. But if you want to understand the foundations of Urbit and are mathematically-inclined, dive right in.
9Nock is the low-level functional programming language that is interpreted by Vere. You don't need to know Nock to write Hoon, or even to work on most parts of Vere. But if you want to understand the foundations of Urbit and are mathematically-inclined, dive right in.
learn/nock/definition.udon → learn/nock/definition.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'1'
5− title/'Nock Definition'
2+title = "Nock Definition"
6− ==
3+weight = 1
7−;>
4+template = "doc.html"
8−
5++++
9−# Nock Definition
10−
11Nock is a Turing-complete function that maps a cell
6Nock is a Turing-complete function that maps a cell
12`[subject formula]` to a noun `product`, where `subject` is the
7`[subject formula]` to a noun `product`, where `subject` is the
13data, `formula` is the code, and `product` is the result.
8data, `formula` is the code, and `product` is the result.
learn/nock/example.udon → learn/nock/example.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'3'
5− title/'Example'
2+title = "Example"
6− ==
3+weight = 3
7−;>
4+template = "doc.html"
8−
5++++
9−# Nock by hand
10−
11Some people write assembly language by hand. Some of them have a
6Some people write assembly language by hand. Some of them have a
12good reason to do so. But there's no good reason to write Nock by
7good reason to do so. But there's no good reason to write Nock by
13hand, ever.
8hand, ever.
learn/nock/explanation.udon → learn/nock/explanation.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'2'
5− title/'Explanation'
2+title = "Explanation"
6− ==
3+weight = 2
7−;>
4+template = "doc.html"
8−
5++++
9−# An explanation of Nock
10−
11To make Nock make sense, let's work through the spec line by line.
6To make Nock make sense, let's work through the spec line by line.
12First the data model:
7First the data model:
13
8
learn/nock/implementations.udon → learn/nock/implementations.mdrenamed+16−64
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'4'
4− title/'Implementations'
2+title = "Implementations"
5− ==
3+weight = 4
6−;>
4+template = "doc.html"
7−
5++++
8−# Nock Implementations
9−
10We use a C implementation for our Nock interpreter. But building a Nock interpreter in another language is a fun exercise. Check out our community Nock implementations, shown below our official C implementation. (Note: the community implementations were written for a slightly older version of Nock, Nock 5K. The current version is Nock 4K.):
6We use a C implementation for our Nock interpreter. But building a Nock interpreter in another language is a fun exercise. Check out our community Nock implementations, shown below our official C implementation. (Note: the community implementations were written for a slightly older version of Nock, Nock 5K. The current version is Nock 4K.):
11
7
12## Table of Contents
8## Table of Contents
@@ -33,11 +29,7 @@ We use a C implementation for our Nock interpreter. But building a Nock interpre
33
29
34- #### [Swift](#swift)
30- #### [Swift](#swift)
35
31
36−;=
37− ;h2
38− ;div(id "C"): C Implementation
32+## C Implementation
39− ==
40−==
41
33
42The actual production Nock interpreter. Note gotos for tail-call elimination,
34The actual production Nock interpreter. Note gotos for tail-call elimination,
43and manual reference counting. More about the C environment can be found
35and manual reference counting. More about the C environment can be found
@@ -286,11 +278,7 @@ _n_nock_on(u3_noun bus, u3_noun fol)
286}
278}
287```
279```
288
280
289−;=
290− ;h2
291− ;div(id "clojure"): Clojure
281+## Clojure
292− ==
293−==
294
282
295From [Matt Earnshaw](https://github.com/mattearnshaw/anock/blob/master/src/anock/core.clj):
283From [Matt Earnshaw](https://github.com/mattearnshaw/anock/blob/master/src/anock/core.clj):
296
284
@@ -409,11 +397,7 @@ From [Matt Earnshaw](https://github.com/mattearnshaw/anock/blob/master/src/anock
409 (apply* bracket nouns)))
397 (apply* bracket nouns)))
410```
398```
411
399
412−;=
400+## C#
413− ;h2
414− ;div(id "c-sharp"): C#
415− ==
416−==
417
401
418
402
419From [Julien Beasley](https://github.com/zass30/Nock5KCSharp):
403From [Julien Beasley](https://github.com/zass30/Nock5KCSharp):
@@ -886,11 +870,7 @@ namespace NockInterpreter
886}
870}
887```
871```
888
872
889−;=
890− ;h2
891− ;div(id "groovy"): Groovy
873+## Groovy
892− ==
893−==
894
874
895From [Kohányi Róbert](https://github.com/kohanyirobert/gnock/blob/master/gnock.groovy):
875From [Kohányi Róbert](https://github.com/kohanyirobert/gnock/blob/master/gnock.groovy):
896
876
@@ -1090,11 +1070,7 @@ def tar(def a, def r) {
1090}
1070}
1091```
1071```
1092
1072
1093−;=
1094− ;h2
1095− ;div(id "haskell"): Haskell
1073+## Haskell
1096− ==
1097−==
1098
1074
1099From [Steve Dee](https://github.com/mrdomino/hsnock/blob/master/Language/Nock5K/Spec.hs):
1075From [Steve Dee](https://github.com/mrdomino/hsnock/blob/master/Language/Nock5K/Spec.hs):
1100
1076
@@ -1200,11 +1176,7 @@ tar a = Left "*a"
1200==
1176==
1201```
1177```
1202
1178
1203−;=
1204− ;h2
1205− ;div(id "javascript"): JavaScript
1179+## JavaScript
1206− ==
1207−==
1208
1180
1209From [Joe Bryan](https://github.com/joemfb/nock.js/blob/master/nock.js):
1181From [Joe Bryan](https://github.com/joemfb/nock.js/blob/master/nock.js):
1210
1182
@@ -1563,11 +1535,7 @@ From [Joe Bryan](https://github.com/joemfb/nock.js/blob/master/nock.js):
1563}))
1535}))
1564```
1536```
1565
1537
1566−;=
1567− ;h2
1568− ;div(id "python"): Python
1538+## Python
1569− ==
1570−==
1571
1539
1572From [James Tauber](https://github.com/jtauber/pynock/blob/master/nock.py):
1540From [James Tauber](https://github.com/jtauber/pynock/blob/master/nock.py):
1573
1541
@@ -1656,11 +1624,7 @@ def tar(noun):
1656 return (nock((noun[0], noun[1][0])), nock((noun[0], noun[1][1])))
1624 return (nock((noun[0], noun[1][0])), nock((noun[0], noun[1][1])))
1657```
1625```
1658
1626
1659−;=
1660− ;h2
1661− ;div(id "ruby"): Ruby
1627+## Ruby
1662− ==
1663−==
1664
1628
1665From [T.J. Corcoran](https://github.com/TJamesCorcoran/nock/blob/master/nock.rb):
1629From [T.J. Corcoran](https://github.com/TJamesCorcoran/nock/blob/master/nock.rb):
1666
1630
@@ -1793,11 +1757,7 @@ def nock(arr)
1793end
1757end
1794```
1758```
1795
1759
1796−;=
1797− ;h2
1798− ;div(id "scala"): Scala
1760+## Scala
1799− ==
1800−==
1801
1761
1802From [Steve Randy Waldman](https://github.com/swaldman/nnnock/blob/master/src/main/scala/com/mchange/sc/v1/nnnock/package.scala):
1762From [Steve Randy Waldman](https://github.com/swaldman/nnnock/blob/master/src/main/scala/com/mchange/sc/v1/nnnock/package.scala):
1803
1763
@@ -1879,11 +1839,7 @@ package object nnnock {
1879 }
1839 }
1880```
1840```
1881
1841
1882−;=
1883− ;h2
1884− ;div(id "scheme"): Scheme
1842+## Scheme
1885− ==
1886−==
1887
1843
1888From [Kohányi Róbert](https://github.com/kohanyirobert/snock/blob/master/snock.ss):
1844From [Kohányi Róbert](https://github.com/kohanyirobert/snock/blob/master/snock.ss):
1889
1845
@@ -2005,11 +1961,7 @@ From [Kohányi Róbert](https://github.com/kohanyirobert/snock/blob/master/snock
2005 (else (raise 13)))))))))))))
1961 (else (raise 13)))))))))))))
2006```
1962```
2007
1963
2008−;=
2009− ;h2
2010− ;div(id "swift"): Swift
1964+## Swift
2011− ==
2012−==
2013
1965
2014```
1966```
2015import Foundation
1967import Foundation
learn/vere.udon → learn/vere/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'4'
4− title/'Vere'
2+title = "Vere"
5− ==
3+weight = 4
6−;>
4+sort_by = "weight"
7−
5+template = "sections/docs/chapters.html"
8−# Vere
6++++
9−
10The Nock runtime system, written in C.
7The Nock runtime system, written in C.
11
8
12Keep reading if you're planning to work on the Urbit interpreter, you're a
9Keep reading if you're planning to work on the Urbit interpreter, you're a
learn/vere/api.udon → learn/vere/api.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'4'
2+title = "API overview by prefix"
3− next/'true'
3+weight = 4
4− title/'API overview by prefix'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−## u3: API overview by prefix
9−
10Let's run through the `u3` modules one by one. All public
6Let's run through the `u3` modules one by one. All public
11functions are commented, but the comments may be cryptic.
7functions are commented, but the comments may be cryptic.
12
8
learn/vere/c.udon → learn/vere/c.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'2'
3− next/'true'
4− title/'C in Urbit'
2+title = "C in Urbit"
5− ==
3+weight = 4
6−;>
4+template = "doc.html"
7−
5++++
8−## c3: C in Urbit
9−
10Under `u3` is the simple `c3` layer, which is just how we write C
6Under `u3` is the simple `c3` layer, which is just how we write C
11in Urbit.
7in Urbit.
12
8
learn/vere/jetting.udon → learn/vere/jetting.mdrenamed+5−8
@@ -1,11 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'5'
3− title/'Writing Jets'
2+title = "Writing Jets"
4− ==
3+weight = 5
5−;>
4+template = "doc.html"
6−
5++++
7−# How to write a jet
8−
9A guide for new Urbit developers.
6A guide for new Urbit developers.
10
7
11Problem statement: coder A has written some Hoon and you, coder B, need to jet it.
8Problem statement: coder A has written some Hoon and you, coder B, need to jet it.
learn/vere/nouns.udon → learn/vere/nouns.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'3'
3− next/'true'
4− title/'Land of Nouns'
2+title = "Land of Nouns"
5− ==
3+weight = 3
6−;>
4+template = "doc.html"
7−
5++++
8−## u3: Land of nouns
9−
10The division between `c3` and `u3` is that you could theoretically
6The division between `c3` and `u3` is that you could theoretically
11imagine using `c3` as just a generic C environment. Anything to do
7imagine using `c3` as just a generic C environment. Anything to do
12with nouns is in `u3`.
8with nouns is in `u3`.
learn/vere/runtime.udon → learn/vere/runtime.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'1'
3− next/'true'
4− title/'C Runtime System'
2+title = "C Runtime System"
5− ==
3+weight = 1
6−;>
4+template = "doc.html"
7−
5++++
8−# C runtime system
9−
10The Urbit interpreter is built on a Nock runtime system written
6The Urbit interpreter is built on a Nock runtime system written
11in C, `u3`. This section is a relatively complete description.
7in C, `u3`. This section is a relatively complete description.
12
8
readme.mddeleted−83
@@ -1,83 +0,0 @@
1−# Urbit docs
2−
3−These are the urbit docs as they appear on [urbit.org](https://urbit.org/docs/).
4−
5−We've found it helps to have a clone of the docs on hand in case urbit.org
6−experiences high traffic. Follow these steps to get these into your ship:
7−
8−## Installation
9−
10−First, you'll need a running urbit. Follow our urbit.org [install
11−instructions](https://urbit.org/docs/getting-started/).
12−
13−### Local install
14−
15−In your urbit's Dojo:
16−
17− ~your-urbit:dojo> |mount /=home=
18−
19−You can now find your home desk at the path `/path/to/your-urbit/home/`.
20−
21−In Unix, clone this repo somewhere and copy in the `docs` files to your urbit's
22−mounted `%home` desk. You can run the following shell commands (*replacing your
23−urbit's home desk path as necessary*):
24−
25− $ git clone https://github.com/urbit/docs.git
26− $ cd ./docs/
27− $ cp -r ./docs* /path/to/your-urbit/home/web/
28−
29−Your Clay filesystem should acknowledge the newly added files.
30−
31−Lastly, make sure you're serving your home desk's `web` directory to the web by running the following Dojo command:
32−
33− ~your-urbit:dojo> |serve /=home=/web
34−
35−## Get started!
36−
37−And now your docs are live! View them at:
38−
39− http://localhost:8080/~~/docs
40−
41−> If you're running multiple ships locally, your port number will be `8081`,
42− `8082`, and so on. Check your Dojo output for the correct local port of
43− your examples urbit, or view these at `https://your-urbit.urbit.org` over DNS
44− instead for live-network ships. You can also replace `localhost` with the IP
45− of your instance, if you're running your urbit in the cloud.
46−
47−## Building the docs with |static
48−
49−**note** These instructions are for use with the the [static-site-dev branch](https://github.com/urbit/arvo/tree/static-site-dev)
50−of Arvo.
51−
52−Arvo comes with a built-in static site generator, which is very useful for
53−exporting sites and pages built with udon, sail, html, markdown or some
54−combination of these. Combinations like these docs that you're reading!
55−
56−In order to build the docs into a static site, do the following.
57−
58−Make sure that you've mounted your ship to your filesystem, but running the following
59−in your Dojo.
60−
61−> ~ship:dojo>|mount /===
62−
63−Then, copy these docs into the pier of a booted ship. It is very important that
64−copy the docs into the exact directory indicated in your pier.
65−
66−> $ cp -r . <ship-name>/home/web/static-site
67−
68−Now, run the static site generator on your urbit ship.
69−
70−> ~ship:dojo>|static
71−
72−You can now navigate to the output directory and run a webserver to view your built docs.
73−
74− $ cd <ship-name>/.urb/put/web/static-site
75− $ python -m SimpleHTTPServer
76−
77−Visit `localhost:8000` to see the built docs. Rerun `|static` to build docs and
78−see changes.
79−
80−## Contributing / Feedback
81−
82−Give us feedback on how we can make the docs better. Let us know about your ideas, requests, and/or problems and we'll
83−try and get back to you quickly. Issues and pull requests are more than welcome.
reference.udon → reference/_index.mdrenamed+6−8
@@ -1,11 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'5'
3− title/'Reference'
2+title = "Reference"
4− ==
3+weight = 5
5−;>
4+sort_by = "weight"
6−
5+template = "sections/docs/chapters.html"
7−# Reference
6++++
8−
9Various reference documents are stored here, particularly for Hoon, but also for other parts of the system.
7Various reference documents are stored here, particularly for Hoon, but also for other parts of the system.
10
8
11## [The Glossary](glossary)
9## [The Glossary](glossary)
reference/cheat-sheet.udon → reference/cheat-sheet.mdrenamed+7−9
@@ -1,19 +1,17 @@
1++++
1−:- :~ title/'Cheat sheet'
2+title = "Cheat sheet"
2− sort/'4'
3+weight = 4
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Hoon cheat sheet
7−
8##### `~rovnys-ricfer`
6##### `~rovnys-ricfer`
9
7
10_Original Fora post_ [here](https://urbit.org/fora/posts/~2017.9.18..22.31.06..24d5~).
8_Original Fora post_ [here](https://urbit.org/fora/posts/~2017.9.18..22.31.06..24d5~).
11
9
12−;br;
10+<br>
13
11
14[Download .pdf](https://storage.googleapis.com/media.urbit.org/docs/hoon-cheat-sheet--2017-12-12.pdf)
12[Download .pdf](https://storage.googleapis.com/media.urbit.org/docs/hoon-cheat-sheet--2017-12-12.pdf)
15
13
16−;br;
14+<br>
17
15
18We've found it's useful to have a quick reference of Hoon's syntax always at
16We've found it's useful to have a quick reference of Hoon's syntax always at
19hand. So above is a download link to a Hoon cheatsheet .pdf. It's missing a
17hand. So above is a download link to a Hoon cheatsheet .pdf. It's missing a
reference/glossary.udon → reference/glossary.mdrenamed+6−13
@@ -1,11 +1,8 @@
1++++
1−:- :~ title/'Glossary'
2+title = "Glossary"
2− sort/'3'
3+weight = 3
3− ==
4+template = "doc.html"
4−
5++++
5−;>
6−
7−# Glossary
8−
9Urbit is renowned for its exotic terminology. Here's a simple overview
6Urbit is renowned for its exotic terminology. Here's a simple overview
10from the strange words within.
7from the strange words within.
11
8
@@ -477,11 +474,7 @@ _More information can be found in the [hoon](/docs/learn/arvo/hoon) section._
477 expression source (a [hoon](#a-hoon), for example) and produces the product
474 expression source (a [hoon](#a-hoon), for example) and produces the product
478 type and nock formula. So [type hoon] is mapped to [type nock].
475 type and nock formula. So [type hoon] is mapped to [type nock].
479
476
480−;=
481− ;h3
482− ;div(id "a-hoon"): hoon
477+### hoon
483− ==
484−==
485
478
486A _hoon_ (lowercase) is the result of parsing a Hoon source expression into an
479A _hoon_ (lowercase) is the result of parsing a Hoon source expression into an
487AST node. These AST nodes are nouns, like all other Hoon data. Because every
480AST node. These AST nodes are nouns, like all other Hoon data. Because every
reference/hoon-expressions.udon → reference/hoon-expressions/_index.mdrenamed+6−8
@@ -1,11 +1,9 @@
1++++
1−:- :~ title/'Hoon Expressions'
2+title = "Hoon Expressions"
2− sort/'1'
3+weight = 1
3− ==
4+sort_by = "weight"
4−
5+template = "sections/docs/chapters.html"
5−;>
6++++
6−
7−# Hoon Expressions
8−
9Documentation for Hoon expressions.
7Documentation for Hoon expressions.
10
8
11## [Runes](runes)
9## [Runes](runes)
reference/hoon-expressions/advanced.udon → reference/hoon-expressions/advanced.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'5'
4− title/'Advanced Types'
2+title = "Advanced Types"
5− ==
3+weight = 5
6−;>
4+template = "doc.html"
7−
5++++
8−# Advanced types
9−
10The definition of `type` in the 'Basic Types' section is only a simplified version. The Hoon type system is simple, but not *that* simple.
6The definition of `type` in the 'Basic Types' section is only a simplified version. The Hoon type system is simple, but not *that* simple.
11
7
12The good news is that you can *skip this section*, at least when
8The good news is that you can *skip this section*, at least when
reference/hoon-expressions/basic.udon → reference/hoon-expressions/basic.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'4'
4− title/'Basic Types'
2+title = "Basic Types"
5− ==
3+weight = 4
6−;>
4+template = "doc.html"
7−
5++++
8−# Basic types
9−
10A type is usually understood to be a set of values. Hoon values are all nouns,
6A type is usually understood to be a set of values. Hoon values are all nouns,
11so a Hoon type is a set of nouns.
7so a Hoon type is a set of nouns.
12
8
reference/hoon-expressions/irregular.udon → reference/hoon-expressions/irregular.mdrenamed+5−8
@@ -1,11 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'7'
3− title/'Irregular forms'
2+title = "Irregular forms"
4− ==
3+weight = 7
5−;>
4+template = "doc.html"
6−
5++++
7−## Irregular forms, a compilation
8−
9##### `~palfun-foslup`
6##### `~palfun-foslup`
10
7
11##### Reading guide
8##### Reading guide
reference/hoon-expressions/limb.udon → reference/hoon-expressions/limb/_index.mdrenamed+6−9
@@ -1,12 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'3'
4− title/'Limbs and Wings'
5− ==
6−;>
7−
8−# Limbs and wings
2+title = "Limbs and wings"
9−
3+weight = 3
4+sort_by = "weight"
5+template = "sections/docs/chapters.html"
6++++
10One feature Hoon lacks: a context that isn't a first-class value. Hoon has no
7One feature Hoon lacks: a context that isn't a first-class value. Hoon has no
11concept of scope, environment, etc. An expression has exactly one data source,
8concept of scope, environment, etc. An expression has exactly one data source,
12the *subject*, a noun like any other.
9the *subject*, a noun like any other.
reference/hoon-expressions/limb/limb.udon → reference/hoon-expressions/limb/limb.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'1'
4− title/'Limbs'
2+title = "Limbs"
5− ==
3+weight = 1
6−;>
4+template = "doc.html"
7−
5++++
8−# Limb Expressions
9−
10A limb is an attribute of subject.
6A limb is an attribute of subject.
11
7
12### Produces
8### Produces
reference/hoon-expressions/limb/wing.udon → reference/hoon-expressions/limb/wing.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'2'
4− title/'Wings'
2+title = "Wings"
5− ==
3+weight = 2
6−;>
4+template = "doc.html"
7−
5++++
8−# Wing Expressions
9−
10`[%wing p=(list limb)]`
6`[%wing p=(list limb)]`
11
7
12A wing is a limb search path into the subject.
8A wing is a limb search path into the subject.
reference/hoon-expressions/rune.udon → reference/hoon-expressions/rune/_index.mdrenamed+6−8
@@ -1,11 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'2'
3− title/'Runes'
2+title = "Runes"
4− ==
3+weight = 2
5−;>
4+sort_by = "weight"
6−
5+template = "sections/docs/chapters.html"
7−# Runes
6++++
8−
9Runes are a way to form expressions in Hoon.
7Runes are a way to form expressions in Hoon.
10
8
11## Non-Rune Expressions
9## Non-Rune Expressions
reference/hoon-expressions/rune/bar.udon → reference/hoon-expressions/rune/bar.mdrenamed+16−64
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Cores"
3− sort/'7'
3+weight = 7
4− title/'Cores | ("bar")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Cores `|` "bar"
9−
10Core expressions produce cores. A core is a cell of `[battery payload]`.
6Core expressions produce cores. A core is a cell of `[battery payload]`.
11The `battery` is code, a battery of Nock formulas. The `payload` is the data
7The `battery` is code, a battery of Nock formulas. The `payload` is the data
12needed to run those formulas correctly.
8needed to run those formulas correctly.
@@ -17,11 +13,7 @@ with changes, which useful for recursion among other things:
17
13
18## Runes
14## Runes
19
15
20−;=
21− ;h3
22− ;div(id "barcab"): |_ "barcab"
16+### |_ "barcab"
23− ==
24−==
25
17
26Produce a *door* (a core with a sample).
18Produce a *door* (a core with a sample).
27
19
@@ -111,11 +103,7 @@ The `ne` door prints a digit in base 10, 16, 32 or 64:
111'c'
103'c'
112```
104```
113
105
114−;=
115− ;h3
116− ;div(id "barcen"): |% "barcen"
106+### |% "barcen"
117− ==
118−==
119
107
120Produce a core, `[battery payload]`.
108Produce a core, `[battery payload]`.
121
109
@@ -175,11 +163,7 @@ A trivial core:
175101
163101
176```
164```
177
165
178−;=
179− ;h3
180− ;div(id "barcol"): |: "barcol"
166+### "barcol"
181− ==
182−==
183
167
184Produce a gate with a custom sample.
168Produce a gate with a custom sample.
185
169
@@ -227,11 +211,7 @@ This is useful if you want a gate to have a sample of a particular type, but you
22712
21112
228```
212```
229
213
230−;=
231− ;h3
232− ;div(id "bardot"): |. "bardot"
214+### |. "bardot"
233− ==
234−==
235
215
236Produce a trap (a core with one arm `$`).
216Produce a trap (a core with one arm `$`).
237
217
@@ -299,11 +279,7 @@ trap, since it's a core with an `$` arm.
299
279
300> `$(...)` expands to `%=($ ...)` (["centis"](/docs/reference/hoon-expressions/rune/cen#centis)).
280> `$(...)` expands to `%=($ ...)` (["centis"](/docs/reference/hoon-expressions/rune/cen#centis)).
301
281
302−;=
303− ;h3
304− ;div(id "barhep"): |- "barhep"
282+### |- "barhep"
305− ==
306−==
307
283
308Produce a trap (a core with one arm `$`) and evaluate it.
284Produce a trap (a core with one arm `$`) and evaluate it.
309
285
@@ -359,11 +335,7 @@ The classic loop is a decrement:
35941
33541
360```
336```
361
337
362−;=
363− ;h3
364− ;div(id "barket"): |^ "barket"
338+### |^ "barket"
365− ==
366−==
367
339
368Produce a core whose battery includes a `$` arm and compute the latter.
340Produce a core whose battery includes a `$` arm and compute the latter.
369
341
@@ -422,11 +394,7 @@ A trivial example:
422100
394100
423```
395```
424
396
425−;=
426− ;h3
427− ;div(id "barsig"): |~ "barsig"
397+### |~ "barsig"
428− ==
429−==
430
398
431Produce an iron gate.
399Produce an iron gate.
432
400
@@ -465,11 +433,7 @@ See [this discussion of core variance models](/docs/reference/hoon-expressions/a
465<1|usl {a/@ $~}>
433<1|usl {a/@ $~}>
466```
434```
467
435
468−;=
469− ;h3
470− ;div(id "bartar"): |* "bartar"
436+### |* "bartar"
471− ==
472−==
473
437
474Produce a wet gate (one-armed core with sample).
438Produce a wet gate (one-armed core with sample).
475
439
@@ -535,11 +499,7 @@ Wet and dry gates in a nutshell:
535The dry gate does not preserve the type of `a` and `b`; the wet
499The dry gate does not preserve the type of `a` and `b`; the wet
536gate does.
500gate does.
537
501
538−;=
539− ;h3
540− ;div(id "bartis"): |= "bartis"
502+### |= "bartis"
541− ==
542−==
543
503
544Produce a gate (a one-armed core with a sample).
504Produce a gate (a one-armed core with a sample).
545
505
@@ -599,11 +559,7 @@ A slightly less trivial gate:
599430
559430
600```
560```
601
561
602−;=
603− ;h3
604− ;div(id "barvat"): |@ "barvat"
562+### |@ "barvat"
605− ==
606−==
607
563
608Produce a 'wet' core `[battery payload]`.
564Produce a 'wet' core `[battery payload]`.
609
565
@@ -636,11 +592,7 @@ A `|@` expression produces a 'wet' core whose payload is the expression's subjec
636
592
637The `|@` rune is just like the `|%` rune except that instead of producing a 'dry' core, it produces a 'wet' one. This allows for type polymorphism of its arms, using 'genericity'. See [Advanced types](/docs/reference/hoon-expressions/advanced).
593The `|@` rune is just like the `|%` rune except that instead of producing a 'dry' core, it produces a 'wet' one. This allows for type polymorphism of its arms, using 'genericity'. See [Advanced types](/docs/reference/hoon-expressions/advanced).
638
594
639−;=
640− ;h3
641− ;div(id "barwut"): |? "barwut"
595+### |? "barwut"
642− ==
643−==
644
596
645Produce a lead trap.
597Produce a lead trap.
646
598
reference/hoon-expressions/rune/buc.udon → reference/hoon-expressions/rune/buc.mdrenamed+15−59
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Structures"
3− sort/'12'
3+weight = 12
4− title/'Structures $ ("buc")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Structures $ ("buc")
9−
10The `$` family of runes is used for defining custom types. Strictly speaking,
6The `$` family of runes is used for defining custom types. Strictly speaking,
11these runes are used to produce 'structures'. A structure is a compile-time
7these runes are used to produce 'structures'. A structure is a compile-time
12value that at runtime can be converted to either an example value (sometimes
8value that at runtime can be converted to either an example value (sometimes
@@ -36,11 +32,7 @@ instance, `(map foo bar)` is a table from mold `foo` to mold
36`bar`. `map` is not a mold; it's a function that makes a mold.
32`bar`. `map` is not a mold; it's a function that makes a mold.
37Molds and mold builders are generally described together.
33Molds and mold builders are generally described together.
38
34
39−;=
40− ;h2
41− ;div(id "base"): Base Structures
35+## Base Structures
42− ==
43−==
44
36
45`[%base p=$@(?(%noun %cell %bean %null) [%atom p=aura])]`: trivial structures (types).
37`[%base p=$@(?(%noun %cell %bean %null) [%atom p=aura])]`: trivial structures (types).
46
38
@@ -59,11 +51,7 @@ Irregular: `*` makes `%noun`, `^` makes `%cell`, `?` makes
59
51
60## Runes
52## Runes
61
53
62−;=
63− ;h3
64− ;div(id "buccab"): $_ "buccab"
54+### $_ "buccab"
65− ==
66−==
67
55
68`[%bscb p=hoon]`: structure that normalizes to an example.
56`[%bscb p=hoon]`: structure that normalizes to an example.
69
57
@@ -99,11 +87,7 @@ and produces its *example* instead.
99[%foobaz %moobaz]
87[%foobaz %moobaz]
100```
88```
101
89
102−;=
103− ;h3
104− ;div(id "buccen"): $% "buccen"
90+### $% "buccen"
105− ==
106−==
107
91
108`[%bscn p=(list spec)]`: structure which recognizes a union tagged by head atom.
92`[%bscn p=(list spec)]`: structure which recognizes a union tagged by head atom.
109
93
@@ -134,11 +118,7 @@ be an infinite loop!
134[%foo p=0 q=0]~
118[%foo p=0 q=0]~
135```
119```
136
120
137−;=
138− ;h3
139− ;div(id "buccol"): $: "buccol"
121+### "buccol"
140− ==
141−==
142
122
143`[%bscl p=(list spec)]`: form a cell type.
123`[%bscl p=(list spec)]`: form a cell type.
144
124
@@ -172,11 +152,7 @@ Irregular (structure mode): `[a b c]` is `$:(a b c)`.
172[p=0 q=%$]
152[p=0 q=%$]
173```
153```
174
154
175−;=
176− ;h3
177− ;div(id "buchep"): $- "buchep"
155+### $- "buchep"
178− ==
179−==
180
156
181`[%bshp p=spec q=spec]`: structure that normalizes to an example gate.
157`[%bshp p=spec q=spec]`: structure that normalizes to an example gate.
182
158
@@ -204,11 +180,7 @@ Since a `$-` reduces to a [`$_`](#buccab), it is not useful for normalizing, jus
204%baz
180%baz
205```
181```
206
182
207−;=
208− ;h3
209− ;div(id "bucket"): $^ "bucket"
183+### $^ "bucket"
210− ==
211−==
212
184
213`[%bskt p=spec q=spec]`: structure which normalizes a union tagged by head depth (cell).
185`[%bskt p=spec q=spec]`: structure which normalizes a union tagged by head depth (cell).
214
186
@@ -242,11 +214,7 @@ Regular: *2-fixed*.
242[%baz p=0]
214[%baz p=0]
243```
215```
244
216
245−;=
246− ;h3
247− ;div(id "bucsig"): $~ "bucsig"
217+### $~ "bucsig"
248− ==
249−==
250
218
251`[%bssg p=hoon q=spec]`: define a custom type default value
219`[%bssg p=hoon q=spec]`: define a custom type default value
252
220
@@ -309,11 +277,7 @@ Using `$~`:
309%default-value
277%default-value
310```
278```
311
279
312−;=
313− ;h3
314− ;div(id "bucvat"): $@ "bucvat"
280+### $@ "bucvat"
315− ==
316−==
317
281
318`[%bsvt p=spec q=spec]`: structure which normalizes a union tagged by head depth (atom).
282`[%bsvt p=spec q=spec]`: structure which normalizes a union tagged by head depth (atom).
319
283
@@ -351,11 +315,7 @@ Example:
351```
315```
352
316
353
317
354−;=
355− ;h3
356− ;div(id "buctis"): $= "buctis"
318+### $= "buctis"
357− ==
358−==
359
319
360`[%bsts p=skin q=spec]`: structure which wraps a face around another structure.
320`[%bsts p=skin q=spec]`: structure which wraps a face around another structure.
361
321
@@ -390,11 +350,7 @@ p=%foo
390p=%foo
350p=%foo
391```
351```
392
352
393−;=
394− ;h3
395− ;div(id "bucwut"): $? "bucwut"
353+### $? "bucwut"
396− ==
397−==
398
354
399`[%bswt p=(list spec)]`: form a type from a union of other types.
355`[%bswt p=(list spec)]`: form a type from a union of other types.
400
356
reference/hoon-expressions/rune/cen.udon → reference/hoon-expressions/rune/cen.mdrenamed+14−54
@@ -1,23 +1,15 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Calls"
3− sort/'10'
3+weight = 10
4− title/'Calls % ("cen")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Calls `%` ("cen")
9−
10The `%` family of runes is used for making 'function calls' in Hoon. To be more precise, these runes evaluate the `$` arm in cores, usually after modifying the sample. (The default sample is replaced with the input values given in the call.)
6The `%` family of runes is used for making 'function calls' in Hoon. To be more precise, these runes evaluate the `$` arm in cores, usually after modifying the sample. (The default sample is replaced with the input values given in the call.)
11
7
12These runes reduce to the `%=` rune
8These runes reduce to the `%=` rune
13
9
14## Runes
10## Runes
15
11
16−;=
17− ;h3
18− ;div(id "cencab"): %_ "cencab"
12+### %_ "cencab"
19− ==
20−==
21
13
22Resolve a wing with changes, preserving type.
14Resolve a wing with changes, preserving type.
23
15
@@ -80,11 +72,7 @@ See [how wings are resolved](/docs/reference/hoon-expressions/limb/wing).
80! nest-fail
72! nest-fail
81```
73```
82
74
83−;=
84− ;h3
85− ;div(id "cencol"): %: "cencol"
75+### "cencol"
86− ==
87−==
88
76
89Call a gate with many arguments.
77Call a gate with many arguments.
90
78
@@ -138,11 +126,7 @@ When `%:` is used in tall-form syntax, the series of expressions after `p` must
13899
12699
139```
127```
140
128
141−;=
142− ;h3
143− ;div(id "cendot"): %. "cendot"
129+### %. "cendot"
144− ==
145−==
146
130
147Call a gate (function), inverted.
131Call a gate (function), inverted.
148
132
@@ -183,11 +167,7 @@ The `%.` rune is for evaluating the `$` arm of a gate, i.e., calling a function.
1836
1676
184```
168```
185
169
186−;=
187− ;h3
188− ;div(id "cenhep"): %- "cenhep"
170+### %- "cenhep"
189− ==
190−==
191
171
192Call a gate (function).
172Call a gate (function).
193
173
@@ -236,11 +216,7 @@ This rune is for evaluating the `$` arm of a gate, i.e., calling a gate as a fun
2366
2166
237```
217```
238
218
239−;=
240− ;h3
241− ;div(id "cenket"): %^ "cenket"
219+### %^ "cenket"
242− ==
243−==
244
220
245Call gate with triple sample.
221Call gate with triple sample.
246
222
@@ -274,11 +250,7 @@ AST:
2746
2506
275```
251```
276
252
277−;=
278− ;h3
279− ;div(id "cenlus"): %+ "cenlus"
253+### %+ "cenlus"
280− ==
281−==
282
254
283Call gate with a cell sample.
255Call gate with a cell sample.
284
256
@@ -315,11 +287,7 @@ A `%+` expression is for calling a gate with a cell sample. `a` is the gate to
3156
2876
316```
288```
317
289
318−;=
319− ;h3
320− ;div(id "censig"): %~ "censig"
290+### %~ "censig"
321− ==
322−==
323
291
324Evaluate an arm in a door.
292Evaluate an arm in a door.
325
293
@@ -371,11 +339,7 @@ See also [`|_`](/docs/reference/hoon-expressions/rune/bar#barcab).
37120
33920
372```
340```
373
341
374−;=
375− ;h3
376− ;div(id "centar"): %* "centar"
342+### %* "centar"
377− ==
378−==
379
343
380Evaluate an expression, then resolve a wing with changes.
344Evaluate an expression, then resolve a wing with changes.
381
345
@@ -438,11 +402,7 @@ A `%*` expression evaluates some arbitrary Hoon expression, `b`, and then resolv
438[a=1 b=7 c=10]
402[a=1 b=7 c=10]
439```
403```
440
404
441−;=
442− ;h3
443− ;div(id "centis"): %= "centis"
405+### %= "centis"
444− ==
445−==
446
406
447Resolve a wing with changes.
407Resolve a wing with changes.
448
408
reference/hoon-expressions/rune/col.udon → reference/hoon-expressions/rune/col.mdrenamed+12−44
@@ -1,21 +1,13 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Cells"
3− sort/'9'
3+weight = 9
4− title/'Cells : ("col")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Cells `:` ("col")
9−
10The `:` ("col") expressions are used to produce cells, which are pairs of values. E.g., `:-(p q)` produces the cell `[p q]`. All `:` runes reduce to `:-`.
6The `:` ("col") expressions are used to produce cells, which are pairs of values. E.g., `:-(p q)` produces the cell `[p q]`. All `:` runes reduce to `:-`.
11
7
12## Runes
8## Runes
13
9
14−;=
15− ;h3
16− ;div(id "colcab"): :_ "colcab"
10+### :_ "colcab"
17− ==
18−==
19
11
20`[%clcb p=hoon q=hoon]`; construct a cell, inverted.
12`[%clcb p=hoon q=hoon]`; construct a cell, inverted.
21
13
@@ -36,11 +28,7 @@ Regular: *2-fixed*.
36[2 1]
28[2 1]
37```
29```
38
30
39−;=
40− ;h3
41− ;div(id "colcol"): :: "colcol"
31+### "colcol"
42− ==
43−==
44
32
45Code comment
33Code comment
46
34
@@ -59,11 +47,7 @@ Code comment
59 :: to the input
47 :: to the input
60```
48```
61
49
62−;=
63− ;h3
64− ;div(id "colhep"): :- "colhep"
50+### :- "colhep"
65− ==
66−==
67
51
68`[%clhp p=hoon q=hoon]`: construct a cell (2-tuple).
52`[%clhp p=hoon q=hoon]`: construct a cell (2-tuple).
69
53
@@ -111,11 +95,7 @@ compiler does), `[a b]` is the same as `:-(a b)`.
111[~ 1]
95[~ 1]
112```
96```
113
97
114−;=
115− ;h3
116− ;div(id "colket"): :^ "colket"
98+### :^ "colket"
117− ==
118−==
119
99
120`[%clkt p=hoon q=hoon r=hoon s=hoon]`: construct a quadruple (4-tuple).
100`[%clkt p=hoon q=hoon r=hoon s=hoon]`: construct a quadruple (4-tuple).
121
101
@@ -142,11 +122,7 @@ Regular: *4-fixed*.
142[5 6 7 8]
122[5 6 7 8]
143```
123```
144
124
145−;=
146− ;h3
147− ;div(id "collus"): :+ "collus"
125+### :+ "collus"
148− ==
149−==
150
126
151
127
152`[%clls p=hoon q=hoon r=hoon]`: construct a triple (3-tuple).
128`[%clls p=hoon q=hoon r=hoon]`: construct a triple (3-tuple).
@@ -173,11 +149,7 @@ Regular: *3-fixed*.
173[%a ~ 'b']
149[%a ~ 'b']
174```
150```
175
151
176−;=
177− ;h3
178− ;div(id "cosig"): :~ "colsig"
152+### :~ "colsig"
179− ==
180−==
181
153
182`[%clsg p=(list hoon)]`: construct a null-terminated list.
154`[%clsg p=(list hoon)]`: construct a null-terminated list.
183
155
@@ -221,11 +193,7 @@ Regular: *running*.
221[5 3 4 2 1 ~]
193[5 3 4 2 1 ~]
222```
194```
223
195
224−;=
225− ;h3
226− ;div(id "coltar"): :* "coltar"
196+### :* "coltar"
227− ==
228−==
229
197
230`[%cltr p=(list hoon)]`: construct an n-tuple.
198`[%cltr p=(list hoon)]`: construct an n-tuple.
231
199
reference/hoon-expressions/rune/constants.udon → reference/hoon-expressions/rune/constants.mdrenamed+9−29
@@ -1,23 +1,15 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Atoms and strings"
3− sort/'1'
3+weight = 1
4− title/'Atoms and strings'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Atoms and strings
9−
10The simplest expressions in every language are constants:
6The simplest expressions in every language are constants:
11atoms, strings, paths. (Strings and paths aren't all constants per
7atoms, strings, paths. (Strings and paths aren't all constants per
12se, because they have interpolations.)
8se, because they have interpolations.)
13
9
14## Expressions
10## Expressions
15
11
16−;=
17− ;h3
18− ;div(id "cold"): `:_ "Cold Atom"`
12+### `:_ "Cold Atom"`
19− ==
20−==
21
13
22`[%rock p=term q=@]`; a constant, cold atom.
14`[%rock p=term q=@]`; a constant, cold atom.
23
15
@@ -52,11 +44,7 @@ We can see the contrast with warm atoms by using the compiler parser function, `
52[%rock p=%ud q=12]
44[%rock p=%ud q=12]
53```
45```
54
46
55−;=
56− ;h3
57− ;div(id "paths"): `:_ "Paths"`
47+### `:_ "Paths"`
58− ==
59−==
60
48
61`[%path p=(list (each @ta hoon))]`: path with interpolation.
49`[%path p=(list (each @ta hoon))]`: path with interpolation.
62
50
@@ -85,11 +73,7 @@ Irregular: `/this/is/a/path`.
85~
73~
86```
74```
87
75
88−;=
89− ;h3
90− ;div(id "strings"): `:_ "Strings with Interpolation"`
76+### `:_ "Strings with Interpolation"`
91− ==
92−==
93
77
94`[%knit p=(list (each @t hoon))]`: text string with interpolation.
78`[%knit p=(list (each @t hoon))]`: text string with interpolation.
95
79
@@ -137,11 +121,7 @@ String with interpolated prettyprinting:
137"hello, %world."
121"hello, %world."
138```
122```
139
123
140−;=
141− ;h3
142− ;div(id "warm"): `:_ "Warm Atoms"`
124+### `:_ "Warm Atoms"`
143− ==
144−==
145
125
146`[%sand p=term q=@]`; a constant, warm atom.
126`[%sand p=term q=@]`; a constant, warm atom.
147
127
reference/hoon-expressions/rune/dot.udon → reference/hoon-expressions/rune/dot.mdrenamed+10−34
@@ -1,21 +1,13 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Nock"
3− sort/'3'
3+weight = 3
4− title/'Nock . ("dot")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Nock `.` ("dot")
9−
10Anything Nock can do, Hoon can do also. These runes are used for carrying out Nock operations in Hoon.
6Anything Nock can do, Hoon can do also. These runes are used for carrying out Nock operations in Hoon.
11
7
12## Runes
8## Runes
13
9
14−;=
15− ;h3
16− ;div(id "dotket"): .^ "dotket"
10+### .^ "dotket"
17− ==
18−==
19
11
20`[%dtkt p=spec q=hoon]`: load from the Arvo namespace with a fake Nock instruction: 'Nock `12`''.
12`[%dtkt p=spec q=hoon]`: load from the Arvo namespace with a fake Nock instruction: 'Nock `12`''.
21
13
@@ -90,11 +82,7 @@ You can modify the time of the file listing quite simply and ask for a listing f
90
82
91`our` is the value for your ship's name.
83`our` is the value for your ship's name.
92
84
93−;=
94− ;h3
95− ;div(id "dotlus"): .+ "dotlus"
85+### .+ "dotlus"
96− ==
97−==
98
86
99`[%dtls p=hoon]`: increment an atom with Nock `4`.
87`[%dtls p=hoon]`: increment an atom with Nock `4`.
100
88
@@ -124,11 +112,7 @@ Irregular: `+(6)` is `.+(6)`.
124nest-fail
112nest-fail
125```
113```
126
114
127−;=
128− ;h3
129− ;div(id "dottar"): .* "dottar"
115+### .* "dottar"
130− ==
131−==
132
116
133`[%dttr p=hoon q=hoon]`: evaluate with Nock `2`.
117`[%dttr p=hoon q=hoon]`: evaluate with Nock `2`.
134
118
@@ -171,11 +155,7 @@ therefore possible to use Hoon as a typeless language.
1711
1551
172```
156```
173
157
174−;=
175− ;h3
176− ;div(id "dottis"): .= "dottis"
158+### .= "dottis"
177− ==
178−==
179
159
180`[%dtts p=hoon q=hoon]`: test for equality with Nock `5`.
160`[%dtts p=hoon q=hoon]`: test for equality with Nock `5`.
181
161
@@ -219,11 +199,7 @@ is a common cause of performance bugs.)
219nest-fail
199nest-fail
220```
200```
221
201
222−;=
223− ;h3
224− ;div(id "dotwut"): .? "dotwut"
202+### .? "dotwut"
225− ==
226−==
227
203
228`[%dtwt p=hoon]`: test for cell or atom with Nock `3`.
204`[%dtwt p=hoon]`: test for cell or atom with Nock `3`.
229
205
reference/hoon-expressions/rune/ket.udon → reference/hoon-expressions/rune/ket.mdrenamed+15−59
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Casts"
3− sort/'11'
3+weight = 11
4− title/'Casts ^ ("ket")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Casts `^` ("ket")
9−
10[`^-` ("kethep")](#kethep), [`^+` ("ketlus")](#ketlus), and
6[`^-` ("kethep")](#kethep), [`^+` ("ketlus")](#ketlus), and
11[`^=` ("kettis")](#kettis) let us adjust types without violating type
7[`^=` ("kettis")](#kettis) let us adjust types without violating type
12constraints.
8constraints.
@@ -16,11 +12,7 @@ it never allows invalid nests, it sometimes rejects valid nests.
16
12
17## Runes
13## Runes
18
14
19−;=
20− ;h3
21− ;div(id "ketbar"): ^| "ketbar"
15+### ^| "ketbar"
22− ==
23−==
24
16
25`[%ktbr p=hoon]`: convert a gold core to an iron core (contravariant).
17`[%ktbr p=hoon]`: convert a gold core to an iron core (contravariant).
26
18
@@ -56,11 +48,7 @@ The prettyprinter shows the core metal (`.` gold, `|` iron):
56<1|gcq [@ @n <250.yur 41.wda 374.hzt 100.kzl 1.ypj %151>]>
48<1|gcq [@ @n <250.yur 41.wda 374.hzt 100.kzl 1.ypj %151>]>
57```
49```
58
50
59−;=
60− ;h3
61− ;div(id "ketcol"): ^: "ketcol"
51+### "ketcol"
62− ==
63−==
64
52
65`[%ktcl p=spec]`: 'factory' gate for type `p`.
53`[%ktcl p=spec]`: 'factory' gate for type `p`.
66
54
@@ -96,11 +84,7 @@ In older versions of Hoon, a 'mold' was an idempotent gate that was guaranteed t
96ford: %ride failed to execute:
84ford: %ride failed to execute:
97```
85```
98
86
99−;=
100− ;h3
101− ;div(id "ketdot"): ^. "ketdot"
87+### ^. "ketdot"
102− ==
103−==
104
88
105`[%ktdt p=hoon q=hoon]`: typecast on value produced by passing `q` to `p`.
89`[%ktdt p=hoon q=hoon]`: typecast on value produced by passing `q` to `p`.
106
90
@@ -141,11 +125,7 @@ mint-vain
141~[22 33]
125~[22 33]
142```
126```
143
127
144−;=
145− ;h3
146− ;div(id "kethep"): ^- "kethep"
128+### ^- "kethep"
147− ==
148−==
149
129
150`[%kthp p=spec q=hoon]`: typecast by explicit type label.
130`[%kthp p=spec q=hoon]`: typecast by explicit type label.
151
131
@@ -189,11 +169,7 @@ infinite loop in the compiler).
189[~ ~.a]
169[~ ~.a]
190```
170```
191
171
192−;=
193− ;h3
194− ;div(id "ketlus"): ^+ "ketlus"
172+### ^+ "ketlus"
195− ==
196−==
197
173
198`[%ktls p=hoon q=hoon]`: typecast by inferred type.
174`[%ktls p=hoon q=hoon]`: typecast by inferred type.
199
175
@@ -212,11 +188,7 @@ Regular: *2-fixed*.
212'a'
188'a'
213```
189```
214
190
215−;=
216− ;h3
217− ;div(id "ketpad"): ^& "ketpad"
191+### ^& "ketpad"
218− ==
219−==
220
192
221`[%ktpd p=hoon]`: convert a core to a zinc core (covariant).
193`[%ktpd p=hoon]`: convert a core to a zinc core (covariant).
222
194
@@ -269,11 +241,7 @@ ford: %slim failed:
269ford: %ride failed to compute type:
241ford: %ride failed to compute type:
270```
242```
271
243
272−;=
273− ;h3
274− ;div(id "ketsig"): ^~ "ketsig"
244+### ^~ "ketsig"
275− ==
276−==
277
245
278`[%ktsg p=hoon]`: fold constant at compile time.
246`[%ktsg p=hoon]`: fold constant at compile time.
279
247
@@ -295,11 +263,7 @@ Regular: *1-fixed*.
295[%1 p=42]
263[%1 p=42]
296```
264```
297
265
298−;=
299− ;h3
300− ;div(id "kettar"): ^* "kettar"
266+### ^* "kettar"
301− ==
302−==
303
267
304`[%kttr p=spec]`: Produce example type value.
268`[%kttr p=spec]`: Produce example type value.
305
269
@@ -350,11 +314,7 @@ Irregular:
350""
314""
351```
315```
352
316
353−;=
354− ;h3
355− ;div(id "kettis"): ^= "kettis"
317+### ^= "kettis"
356− ==
357−==
358
318
359`[%ktts p=skin q=hoon]`: Bind name to a value.
319`[%ktts p=skin q=hoon]`: Bind name to a value.
360
320
@@ -390,11 +350,7 @@ a=1
390[b=1 c=2 d=[x=3 y4]]
350[b=1 c=2 d=[x=3 y4]]
391```
351```
392
352
393−;=
394− ;h3
395− ;div(id "ketwut"): ^? "ketwut"
353+### ^? "ketwut"
396− ==
397−==
398
354
399`[%ktwt p=hoon]`: convert any core to a lead core (bivariant).
355`[%ktwt p=hoon]`: convert any core to a lead core (bivariant).
400
356
reference/hoon-expressions/rune/lus.udon → reference/hoon-expressions/rune/lus.mdrenamed+9−29
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Arms"
3− sort/'8'
3+weight = 8
4− title/'Arms + ("lus")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Arms `+` "lus"
9−
10A core is a cell of `[battery payload]`. The battery is made of one or more arms, each of which is a computation on its parent core.
6A core is a cell of `[battery payload]`. The battery is made of one or more arms, each of which is a computation on its parent core.
11
7
12Arm runes are used to define arms in a core, and thus can only be used from within an expression that produces a multi-arm core. That means arm runes cannot be used to mark the beginning of a first-class expression -- there is no such thing in Hoon as an arm without a core.
8Arm runes are used to define arms in a core, and thus can only be used from within an expression that produces a multi-arm core. That means arm runes cannot be used to mark the beginning of a first-class expression -- there is no such thing in Hoon as an arm without a core.
@@ -15,11 +11,7 @@ There are various arm runes you can use to produce different kinds of arms. Nor
15
11
16## Runes
12## Runes
17
13
18−;=
19− ;h3
20− ;div(id "lusbar"): +| "lusbar"
14+### +| "lusbar"
21− ==
22−==
23
15
24Chapter label.
16Chapter label.
25
17
@@ -67,11 +59,7 @@ Notice that `p.q` has the label `%numbers`. Contrast with:
67]
59]
68```
60```
69
61
70−;=
71− ;h3
72− ;div(id "lusbuc"): +$ "lusbuc"
62+### +$ "lusbuc"
73− ==
74−==
75
63
76Produce a structure arm (type definition).
64Produce a structure arm (type definition).
77
65
@@ -109,11 +97,7 @@ nest-fail
109[%.y 22]
97[%.y 22]
110```
98```
111
99
112−;=
113− ;h3
114− ;div(id "luslus"): ++ "luslus"
100+### ++ "luslus"
115− ==
116−==
117
101
118Produce a normal arm.
102Produce a normal arm.
119
103
@@ -148,11 +132,7 @@ Any Hoon expression, `q`, may be used to define the arm computation.
14812
13212
149```
133```
150
134
151−;=
152− ;h3
153− ;div(id "lustar"): +* "lustar"
135+### +* "lustar"
154− ==
155−==
156
136
157
137
158Produce a type constructor arm.
138Produce a type constructor arm.
reference/hoon-expressions/rune/mic.udon → reference/hoon-expressions/rune/mic.mdrenamed+12−44
@@ -1,21 +1,13 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'13'
4− title/'Make ; ("mic")'
2+title = "Make"
5− ==
3+weight = 13
6−;>
4+template = "doc.html"
7−
5++++
8−# Make `;` ("mic")
9−
10Miscellaneous useful macros.
6Miscellaneous useful macros.
11
7
12## Runes
8## Runes
13
9
14−;=
15− ;h3
16− ;div(id "miccol"): ;: "miccol"
10+### "miccol"
17− ==
18−==
19
11
20`[%mccl p=hoon q=(list hoon)]`: call a binary function as an n-ary function.
12`[%mccl p=hoon q=(list hoon)]`: call a binary function as an n-ary function.
21
13
@@ -65,11 +57,7 @@ Irregular: `:(add a b c)` is `;:(add a b c)`.
6512
5712
66```
58```
67
59
68−;=
69− ;h3
70− ;div(id "miclus"): ;+ "miclus"
60+### ;+ "miclus"
71− ==
72−==
73
61
74make a single XML node (Sail)
62make a single XML node (Sail)
75
63
@@ -128,11 +116,7 @@ One interesting thing about Sail is that it allows you to use complex Hoon expre
128]
116]
129```
117```
130
118
131−;=
132− ;h3
133− ;div(id "micmic"): ;; "micmic"
119+### ;; "micmic"
134− ==
135−==
136
120
137`[%mcmc p=spec q=hoon]`: normalize with a mold, asserting fixpoint.
121`[%mcmc p=spec q=hoon]`: normalize with a mold, asserting fixpoint.
138
122
@@ -174,11 +158,7 @@ Fails because not a fixpoint:
174! exit
158! exit
175```
159```
176
160
177−;=
178− ;h3
179− ;div(id "micfas"): ;/ "micfas"
161+### ;/ "micfas"
180− ==
181−==
182
162
183`[%mcnt p=hoon]`: tape as XML element.
163`[%mcnt p=hoon]`: tape as XML element.
184
164
@@ -195,11 +175,7 @@ Fails because not a fixpoint:
195[[%~. [%~. "foo] ~] ~]
175[[%~. [%~. "foo] ~] ~]
196```
176```
197
177
198−;=
199− ;h3
200− ;div(id "micsig"): ;~ "micsig"
178+### ;~ "micsig"
201− ==
202−==
203
179
204`[%mcsg p=hoon q=(list hoon)]`: glue a pipeline together with a
180`[%mcsg p=hoon q=(list hoon)]`: glue a pipeline together with a
205product-sample adapter.
181product-sample adapter.
@@ -297,11 +273,7 @@ But for multiple gates, we need it to connect the pipeline:
297"96acd"
273"96acd"
298```
274```
299
275
300−;=
301− ;h3
302− ;div(id "mictar"): ;* "mictar"
276+### ;* "mictar"
303− ==
304−==
305
277
306make a list of XML nodes from complex Hoon expression (Sail)
278make a list of XML nodes from complex Hoon expression (Sail)
307
279
@@ -353,11 +325,7 @@ If you need a complex Hoon expression to produce a `marl`, use the `;*` rune. O
353]
325]
354```
326```
355
327
356−;=
357− ;h3
358− ;div(id "mictis"): ;= "mictis"
328+### ;= "mictis"
359− ==
360−==
361
329
362make a list of XML nodes (Sail)
330make a list of XML nodes (Sail)
363
331
reference/hoon-expressions/rune/sig.udon → reference/hoon-expressions/rune/sig.mdrenamed+17−69
@@ -1,21 +1,13 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Hints"
3− sort/'14'
3+weight = 14
4− title/'Hints ~ ("sig")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Hints `~` ("sig")
9−
10Runes that use Nock `11` to pass non-semantic info to the interpreter.
6Runes that use Nock `11` to pass non-semantic info to the interpreter.
11
7
12## Runes
8## Runes
13
9
14−;=
15− ;h3
16− ;div(id "sigban"): ~> "sigban"
10+### ~> "sigban"
17− ==
18−==
19
11
20`[%sgbn p=$@(term [p=term q=hoon]) q=hoon]`: raw hint, applied
12`[%sgbn p=$@(term [p=term q=hoon]) q=hoon]`: raw hint, applied
21to computation.
13to computation.
@@ -50,11 +42,7 @@ Running the compiler:
50[%10 p=[p=97 q=[%4 p=[%1 p=2]]] q=[%1 p=42]]
42[%10 p=[p=97 q=[%4 p=[%1 p=2]]] q=[%1 p=42]]
51```
43```
52
44
53−;=
54− ;h3
55− ;div(id "sigbar"): ~| "sigbar"
45+### ~| "sigbar"
56− ==
57−==
58
46
59
47
60`[%sgbr p=hoon q=hoon]`: tracing printf.
48`[%sgbr p=hoon q=hoon]`: tracing printf.
@@ -84,11 +72,7 @@ ford: build failed
84ford: build failed
72ford: build failed
85```
73```
86
74
87−;=
88− ;h3
89− ;div(id "sigbuc"): ~$ "sigbuc"
75+### ~$ "sigbuc"
90− ==
91−==
92
76
93`[%sgbs p=term q=hoon]`: profiling hit counter.
77`[%sgbs p=term q=hoon]`: profiling hit counter.
94
78
@@ -111,11 +95,7 @@ Regular: *2-fixed*.
1113
953
112```
96```
113
97
114−;=
115− ;h3
116− ;div(id "sigcab"): ~_ "sigcab"
98+### ~_ "sigcab"
117− ==
118−==
119
99
120`[%sgcb p=hoon q=hoon]`: user-formatted tracing printf.
100`[%sgcb p=hoon q=hoon]`: user-formatted tracing printf.
121
101
@@ -144,11 +124,7 @@ ford: build failed
144ford: build failed
124ford: build failed
145```
125```
146
126
147−;=
148− ;h3
149− ;div(id "cigcen"): ~% "sigcen"
127+### ~% "sigcen"
150− ==
151−==
152
128
153`[%sgcn p=term q=wing r=(list [term hoon]) s=hoon]`: jet registration.
129`[%sgcn p=term q=wing r=(list [term hoon]) s=hoon]`: jet registration.
154
130
@@ -238,11 +214,7 @@ Here we label the entire `++aesc` core for optimization. You can see the
238jet in `jets/e/aesc.c`.
214jet in `jets/e/aesc.c`.
239
215
240
216
241−;=
242− ;h3
243− ;div(id "sigled"): ~< "sigled"
217+### ~< "sigled"
244− ==
245−==
246
218
247
219
248`[%sgld p=$@(term [p=term q=hoon]) q=hoon]`: raw hint, applied to
220`[%sgld p=$@(term [p=term q=hoon]) q=hoon]`: raw hint, applied to
@@ -272,11 +244,7 @@ rather about its product.
272[%7 p=[%1 p=42] q=[%10 p=[p=97 q=[%4 p=[%0 p=1]]] q=[%0 p=1]]]
244[%7 p=[%1 p=42] q=[%10 p=[p=97 q=[%4 p=[%0 p=1]]] q=[%0 p=1]]]
273```
245```
274
246
275−;=
276− ;h3
277− ;div(id "siglus"): ~+ "siglus"
247+### ~+ "siglus"
278− ==
279−==
280
248
281`[%sgls p=hoon]`: cache a computation.
249`[%sgls p=hoon]`: cache a computation.
282
250
@@ -316,11 +284,7 @@ This should work fine:
316573.147.844.013.817.084.101
284573.147.844.013.817.084.101
317```
285```
318
286
319−;=
320− ;h3
321− ;div(id "sigfas"): ~/ "signet"
287+### ~/ "signet"
322− ==
323−==
324
288
325`[%sgnt p=term q=hoon]`: jet registration for gate with
289`[%sgnt p=term q=hoon]`: jet registration for gate with
326registered context.
290registered context.
@@ -347,11 +311,7 @@ From the kernel:
347 $(a (dec a), b +(b))
311 $(a (dec a), b +(b))
348```
312```
349
313
350−;=
351− ;h3
352− ;div(id "sigpad"): ~& "sigpad"
314+### ~& "sigpad"
353− ==
354−==
355
315
356`[%sgpd p=hoon q=hoon]`: debugging printf.
316`[%sgpd p=hoon q=hoon]`: debugging printf.
357
317
@@ -386,11 +346,7 @@ Regular: *2-fixed*.
386~
346~
387```
347```
388
348
389−;=
390− ;h3
391− ;div(id "sigtis"): ~= "sigtis"
349+### ~= "sigtis"
392− ==
393−==
394
350
395`[%sgts p=hoon q=hoon]`: detect duplicate.
351`[%sgts p=hoon q=hoon]`: detect duplicate.
396
352
@@ -422,11 +378,7 @@ This code traverses a tree and replaces all instances of `32` with
422
378
423Without `~=`, it would build a copy of a completely unchanged tree. Sad!
379Without `~=`, it would build a copy of a completely unchanged tree. Sad!
424
380
425−;=
426− ;h3
427− ;div(id "sigwut"): ~? "sigwut"
381+### ~? "sigwut"
428− ==
429−==
430
382
431`[%sgwt p=hoon q=hoon r=hoon]`: conditional debug printf.
383`[%sgwt p=hoon q=hoon r=hoon]`: conditional debug printf.
432
384
@@ -464,11 +416,7 @@ Regular: *4-fixed*.
464~
416~
465```
417```
466
418
467−;=
468− ;h3
469− ;div(id "sigzap"): ~! "sigzap"
419+### ~! "sigzap"
470− ==
471−==
472
420
473`[%sgzp p=hoon q=hoon]`: print type on compilation fail.
421`[%sgzp p=hoon q=hoon]`: print type on compilation fail.
474
422
reference/hoon-expressions/rune/terminators.udon → reference/hoon-expressions/rune/terminators.mdrenamed+7−19
@@ -1,21 +1,13 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− sort/'15'
4− title/'Terminators -- and =='
2+title = "Terminators"
5− ==
3+weight = 15
6−;>
4+template = "doc.html"
7−
5++++
8−# Terminators
9−
10The `--` and `==` are used as terminators: `--` for core expressions, and `==` for terminating a 'running' or 'jogging' series of Hoon expressions.
6The `--` and `==` are used as terminators: `--` for core expressions, and `==` for terminating a 'running' or 'jogging' series of Hoon expressions.
11
7
12## Runes
8## Runes
13
9
14−;=
15− ;h3
16− ;div(id "hephep"): -- "hephep"
10+### -- "hephep"
17− ==
18−==
19
11
20##### Syntax
12##### Syntax
21
13
@@ -44,11 +36,7 @@ The `|%`, `|_`, and `|^` runes are used to create cores that can have arbitraril
4424
3624
45```
37```
46
38
47−;=
48− ;h3
49− ;div(id "tistis"): == "tistis"
39+### == "tistis"
50− ==
51−==
52
40
53##### Syntax
41##### Syntax
54
42
reference/hoon-expressions/rune/tis.udon → reference/hoon-expressions/rune/tis.mdrenamed+19−79
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Change Subject"
3− sort/'5'
3+weight = 5
4− title/'Change Subject = ("tis")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Change Subject `=` ("tis")
9−
10These runes modify the subject. (Or more precisely, they
6These runes modify the subject. (Or more precisely, they
11evaluate at least one of their subexpressions with a modified subject.)
7evaluate at least one of their subexpressions with a modified subject.)
12
8
@@ -27,11 +23,7 @@ different situations. Hence the whole family of `=` runes.
27
23
28## Runes
24## Runes
29
25
30−;=
31− ;h3
32− ;div(id "tisban"): => "tisban"
26+### => "tisban"
33− ==
34−==
35
27
36`[%tsgr p=hoon q=hoon]`: compose two expressions.
28`[%tsgr p=hoon q=hoon]`: compose two expressions.
37
29
@@ -53,11 +45,7 @@ Regular: *2-fixed*.
53[6 6]
45[6 6]
54```
46```
55
47
56−;=
57− ;h3
58− ;div(id "tisbar"): =| "tisbar"
48+### =| "tisbar"
59− ==
60−==
61
49
62
50
63`[%tsbr p=spec q=hoon]`: combine a default type value with the subject.
51`[%tsbr p=spec q=hoon]`: combine a default type value with the subject.
@@ -89,11 +77,7 @@ Speaking more loosely, `=|` usually "declares a variable" which is "uninitialize
897
777
90```
78```
91
79
92−;=
93− ;h3
94− ;div(id "tiscol"): =: "tiscol"
80+### "tiscol"
95− ==
96−==
97
81
98`[%tscl p=(list (pair wing hoon)) q=hoon]`: change multiple legs in the subject.
82`[%tscl p=(list (pair wing hoon)) q=hoon]`: change multiple legs in the subject.
99
83
@@ -122,11 +106,7 @@ This rune is like `=.`, but for modifying the values of multiple legs of the sub
122[b=3 c=4]
106[b=3 c=4]
123```
107```
124
108
125−;=
126− ;h3
127− ;div(id "tiscom"): =, "tiscom"
109+### =, "tiscom"
128− ==
129−==
130
110
131`[%tscm p=hoon q=hoon]`: expose namespace
111`[%tscm p=hoon q=hoon]`: expose namespace
132
112
@@ -161,11 +141,7 @@ With a dojo-defined face:
161[2 4]
141[2 4]
162```
142```
163
143
164−;=
165− ;h3
166− ;div(id "tisdot"): =. "tisdot"
144+### =. "tisdot"
167− ==
168−==
169
145
170`[%tsdt p=wing q=hoon r=hoon]`: change one leg in the subject.
146`[%tsdt p=wing q=hoon r=hoon]`: change one leg in the subject.
171
147
@@ -201,11 +177,7 @@ a new subject just like the old one except for a changed value at `p`. Note tha
201nest-fail
177nest-fail
202```
178```
203
179
204−;=
205− ;h3
206− ;div(id "tishep"): =- "tishep"
180+### =- "tishep"
207− ==
208−==
209
181
210`[%tshp p=hoon q=hoon]`: combine a new noun with the subject, inverted.
182`[%tshp p=hoon q=hoon]`: combine a new noun with the subject, inverted.
211
183
@@ -234,11 +206,7 @@ Regular: *2-fixed*.
2348
2068
235```
207```
236
208
237−;=
238− ;h3
239− ;div(id "tisket"): =^ "tisket"
209+### =^ "tisket"
240− ==
241−==
242
210
243`[%tskt p=skin q=wing r=hoon s=hoon]`: pin the head of a pair; change
211`[%tskt p=skin q=wing r=hoon s=hoon]`: pin the head of a pair; change
244a leg with the tail.
212a leg with the tail.
@@ -278,11 +246,7 @@ random number, so we use `=^`:
278[99 46]
246[99 46]
279```
247```
280
248
281−;=
282− ;h3
283− ;div(id "tisled"): =< "tisled"
249+### =< "tisled"
284− ==
285−==
286
250
287`[%tsgl p=hoon q=hoon]`: compose two expressions, inverted.
251`[%tsgl p=hoon q=hoon]`: compose two expressions, inverted.
288
252
@@ -319,11 +283,7 @@ Irregular: `foo:baz` is `=<(foo baz)`.
319[6 6]
283[6 6]
320```
284```
321
285
322−;=
323− ;h3
324− ;div(id "tislut"): =+ "tislus"
286+### =+ "tislus"
325− ==
326−==
327
287
328
288
329`[%tsls p=hoon q=hoon]`: combine a new noun with the subject.
289`[%tsls p=hoon q=hoon]`: combine a new noun with the subject.
@@ -346,11 +306,7 @@ Loosely speaking, `=+` is the simplest way of "declaring a variable."
346
306
347##### Examples
307##### Examples
348
308
349−;=
350− ;h3
351− ;div(id "tismic"): =; "tismic"
309+### =; "tismic"
352− ==
353−==
354
310
355`[%tssm p=skin q=hoon r=hoon]`: combine a named noun with the subject, possibly with type annotation; inverted order.
311`[%tssm p=skin q=hoon r=hoon]`: combine a named noun with the subject, possibly with type annotation; inverted order.
356
312
@@ -379,11 +335,7 @@ Regular: *3-fixed*.
3798
3358
380```
336```
381
337
382−;=
383− ;h3
384− ;div(id "tisfas"): =/ "tisfas"
338+### =/ "tisfas"
385− ==
386−==
387
339
388`[%tsfs p=skin q=hoon r=hoon]`: combine a named noun with the subject, possibly with type annotation.
340`[%tsfs p=skin q=hoon r=hoon]`: combine a named noun with the subject, possibly with type annotation.
389
341
@@ -432,11 +384,7 @@ Regular: *3-fixed*.
4328
3848
433```
385```
434
386
435−;=
436− ;h3
437− ;div(id "tissig"): =~ "tissig"
387+### =~ "tissig"
438− ==
439−==
440
388
441
389
442`[%tssg p=(list hoon)]`: compose many expressions.
390`[%tssg p=(list hoon)]`: compose many expressions.
@@ -472,11 +420,7 @@ Regular: *running*.
4723
4203
473```
421```
474
422
475−;=
476− ;h3
477− ;div(id "tistar"): =* "tistar"
423+### =* "tistar"
478− ==
479−==
480
424
481`[%tstr p=term q=hoon r=hoon]`: define an alias.
425`[%tstr p=term q=hoon r=hoon]`: define an alias.
482
426
@@ -509,11 +453,7 @@ The difference between aliasing and pinning is that pinning changes the subject,
509[2 2]
453[2 2]
510```
454```
511
455
512−;=
513− ;h3
514− ;div(id "tiswut"): =? "tiswut"
456+### =? "tiswut"
515− ==
516−==
517
457
518`[$tswt p=wing q=hoon r=hoon s=hoon]`: conditionally change one leg in the subject.
458`[$tswt p=wing q=hoon r=hoon s=hoon]`: conditionally change one leg in the subject.
519
459
reference/hoon-expressions/rune/wut.udon → reference/hoon-expressions/rune/wut.mdrenamed+18−74
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Conditionals"
3− sort/'6'
3+weight = 6
4− title/'Conditionals ? ("wut")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Conditionals ? ("wut")
9−
10Hoon has the usual program control branches. It also has the usual logical
6Hoon has the usual program control branches. It also has the usual logical
11operators: AND `?&`, OR `?|`, and NOT `?!`. It also has a `?=` rune that tests
7operators: AND `?&`, OR `?|`, and NOT `?!`. It also has a `?=` rune that tests
12whether a value matches a given type. In the course of type inference, Hoon
8whether a value matches a given type. In the course of type inference, Hoon
@@ -33,11 +29,7 @@ side is taken), it fails with an error.
33
29
34## Runes
30## Runes
35
31
36−;=
37− ;h3
38− ;div(id "wutban"): ?> "wutban"
32+### ?> "wutban"
39− ==
40−==
41
33
42`[%wtbn p=hoon q=hoon]`: positive assertion.
34`[%wtbn p=hoon q=hoon]`: positive assertion.
43
35
@@ -75,11 +67,7 @@ nest-fail
75123
67123
76```
68```
77
69
78−;=
79− ;h3
80− ;div(id "wutbar"): ?| "wutbar"
70+### ?| "wutbar"
81− ==
82−==
83
71
84`[%wtbr p=(list hoon)]`: logical OR.
72`[%wtbr p=(list hoon)]`: logical OR.
85
73
@@ -118,11 +106,7 @@ Irregular: `|(foo bar baz)` is `?|(foo bar baz)`.
118%.n
106%.n
119```
107```
120
108
121−;=
122− ;h3
123− ;div(id "wutcol"): ?: "wutcol"
109+### "wutcol"
124− ==
125−==
126
110
127`[%wtcl p=hoon q=hoon r=hoon]`: branch on a boolean test.
111`[%wtcl p=hoon q=hoon r=hoon]`: branch on a boolean test.
128
112
@@ -170,11 +154,7 @@ Note also that all other branching expressions reduce to `?:`.
1704
1544
171```
155```
172
156
173−;=
174− ;h3
175− ;div(id "wutdot"): ?. "wutdot"
157+### ?. "wutdot"
176− ==
177−==
178
158
179`[%wtdt p=hoon q=hoon r=hoon]`: branch on a boolean test, inverted.
159`[%wtdt p=hoon q=hoon r=hoon]`: branch on a boolean test, inverted.
180
160
@@ -211,11 +191,7 @@ As is usual with inverted forms, use `?.` when the yes-case expression is much t
211'but see how \'r is much heavier than \'q?'
191'but see how \'r is much heavier than \'q?'
212```
192```
213
193
214−;=
215− ;h3
216− ;div(id "wuthep"): ?- "wuthep"
194+### ?- "wuthep"
217− ==
218−==
219
195
220`[%wthp p=wing q=(list (pair spec value))]`: switch against a union, with no default.
196`[%wthp p=wing q=(list (pair spec value))]`: switch against a union, with no default.
221
197
@@ -277,11 +253,7 @@ will throw `mint-vain`.
277! nest-fail
253! nest-fail
278```
254```
279
255
280−;=
281− ;h3
282− ;div(id "wutket"): ?^ "wutket"
256+### ?^ "wutket"
283− ==
284−==
285
257
286`[%wtkt p=wing q=hoon r=hoon]`: branch on whether a wing
258`[%wtkt p=wing q=hoon r=hoon]`: branch on whether a wing
287of the subject is a cell.
259of the subject is a cell.
@@ -314,11 +286,7 @@ The type of the wing, `p`, must not be known to be either an atom or a cell, or
3143
2863
315```
287```
316
288
317−;=
318− ;h3
319− ;div(id "wutled"): ?< "wutled"
289+### ?< "wutled"
320− ==
321−==
322
290
323
291
324# `?< "wutled"`
292# `?< "wutled"`
@@ -359,11 +327,7 @@ nest-fail
359[12 14]
327[12 14]
360```
328```
361
329
362−;=
363− ;h3
364− ;div(id "wutlus"): ?+ "wutlus"
330+### ?+ "wutlus"
365− ==
366−==
367
331
368`[%wtls p=wing q=hoon r=(list (pair spec hoon))]`: switch against
332`[%wtls p=wing q=hoon r=(list (pair spec hoon))]`: switch against
369a union, with a default.
333a union, with a default.
@@ -420,11 +384,7 @@ If there is a case that is never taken you'll get a `mint-vain` error.
420240
384240
421```
385```
422
386
423−;=
424− ;h3
425− ;div(id "wutpad"): ?& "wutpad"
387+### ?& "wutpad"
426− ==
427−==
428
388
429`[%wtpd p=(list hoon)]`: logical AND.
389`[%wtpd p=(list hoon)]`: logical AND.
430
390
@@ -463,11 +423,7 @@ Irregular: `&(foo bar baz)` is `?&(foo bar baz)`.
463%.n
423%.n
464```
424```
465
425
466−;=
467− ;h3
468− ;div(id "wutsig"): ?~ "wutsig"
426+### ?~ "wutsig"
469− ==
470−==
471
427
472`[%wtsg p=wing q=hoon r=hoon]`: branch on whether a wing of the subject is null.
428`[%wtsg p=wing q=hoon r=hoon]`: branch on whether a wing of the subject is null.
473
429
@@ -494,11 +450,7 @@ It's bad style to use `?~` to test for any zero atom. Use it only for a true nu
4941
4501
495```
451```
496
452
497−;=
498− ;h3
499− ;div(id "wuttis"): ?= "wuttis"
453+### ?= "wuttis"
500− ==
501−==
502
454
503`[%wtts p=spec q=wing]`: test pattern match.
455`[%wtts p=spec q=wing]`: test pattern match.
504
456
@@ -534,11 +486,7 @@ A common error is `find.$`, meaning `p` is not a type.
534%.y
486%.y
535```
487```
536
488
537−;=
538− ;h3
539− ;div(id "wutvat"): ?@ "wutvat"
489+### ?@ "wutvat"
540− ==
541−==
542
490
543`[%wtpt p=wing q=hoon r=hoon]`: branch on whether a wing of the subject is an atom.
491`[%wtpt p=wing q=hoon r=hoon]`: branch on whether a wing of the subject is an atom.
544
492
@@ -570,11 +518,7 @@ The type of the wing, `p`, must not be known to be either an atom or a cell, or
5704
5184
571```
519```
572
520
573−;=
574− ;h3
575− ;div(id "wutzap"): ?! "wutzaps"
521+### ?! "wutzaps"
576− ==
577−==
578
522
579`[%wtzp p=hoon]`: logical NOT.
523`[%wtzp p=hoon]`: logical NOT.
580
524
reference/hoon-expressions/rune/zap.udon → reference/hoon-expressions/rune/zap.mdrenamed+11−39
@@ -1,19 +1,11 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
2+title = "Wild"
3− sort/'4'
3+weight = 4
4− title/'Wild ! ("zap")'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Wild `!` ("zap")
9−
10## Runes
6## Runes
11
7
12−;=
13− ;h3
14− ;div(id "zapban"): !> "zapban"
8+### !> "zapban"
15− ==
16−==
17
9
18`[%zpgr p=hoon]`: wrap a noun in its type.
10`[%zpgr p=hoon]`: wrap a noun in its type.
19
11
@@ -43,11 +35,7 @@ If you want just the type value, use a 'type spear'. This is `-:!>`, i.e., the
43#t/@ud
35#t/@ud
44```
36```
45
37
46−;=
47− ;h3
48− ;div(id "zapcol"): !: "zapcol"
38+### "zapcol"
49− ==
50−==
51
39
52`[%dbug p=hoon]`: turn on stack trace
40`[%dbug p=hoon]`: turn on stack trace
53
41
@@ -79,11 +67,7 @@ ford: %ride failed to execute:
79ford: %ride failed to execute:
67ford: %ride failed to execute:
80```
68```
81
69
82−;=
83− ;h3
84− ;div(id "zapdot"): !. "zapdot"
70+### !. "zapdot"
85− ==
86−==
87
71
88Turn off stack trace for a subexpression `p`
72Turn off stack trace for a subexpression `p`
89
73
@@ -127,11 +111,7 @@ ford: %ride failed to execute:
127ford: %ride failed to execute:
111ford: %ride failed to execute:
128```
112```
129
113
130−;=
131− ;h3
132− ;div(id "zaptis"): != "zaptis"
114+### != "zaptis"
133− ==
134−==
135
115
136`[%zpts p=hoon]`: make the Nock formula for a Hoon expression.
116`[%zpts p=hoon]`: make the Nock formula for a Hoon expression.
137
117
@@ -172,11 +152,7 @@ Don't confuse the `!=` rune with:
172
152
173The syntax difference is that a test for equality takes two subexpressions, and the `!=` rune only one.
153The syntax difference is that a test for equality takes two subexpressions, and the `!=` rune only one.
174
154
175−;=
176− ;h3
177− ;div(id "zapwut"): !? "zapwut"
155+### !? "zapwut"
178− ==
179−==
180
156
181`[%zpwt p=@ q=hoon]`: restrict Hoon version.
157`[%zpwt p=@ q=hoon]`: restrict Hoon version.
182
158
@@ -202,11 +178,7 @@ Regular: *2-fixed*.
202! exit
178! exit
203```
179```
204
180
205−;=
206− ;h3
207− ;div(id "zapzap"): !! "zapzap"
181+### !! "zapzap"
208− ==
209−==
210
182
211`[%zpzp ~]`: crash.
183`[%zpzp ~]`: crash.
212
184
reference/library/1a.udon → reference/library/1a.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'1'
3− title/'1a: Basic Arithmetic'
2+title = "1a: Basic Arithmetic"
4− ==
3+weight = 1
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 1a: basic arithmetic
9−
10### `++add`
6### `++add`
11
7
12Add
8Add
reference/library/1b.udon → reference/library/1b.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'2'
3− title/'1b: Tree Addressing'
2+title = "1b: Tree Addressing"
4− ==
3+weight = 2
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 1b: tree addressing
9−
10Check out the Nock [explanation](/docs/nock/explanation/) for more
6Check out the Nock [explanation](/docs/nock/explanation/) for more
11information on the tree-addressing system.
7information on the tree-addressing system.
12
8
reference/library/1c.udon → reference/library/1c.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'3'
3− title/'1c: Molds and Mold-Builders'
2+title = "1c: Molds and Mold-Builders"
4− ==
3+weight = 3
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 1c: molds and mold builders
9−
10### `++bloq`
6### `++bloq`
11
7
12Blocksize
8Blocksize
reference/library/2a.udon → reference/library/2a.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'4'
3− title/'2a: Unit Logic'
2+title = "2a: Unit Logic"
4− ==
3+weight = 4
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2a: unit logic
10−
11### `++biff`
6### `++biff`
12
7
13Unit as argument
8Unit as argument
reference/library/2b.udon → reference/library/2b.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'5'
3− title/'2b: List Logic'
2+title = "2b: List Logic"
4− ==
3+weight = 5
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2b: list logic
9−
10### `++fand`
6### `++fand`
11
7
12All indices in `list`
8All indices in `list`
reference/library/2c.udon → reference/library/2c.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'6'
3− title/'2c: Bit Arithmetic'
2+title = "2c: Bit Arithmetic"
4− ==
3+weight = 6
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2c: bit arithmetic
9−
10### `++bex`
6### `++bex`
11
7
12Binary exponent
8Binary exponent
reference/library/2d.udon → reference/library/2d.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'7'
3− title/'2d: Bit Logic'
2+title = "2d: Bit Logic"
4− ==
3+weight = 7
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2d: bit logic
9−
10### `++con`
6### `++con`
11
7
12Binary OR
8Binary OR
reference/library/2e.udon → reference/library/2e.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'8'
3− title/'2e: Insecure Hashing'
2+title = "2e: Insecure Hashing"
4− ==
3+weight = 8
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2e: insecure hashing
9−
10### `++fnv`
6### `++fnv`
11
7
12FNV scrambler
8FNV scrambler
reference/library/2f.udon → reference/library/2f.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'9'
3− title/'2f: Noun Ordering'
2+title = "2f: Noun Ordering"
4− ==
3+weight = 9
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2f: noun ordering
10−
11### `++aor`
6### `++aor`
12
7
13Alphabetical order
8Alphabetical order
reference/library/2g.udon → reference/library/2g.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'10'
3− title/'2g: Unsigned Powers'
2+title = "2g: Unsigned Powers"
4− ==
3+weight = 10
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2g: unsigned powers
9−
10### `++pow`
6### `++pow`
11
7
12Computes `a` raised to the power of `b`, producing an atom.
8Computes `a` raised to the power of `b`, producing an atom.
reference/library/2h.udon → reference/library/2h.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'11'
3− title/'2h: Set Logic'
2+title = "2h: Set Logic"
4− ==
3+weight = 11
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2h: set logic
9−
10### `++in`
6### `++in`
11
7
12Set operations
8Set operations
reference/library/2i.udon → reference/library/2i.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'12'
3− title/'2i: Map Logic'
2+title = "2i: Map Logic"
4− ==
3+weight = 12
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2i: map logic
9−
10### `++by`
6### `++by`
11
7
12Map operations
8Map operations
reference/library/2j.udon → reference/library/2j.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'13'
3− title/'2j: Jar and Jug Logic'
2+title = "2j: Jar and Jug Logic"
4− ==
3+weight = 13
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2j: jar and jug logic
9−
10### `++ja`
6### `++ja`
11
7
12Jar engine
8Jar engine
reference/library/2k.udon → reference/library/2k.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'14'
3− title/'2k: Queue Logic'
2+title = "2k: Queue Logic"
4− ==
3+weight = 14
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2k: queue logic
10−
11### `++to`
6### `++to`
12
7
13
8
reference/library/2l.udon → reference/library/2l.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'15'
2+title = "2l: Container from Container"
3− title/'2l: Container from Container'
3+weight = 15
4− ==
4+template = "doc.html"
5−
5++++
6−;>
7−
8−# 2l: container from container
9−
10### `++malt`
6### `++malt`
11
7
12Map from list
8Map from list
reference/library/2m.udon → reference/library/2m.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'16'
3− title/'2m: Container from Noun'
2+title = "2m: Container from Noun"
4− ==
3+weight = 16
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2m: container from noun
10−
11### `++ly`
6### `++ly`
12
7
13List from raw noun
8List from raw noun
reference/library/2n.udon → reference/library/2n.mdrenamed+5−7
@@ -1,10 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'17'
3− title/'2n: Functional Hacks'
2+title = "2n: Functional Hacks"
4− ==
3+weight = 17
5−
4+template = "doc.html"
6−;>
5++++
7−
8# 2n: functional hacks
6# 2n: functional hacks
9
7
10### `++cork`
8### `++cork`
reference/library/2o.udon → reference/library/2o.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'18'
3− title/'2o: Normalizing Containers'
2+title = "2o: Normalizing Containers"
4− ==
3+weight = 18
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 2o: normalizing containers
9−
10### `++jar`
6### `++jar`
11
7
12Mold generator. A `jar` is a `map` of `list`.
8Mold generator. A `jar` is a `map` of `list`.
reference/library/2p.udon → reference/library/2p.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'19'
3− title/'2p: Serialization'
2+title = "2p: Serialization"
4− ==
3+weight = 19
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2p: serialization
10−
11### `++cue`
6### `++cue`
12
7
13Unpack atom to noun
8Unpack atom to noun
reference/library/2q.udon → reference/library/2q.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'20'
3− title/'2q: Molds and Mold-Builders'
2+title = "2q: Molds and Mold-Builders"
4− ==
3+weight = 20
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 2q: molds and mold builders
10−
11### `++char`
6### `++char`
12
7
13Character
8Character
reference/library/3a.udon → reference/library/3a.mdrenamed+5−7
@@ -1,10 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'21'
3− title/'3a: Modular and Signed Ints'
2+title = "3a: Modular and Signed Ints"
4− ==
3+weight = 21
5−
4+template = "doc.html"
6−;>
5++++
7−
8# 3a: modular and signed ints
6# 3a: modular and signed ints
9
7
10### `++egcd`
8### `++egcd`
reference/library/3b.udon → reference/library/3b.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'22'
3− title/'3b: Floating Point'
2+title = "3b: Floating Point"
4− ==
3+weight = 22
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 3b: floating point
9−
10### `++fn`
6### `++fn`
11
7
12Float
8Float
reference/library/3c.udon → reference/library/3c.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'23'
3− title/'3c: Urbit Time'
2+title = "3c: Urbit Time"
4− ==
3+weight = 23
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 3c: urbit time
9−
10### `++yall`
6### `++yall`
11
7
12Time since beginning of time
8Time since beginning of time
reference/library/3d.udon → reference/library/3d.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'24'
3− title/'3d: SHA Hash Family'
2+title = "3d: SHA Hash Family"
4− ==
3+weight = 24
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 3d: SHA hash family
9−
10### `++shad`
6### `++shad`
11
7
12Double SHA-256
8Double SHA-256
reference/library/3e.mdnew file+8
@@ -0,0 +1,8 @@
1++++
2+title = "3e: AES encryption (Removed)"
3+weight = 25
4+template = "doc.html"
5++++
6+The standard-library functions in this section have been removed.
7+
8+---
reference/library/3e.udondeleted−12
@@ -1,12 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'25'
3− title/'3e: (Removed)'
4− ==
5−
6−;>
7−
8−# 3e: AES encryption
9−
10−The standard-library functions in this section have been removed.
11−
12−---
reference/library/3f.udon → reference/library/3f.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'26'
3− title/'3f: Scrambling'
2+title = "3f: Scrambling"
4− ==
3+weight = 26
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 3f: scrambling
9−
10### `++un`
6### `++un`
11
7
12Reversible scrambling
8Reversible scrambling
reference/library/3g.udon → reference/library/3g.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'27'
3− title/'3g: Molds and Mold-Builders'
2+title = "3g: Molds and Mold-Builders"
4− ==
3+weight = 27
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 3g: molds and mold builders
9−
10### `++coin`
6### `++coin`
11
7
12
8
reference/library/4a.udon → reference/library/4a.mdrenamed+5−11
@@ -1,14 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'28'
3− title/'4a: Exotic Bases'
2+title = "4a: Exotic Bases"
4− ==
3+weight = 28
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−
10−# 4a: exotic bases
11−
12### `++po`
6### `++po`
13
7
14Phonetic base
8Phonetic base
reference/library/4b.udon → reference/library/4b.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'29'
3− title/'4b: Text Processing'
2+title = "4b: Text Processing"
4− ==
3+weight = 29
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4b: text processing
9−
10### `++at`
6### `++at`
11
7
12```
8```
reference/library/4c.udon → reference/library/4c.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'30'
3− title/'4c: Tank Printer'
2+title = "4c: Tank Printer"
4− ==
3+weight = 30
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4c: tank printer
9−
10### `++re`
6### `++re`
11
7
12Pretty-printing engine
8Pretty-printing engine
reference/library/4d.udon → reference/library/4d.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'31'
3− title/'4d: Parsing (Tracing)'
2+title = "4d: Parsing (Tracing)"
4− ==
3+weight = 31
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4d: parsing (tracing)
10−
11### `++last`
6### `++last`
12
7
13Further trace
8Further trace
reference/library/4e.udon → reference/library/4e.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'32'
3− title/'4e: Parsing (Combinators)'
2+title = "4e: Parsing (Combinators)"
4− ==
3+weight = 32
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4e: parsing (combinators)
9−
10### `++bend`
6### `++bend`
11
7
12Conditional composer
8Conditional composer
reference/library/4f.udon → reference/library/4f.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'33'
3− title/'4f: Parsing (Rule-Builders)'
2+title = "4f: Parsing (Rule-Builders)"
4− ==
3+weight = 33
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4f: parsing (rule builders)
10−
11### `++bass`
6### `++bass`
12
7
13Parser modifier: LSB
8Parser modifier: LSB
reference/library/4g.udon → reference/library/4g.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'34'
3− title/'4g: Parsing (Outside Caller)'
2+title = "4g: Parsing (Outside Caller)"
4− ==
3+weight = 34
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4g: parsing (outside caller)
10−
11### `++rash`
6### `++rash`
12
7
13Parse or crash
8Parse or crash
reference/library/4h.udon → reference/library/4h.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'35'
3− title/'4h: Parsing (ASCII Glyphs)'
2+title = "4h: Parsing (ASCII Glyphs)"
4− ==
3+weight = 35
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4h: parsing (ascii glyphs)
10−
11### `++ace`
6### `++ace`
12
7
13Parse space
8Parse space
reference/library/4i.udon → reference/library/4i.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'36'
3− title/'4i: Parsing (Useful Idioms)'
2+title = "4i: Parsing (Useful Idioms)"
4− ==
3+weight = 36
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4i: parsing (useful idioms)
9−
10### `++alf`
6### `++alf`
11
7
12Alphabetic characters
8Alphabetic characters
reference/library/4j.udon → reference/library/4j.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'37'
3− title/'4j: Parsing (Bases and Base Digits)'
2+title = "4j: Parsing (Bases and Base Digits)"
4− ==
3+weight = 37
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4j: parsing (bases and base digits)
10−
11### `++ab`
6### `++ab`
12
7
13Primitive parser engine
8Primitive parser engine
reference/library/4k.udon → reference/library/4k.mdrenamed+5−9
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'38'
3− title/'4k: Atom Printing'
2+title = "4k: Atom Printing"
4− ==
3+weight = 38
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4k: atom printing
9−
10### `++co`
6### `++co`
11
7
12Literal rendering engine
8Literal rendering engine
reference/library/4l.udon → reference/library/4l.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'39'
3− title/'4l: Atom Parsing'
2+title = "4l: Atom Parsing"
4− ==
3+weight = 39
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4l: atom parsing
10−
11### `++so`
6### `++so`
12
7
13Coin parser engine
8Coin parser engine
reference/library/4m.udon → reference/library/4m.mdrenamed+6−10
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'40'
3− title/'4m: Formatting Functions'
2+title = "4m: Formatting Functions"
4− ==
3+weight = 40
5−
4+template = "doc.html"
6−;>
5++++
7−
8−# 4m: formatting functions
9−
10### `++scot`
6### `++scot`
11
7
12Render dime as cord
8Render dime as cord
@@ -429,7 +425,7 @@ A `path`, or crash.
429
425
430 > (stab '/a/~pillyt/pals/1')
426 > (stab '/a/~pillyt/pals/1')
431 /a/~pillyt/pals/1
427 /a/~pillyt/pals/1
432−
428+
433 > `(pole ,@ta)`(stab '/a/~pillyt/pals/1')
429 > `(pole ,@ta)`(stab '/a/~pillyt/pals/1')
434 [~.a [~.~pillyt [~.pals [~.1 ~]]]]
430 [~.a [~.~pillyt [~.pals [~.1 ~]]]]
435```
431```
reference/library/4n.udon → reference/library/4n.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'41'
3− title/'4n: Virtualization'
2+title = "4n: Virtualization"
4− ==
3+weight = 41
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4n: virtualization
10−
11### `++mack`
6### `++mack`
12
7
13Nock subject to unit
8Nock subject to unit
reference/library/4o.udon → reference/library/4o.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'42'
3− title/'4o: Molds'
2+title = "4o: Molds"
4− ==
3+weight = 42
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 4o: molds and mold builders
10−
11### `++abel`
6### `++abel`
12
7
13Biblical names in hoon are primarily aliases for the compiler.
8Biblical names in hoon are primarily aliases for the compiler.
reference/library/5a.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5a: Compiler Utilities"
3+weight = 43
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5a.udondeleted−10
@@ -1,10 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'43'
3− title/'5a: Compiler Utilities'
4− ==
5−
6−;>
7−
8−# 5a: compiler utilities
9−
10−(To be documented)
reference/library/5b.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5b: Macro Expansion"
3+weight = 44
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5b.udondeleted−10
@@ -1,10 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'44'
3− title/'5b: Macro Expansion'
4− ==
5−
6−;>
7−
8−# 5b: macro expansion
9−
10−(To be documented)
reference/library/5c.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5c: Compiler Backend & Prettyprinter"
3+weight = 45
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5c.udondeleted−10
@@ -1,10 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'45'
3− title/'5c: Compiler Backend & Prettyprinter'
4− ==
5−
6−;>
7−
8−# 5c: compiler backend and prettyprinter
9−
10−(To be documented)
reference/library/5d.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5d: Parser"
3+weight = 46
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5d.udondeleted−11
@@ -1,11 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'46'
3− title/'5d: Parser'
4− ==
5−
6−;>
7−
8−
9−# 5d: parser
10−
11−(To be documented)
reference/library/5e.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5e: Caching Compiler"
3+weight = 47
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5e.udondeleted−11
@@ -1,11 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'47'
3− title/'5e: Caching Compiler'
4− ==
5−
6−;>
7−
8−
9−# 5e: caching compiler
10−
11−(To be documented)
reference/library/5f.udon → reference/library/5f.mdrenamed+5−10
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'48'
3− title/'5f: Molds and Mold-Builders'
2+title = "5f: Molds and Mold-Builders"
4− ==
3+weight = 48
5−
4+template = "doc.html"
6−;>
5++++
7−
8−
9−# 5f: molds and mold builders
10−
11### `++mane`
6### `++mane`
12
7
13XML name
8XML name
reference/library/5g.mdnew file+6
@@ -0,0 +1,6 @@
1++++
2+title = "5g: profiling support"
3+weight = 49
4+template = "doc.html"
5++++
6+(To be documented)
reference/library/5g.udondeleted−11
@@ -1,11 +0,0 @@
1−:- :~ navhome/'/docs/'
2− sort/'49'
3− title/'5g: profiling support'
4− ==
5−
6−;>
7−
8−
9−# 5g: profiling support
10−
11−(To be documented)
reference/library.udon → reference/library/_index.mdrenamed+6−7
@@ -1,10 +1,9 @@
1++++
1−:- :~ title/'Standard library'
2+title = "Standard library"
2− sort/'2'
3+weight = 2
3− ==
4+sort_by = "weight"
4−;>
5+template = "sections/docs/chapters.html"
5−
6++++
6−# Standard library
7−
8#### [_alphabetical_](#alphabetical-) [_by section_](#by-section-)
7#### [_alphabetical_](#alphabetical-) [_by section_](#by-section-)
9
8
10Documentation for the standard library.
9Documentation for the standard library.
reference/library/zuse.udon → reference/library/zuse.mdrenamed+5−7
@@ -1,10 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'50'
3− title/'Zuse'
2+title = "Zuse"
4− ==
3+weight = 50
5−
4+template = "doc.html"
6−;>
5++++
7−
8_Zuse_ is a defined interface for vanes. It contains the part of the Hoon
6_Zuse_ is a defined interface for vanes. It contains the part of the Hoon
9standard library that is specific to Arvo functionality.
7standard library that is specific to Arvo functionality.
10
8
reference/troubleshooting.udon → reference/troubleshooting.mdrenamed+5−7
@@ -1,10 +1,8 @@
1++++
1−:- :~ title/'Hoon Errors'
2+title = "Hoon Errors"
2− sort/'5'
3+weight = 5
3− ==
4+template = "doc.html"
4−;>
5++++
5−
6−# Hoon Errors
7−
8Ideally your Hoon works perfectly the first time. But...
6Ideally your Hoon works perfectly the first time. But...
9
7
10## Syntax errors
8## Syntax errors
using.udon → using/_index.mdrenamed+6−8
@@ -1,11 +1,9 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'2'
3− title/'Reference'
4− ==
5−;>
6−
7−# Using
2+title = "Using"
8−
3+weight = 2
4+sort_by = "weight"
5+template = "sections/docs/chapters.html"
6++++
9This section contains guides to using your urbit.
7This section contains guides to using your urbit.
10
8
11- [Admin and Operation](admin) is a guide to the basic commands used to interact with your ship.
9- [Admin and Operation](admin) is a guide to the basic commands used to interact with your ship.
using/admin.udon → using/admin.mdrenamed+13−13
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'1'
5− title/'Admin and Operations'
2+title = "Admin and Operations"
6− ==
3+weight = 1
7−;>
4+template = "doc.html"
8−
5++++
9−# Admin and operation
10−
11Your urbit (also called your _ship_) is a persistent Unix process that you
6Your urbit (also called your _ship_) is a persistent Unix process that you
12mainly control from the console. For some things, a browser will also work.
7mainly control from the console. For some things, a browser will also work.
13
8
@@ -117,14 +112,17 @@ On startup Urbit tries to bind to `localhost:8080`. If you're already
117running something on `8080` -- such as another urbit -- you'll find the urbit
112running something on `8080` -- such as another urbit -- you'll find the urbit
118that you just started on `8081`, and so on. For planets only, we also proxy web
113that you just started on `8081`, and so on. For planets only, we also proxy web
119domains through Urbit's own servers. Any planet `~your-urbit` is also at
114domains through Urbit's own servers. Any planet `~your-urbit` is also at
120−`your-urbit.arvo.network`.
115+`your-urbit.urbit.org`.
121
116
122Your urbit serves a simple homepage from `http://localhost:8080` or
117Your urbit serves a simple homepage from `http://localhost:8080` or
123−`https://your-urbit.arvo.network` that should be self-explanatory. Since
118+`https://your-urbit.urbit.org` that should be self-explanatory. Since
124our HTTPS isn't audited / battle tested, we just call it "secure" HTTPS.
119our HTTPS isn't audited / battle tested, we just call it "secure" HTTPS.
125You can find that on `8443`. Or `8444` (and so on) if you're already
120You can find that on `8443`. Or `8444` (and so on) if you're already
126running something on `8443`.
121running something on `8443`.
127
122
123+A complete walkthrough of the Urbit web interface is
124+[here](../web/).
125+
128## Moons
126## Moons
129
127
130Urbit namespace is distributed by having parent nodes sign the keys for child
128Urbit namespace is distributed by having parent nodes sign the keys for child
@@ -170,7 +168,9 @@ moon: ~faswep-navred-sampel-palnet
170`<keyfile>` will be at `path/to/sampel-palnet/.urb/put/moon.key`
168`<keyfile>` will be at `path/to/sampel-palnet/.urb/put/moon.key`
171and does not need editing to be used with the `-k` option.
169and does not need editing to be used with the `-k` option.
172
170
171+You can use the resulting output in the same installation flow from
172+[install](../install) and [setup](../setup), following the same scheme as
173−The scheme for booting is:
173+for booting a planet. That scheme is:
174
174
175```
175```
176$ urbit -w <moonname> -G <key> -c <piername>
176$ urbit -w <moonname> -G <key> -c <piername>
using/filesystem.udon → using/filesystem.mdrenamed+5−11
@@ -1,14 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'4'
5− title/'Introduction to the Filesystem'
2+title = "Introduction to the Filesystem"
6− ==
3+weight = 4
7−;>
4+template = "doc.html"
8−
5++++
9−# Introduction to the Filesystem
10−
11−
12Urbit has its own revision-controlled filesystem, Clay. Clay is a typed, global,
6Urbit has its own revision-controlled filesystem, Clay. Clay is a typed, global,
13referentially transparent namespace. An easy way to think about it is like typed
7referentially transparent namespace. An easy way to think about it is like typed
14`git` with continuous sync.
8`git` with continuous sync.
using/generators.udon → using/generators.mdrenamed+7−15
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− next/'true'
3− sort/'9'
4− title/'Generators'
2+title = "Generators"
5− ==
3+weight = 9
6−;>
4+template = "doc.html"
7−
5++++
8−# Generators
9−
10Generators are the most straightforward way to write programs for Urbit. They
6Generators are the most straightforward way to write programs for Urbit. They
11are used for doing computations that do not require persistence: they take an
7are used for doing computations that do not require persistence: they take an
12input and produce an output, then disappear. Generators might make sense for
8input and produce an output, then disappear. Generators might make sense for
@@ -29,7 +25,7 @@ a
29
25
30This generator takes one argument of any noun and produces it without any
26This generator takes one argument of any noun and produces it without any
31changes. If we put this into a file named `echo.hoon` in the `/gen` directory,
27changes. If we put this into a file named `echo.hoon` in the `/gen` directory,
32−we can run it from the [Dojo](../shell):
28+we can run it from the [Dojo](/docs/learn/arvo/arvo-internals/shell):
33
29
34```
30```
35> +echo 42
31> +echo 42
@@ -483,11 +479,7 @@ u.my-json
483
479
484The above generator was written with the
480The above generator was written with the
485[Studio Ghibli API](https://ghibliapi.herokuapp.com/). It uses this API to
481[Studio Ghibli API](https://ghibliapi.herokuapp.com/). It uses this API to
486−print the title of a Studio Ghibli film. If you save it as `ghib.hoon` you could run this generator by providing an api endpoint like so.
482+print the title of a Studio Ghibli film.
487−
488−```
489−+ghib "https://ghibliapi.herokuapp.com/films/58611129-2dbc-4a81-a72f-77ddfc1b1b49"
490−```
491
483
492```
484```
493/- sole
485/- sole
using/layout.udon → using/layout.mdrenamed+9−14
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'5'
5− title/'Source layout'
2+title = "Source layout"
6− ==
3+weight = 5
7−;>
4+template = "doc.html"
8−
5++++
9−# Arvo source
10−
11When you boot an urbit, we transfer the current version of the Arvo
6When you boot an urbit, we transfer the current version of the Arvo
12operating environment to your urbit over our network. That is, the
7operating environment to your urbit over our network. That is, the
13source for the system lives on your urbit. Here we'll take a brief tour
8source for the system lives on your urbit. Here we'll take a brief tour
@@ -47,7 +42,7 @@ This is where the Arvo kernel lives. `sys/` contains:
47
42
48##### `sys/hoon.hoon`
43##### `sys/hoon.hoon`
49
44
50−[Hoon](/docs/learn/hoon) is our programming language. Since Hoon
45+[Hoon](/docs/learn/arvo/hoon) is our programming language. Since Hoon
51compiles itself, the language is actually specified in this source file.
46compiles itself, the language is actually specified in this source file.
52
47
53##### `sys/zuse.hoon`
48##### `sys/zuse.hoon`
@@ -104,9 +99,9 @@ That's it. That's the whole system.
104
99
105## app/
100## app/
106
101
107−This is where [Gall](/docs/learn/arvo/gall) apps live. Gall apps are stateful
102+This is where [Gall](../gall) apps live. Gall apps are stateful
108servers, sort of like unix daemons. One familiar one is `app/hall.hoon` which is
103servers, sort of like unix daemons. One familiar one is `app/hall.hoon` which is
109−the source code for [Hall](/docs/learn/arvo/hall), the Urbit messaging transport
104+the source code for [Hall](../hall), the Urbit messaging transport
110layer. And there's also `app/dojo.hoon` — that's your shell.
105layer. And there's also `app/dojo.hoon` — that's your shell.
111
106
112---
107---
@@ -167,7 +162,7 @@ lib/test/*
167## web/
162## web/
168
163
169Here are files publicly accessible to the web, as made possible by
164Here are files publicly accessible to the web, as made possible by
170−[Eyre](/docs/learn/arvo/eyre).
165+[Eyre](../eyre).
171
166
172---
167---
173
168
using/messaging.udon → using/messaging.mdrenamed+22−23
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
3− next/'true'
4− sort/'2'
5− title/'Messaging'
2+title = "Messaging"
6− ==
3+weight = 2
7−;>
4+template = "doc.html"
8−
5++++
9−# Messaging (Talk and Hall)
10−
11Talk is the built-in frontend for the Urbit messaging and notifications
6Talk is the built-in frontend for the Urbit messaging and notifications
12protocol, Hall. Today we use Hall to chat and coordinate, but it's really
7protocol, Hall. Today we use Hall to chat and coordinate, but it's really
13a general purpose piece of infrastructure.
8a general purpose piece of infrastructure.
@@ -27,7 +22,7 @@ be used for that we haven't even thought of.
27
22
28Here we'll be discussing how to operate the default CLI frontend, Talk,
23Here we'll be discussing how to operate the default CLI frontend, Talk,
29to send and receive messages. For a more in-depth look at Hall's internals,
24to send and receive messages. For a more in-depth look at Hall's internals,
30−take a look at its [documentation](/docs/learn/arvo/hall).
25+take a look at its [documentation](../hall).
31
26
32## Quickstart
27## Quickstart
33
28
@@ -47,19 +42,23 @@ circles, but we for now we'll be dealing with the _channel_: a publicly
47accessible chatroom for general use. We'll discuss the other three
42accessible chatroom for general use. We'll discuss the other three
48kinds in the [manual](#manual) section.
43kinds in the [manual](#manual) section.
49
44
50−Let's join the `/urbit-help` channel, which is hosting on the star `~dopzod`.
51−Use `ctrl-x` to switch from Dojo to Talk. Then:
45+Let's join the `/urbit-help` channel. Use `ctrl-x` to switch from Dojo to Talk.
46+Then, :
52
47
53```
48```
54−~your-urbit:talk> ;join ~dopzod/urbit-help
49+~your-urbit:talk> ;join /urbit-help
55```
50```
56
51
57You'll see something like:
52You'll see something like:
58
53
59```
54```
60−--------------| ;join ~dopzod/urbit-help
55+--------------| ;join /urbit-help
61−--------------| :: onn =
56+--------------| :: onn /urbit-help
62−--------------| has glyph = for ~dopzod/urbit-help
57+--------------| bound '=' {[hos=~binzod nom=%urbit-help]}
58+--------------| new = /urbit-help
59+--------------| /urbit-help: cap: For Urbit-related discussion. Politically
60+ | correct and safe for work. Don't be rude.
61+--------------| /urbit-help: fit: caps:n unic:n
63~your-urbit:talk=
62~your-urbit:talk=
64```
63```
65
64
@@ -101,7 +100,7 @@ Now you and `~talsur-todres` can exchange messages directly.
101To set your audience back to `/urbit-help`:
100To set your audience back to `/urbit-help`:
102
101
103```
102```
104−~your-urbit:talk[~talsur-todres] ;~dopzod/urbit-help
103+~your-urbit:talk[~talsur-todres] ;/urbit-help
105```
104```
106
105
107You'll see your prompt change back:
106You'll see your prompt change back:
@@ -122,7 +121,7 @@ You can also use the ASCII "glyph" assigned to your `/urbit-help` circle as a sh
122Use `;leave` to unsubscribe from a channel:
121Use `;leave` to unsubscribe from a channel:
123
122
124```
123```
125−~your-urbit:talk= ;leave ~dopzod/urbit-help
124+~your-urbit:talk= ;leave /urbit-help
126```
125```
127
126
128The web UI ships as compiled JavaScript on your urbit, but has its own
127The web UI ships as compiled JavaScript on your urbit, but has its own
@@ -379,7 +378,7 @@ messages sent to `~other/circle` to also appear in `%name`.
379For example:
378For example:
380
379
381```
380```
382−~sampel-palnet:talk> ;source %coolbox ~dopzod/urbit-help
381+~sampel-palnet:talk> ;source %coolbox ~marzod/urbit-help
383```
382```
384
383
385###### Unsource
384###### Unsource
@@ -391,7 +390,7 @@ Removes `~other/circle` as a source for circle `%name`.
391For example:
390For example:
392
391
393```
392```
394−~sampel-palnet:talk> ;unsource %coolbox ~dopzod/urbit-help
393+~sampel-palnet:talk> ;unsource %coolbox ~marzod/urbit-help
395```
394```
396
395
397### Circle Membership
396### Circle Membership
@@ -440,7 +439,7 @@ specific circle to list members of just those: `;who ~some/circle`
440For example:
439For example:
441
440
442```
441```
443−~sampel-palnet:talk> ;who ~dopzod/urbit-help
442+~sampel-palnet:talk> ;who ~marzod/urbit-help
444```
443```
445
444
446###### Attend
445###### Attend
@@ -459,7 +458,7 @@ you.)
459For example:
458For example:
460
459
461```
460```
462−~sampel-palnet:talk> ;attend ~dopzod/urbit-help idle
461+~sampel-palnet:talk> ;attend ~marzod/urbit-help idle
463```
462```
464
463
465###### Set Display Name
464###### Set Display Name
using/sail.udon → using/sail.mdrenamed+9−13
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'7'
2+title = "Sail"
3− next/'true'
3+weight = 7
4− title/'Sail'
4+template = "doc.html"
5− ==
5++++
6−;>
7−
8−# Introduction to Sail
9−
10Sail is Hoon markup that’s used to render a web page with XML. But what makes
6Sail is Hoon markup that’s used to render a web page with XML. But what makes
11it special is that you can run arbitrary Hoon code within such a web page
7it special is that you can run arbitrary Hoon code within such a web page
12without using a separate markup language. In this tutorial, we will
8without using a separate markup language. In this tutorial, we will
@@ -15,10 +11,10 @@ be dealing with Sail as it renders to HTML, a subset of XML.
15### Getting Started
11### Getting Started
16
12
17Before starting, make sure that your urbit is
13Before starting, make sure that your urbit is
18−[mounted to Unix](/docs/getting-started/creating-a-development-ship/)
14+[mounted to Unix](https://urbit.org/docs/using/setup/)
19
15
20To host that output, your ship also has a web-server, called
16To host that output, your ship also has a web-server, called
21−Eyre, that can be found at
17+[Eyre](https://urbit.org/docs/using/web/), that can be found at
22`http://localhost:8080/` if it’s your first ship that’s running on the a
18`http://localhost:8080/` if it’s your first ship that’s running on the a
23machine, `http://localhost:8081/` if it’s the second ship on that same machine,
19machine, `http://localhost:8081/` if it’s the second ship on that same machine,
24and so on. In the startup messages, a ship will tell you which HTTP port it's
20and so on. In the startup messages, a ship will tell you which HTTP port it's
@@ -456,7 +452,7 @@ Hoon. They are part of Ford, our build system.
456
452
457`/$` is used to get data from the environment, and `/=` adds that data to
453`/$` is used to get data from the environment, and `/=` adds that data to
458subject in the face `gas`. The
454subject in the face `gas`. The
459−[Ford user manual](/docs/learn/arvo/ford/) has
455+[Ford user manual](https://urbit.org/docs/arvo/internals/ford/runes/) has
460details on these and other Ford runes, but understanding these runes isn’t
456details on these and other Ford runes, but understanding these runes isn’t
461necessary for the purposes of this tutorial.
457necessary for the purposes of this tutorial.
462
458
@@ -680,7 +676,7 @@ valid lists for the `;* ?: show-list` expression to resolve.
680You should now have foundational knowledge for making web pages with Sail. There
676You should now have foundational knowledge for making web pages with Sail. There
681is, of course, more to learn. If you’re curious, there’s more advanced
677is, of course, more to learn. If you’re curious, there’s more advanced
682resources out there.
678resources out there.
683−The [Ford manual](/docs/learn/arvo/ford/)
679+The [Ford manual](https://urbit.org/docs/arvo/internals/ford/runes/)
684can show you how to access various ship resources for user in your pages. To
680can show you how to access various ship resources for user in your pages. To
685learn more about how the renderer works, take a look at the
681learn more about how the renderer works, take a look at the
686`/home/ren/urb.hoon` file inside your urbit.
682`/home/ren/urb.hoon` file inside your urbit.
using/shell.udon → using/shell.mdrenamed+6−11
@@ -1,13 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− navuptwo/'true'
2+title = "Shell"
3− next/'true'
3+weight = 3
4− sort/'3'
4+template = "doc.html"
5− title/'Shell (Dojo)'
5++++
6− ==
7−;>
8−
9−# Shell (Dojo)
10−
11The Dojo is our shell; it processes system commands and returns output. It's a
6The Dojo is our shell; it processes system commands and returns output. It's a
12good place to quickly experiment with Urbit. On the surface the Dojo is just a
7good place to quickly experiment with Urbit. On the surface the Dojo is just a
13Hoon REPL. On the inside, the Dojo is a system for operating on and transforming
8Hoon REPL. On the inside, the Dojo is a system for operating on and transforming
@@ -36,7 +31,7 @@ Tall-form Hoon may require multiple lines:
36~your-urbit:dojo< 2
31~your-urbit:dojo< 2
37```
32```
38
33
39−Hoon uses something called [the subject](/docs/learn/hoon/hoon-tutorial/the-subject-and-its-legs).
34+Hoon uses something called [the subject](/docs/learn/arvo/hoon/the-subject-and-its-legs).
40The Dojo has its own subject, and that's where Hoon's equivalent of variables,
35The Dojo has its own subject, and that's where Hoon's equivalent of variables,
41called faces, are stored.
36called faces, are stored.
42
37
using/udon.udon → using/udon.mdrenamed+22−50
@@ -1,12 +1,8 @@
1−:- :~ navhome/'/docs/'
1++++
2− sort/'8'
3− next/'true'
4− title/'Udon'
2+title = "Udon"
5− ==
3+weight = 8
6−;>
4+template = "doc.html"
7−
5++++
8−# Udon
9−
10## Table of Contents
6## Table of Contents
11
7
12- #### [Udon: A Guide](#guide)
8- #### [Udon: A Guide](#guide)
@@ -15,11 +11,7 @@
15
11
16- #### [A Static Site](#static)
12- #### [A Static Site](#static)
17
13
18−;=
19− ;h2
20− ;div(id "guide"): Udon: A Guide
14+## A Guide
21− ==
22−==
23
15
24Udon is a way to write content for the web. It's a minimalist
16Udon is a way to write content for the web. It's a minimalist
25markup language for creating and rendering text documents, with a
17markup language for creating and rendering text documents, with a
@@ -45,10 +37,10 @@ Udon files using our web interface.
45### Getting Started
37### Getting Started
46
38
47Before starting, make sure that your urbit is
39Before starting, make sure that your urbit is
48−[mounted to Unix](/docs/getting-started/creating-a-development-ship/)
40+[mounted to Unix](https://urbit.org/docs/using/setup/)
49
41
50To host Udon and other kinds of files, your ship also has a
42To host Udon and other kinds of files, your ship also has a
51−web-server, called Eyre, that can be found
43+web-server, called [Eyre](https://urbit.org/docs/using/web/), that can be found
52at `http://localhost:8080/` if it’s your first ship that’s running on the
44at `http://localhost:8080/` if it’s your first ship that’s running on the
53machine, `http://localhost:8081/` if it’s the second ship on that same machine,
45machine, `http://localhost:8081/` if it’s the second ship on that same machine,
54and so on. If you can't find your ship on one of these for some reason, try the
46and so on. If you can't find your ship on one of these for some reason, try the
@@ -145,10 +137,10 @@ through `<h6>`. The header for this section is `### Headers`.
145
137
146### Italics and Bold
138### Italics and Bold
147
139
148−Enclosing text with `_` will cause that text to appear italicized, using an <i>
140+Enclosing text with `_` will cause that text to appear italicized, using an `<i>`
149element.
141element.
150
142
151−Enclosing text with `*` will cause that text to appear bolded, using a <b>
143+Enclosing text with `*` will cause that text to appear bolded, using a `<b>`
152element.
144element.
153
145
154
146
@@ -323,12 +315,12 @@ destination.
323*Example:*
315*Example:*
324
316
325```
317```
326−[I'm an inline-style link](https://www.urbit.org/docs/using/shell)
318+[I'm an inline-style link](https://www.urbit.org/docs/reference/shell)
327```
319```
328
320
329###### Produces:
321###### Produces:
330
322
331−[I'm an inline-style link](https://www.urbit.org/docs/using/shell)
323+[I'm an inline-style link](https://www.urbit.org/docs/reference/shell)
332
324
333The second type is a reference-style link, which uses a relative path, based on
325The second type is a reference-style link, which uses a relative path, based on
334the current page's location. Instead of the full url, we use `..` to fill in
326the current page's location. Instead of the full url, we use `..` to fill in
@@ -344,7 +336,7 @@ the all of the URL that the destination has in common with the origin page.
344
336
345[I'm a reference-style link](../shell)
337[I'm a reference-style link](../shell)
346
338
347−If this page is located at `https://www.urbit.org/docs/using/`, then these two
339+If this page is located at `https://www.urbit.org/docs/reference/`, then these two
348examples should have the same destination.
340examples should have the same destination.
349
341
350#### Anchor Link
342#### Anchor Link
@@ -366,11 +358,7 @@ Four score and seven years ago....
366
358
367It was the best of times, it was the worst of times...
359It was the best of times, it was the worst of times...
368
360
369−;=
370− ;h2
371− ;div(id "the-destination"): Here we are!
361+## Here we are!
372− ==
373−==
374```
362```
375
363
376###### Produces
364###### Produces
@@ -381,11 +369,7 @@ Four score and seven years ago....
381
369
382It was the best of times, it was the worst of times...
370It was the best of times, it was the worst of times...
383
371
384−;=
385− ;h2
386− ;div(id "the-destination"): Here we are!
372+## Here we are!
387− ==
388−==
389
373
390### Double Quote
374### Double Quote
391
375
@@ -588,11 +572,7 @@ indent the text in question with *eight spaces*.
588 Reel shadows of the indignant desert birds.
572 Reel shadows of the indignant desert birds.
589
573
590
574
591−;=
592− ;h2
593− ;div(id "sail"): Sail Expressions
575+## Sail Expressions
594− ==
595−==
596
576
597It's possible to use Udon as an HTML templating language akin to
577It's possible to use Udon as an HTML templating language akin to
598PHP, ERB, JSP, or Handlebars templates. This facility derives
578PHP, ERB, JSP, or Handlebars templates. This facility derives
@@ -611,7 +591,7 @@ Example:
611;=
591;=
612 ;p
592 ;p
613 ;strong: Don't panic!
593 ;strong: Don't panic!
614− ;br;
594+ <br>
615 ;small: [reactive publishing intensifies]
595 ;small: [reactive publishing intensifies]
616 ==
596 ==
617==
597==
@@ -623,17 +603,13 @@ Produces:
623;=
603;=
624 ;p
604 ;p
625 ;strong: Don't panic!
605 ;strong: Don't panic!
626− ;br;
606+ <br>
627 ;small: [reactive publishing intensifies]
607 ;small: [reactive publishing intensifies]
628 ==
608 ==
629==
609==
630
610
631
611
632−;=
633− ;h2
634− ;div(id "blog"): A Simple Udon Blog
612+## A Simple Udon Blog
635− ==
636−==
637
613
638Publishing using Udon is really easy. It uses the file extension `.udon`. Here we'll create a very simple blog and publish our first posts.
614Publishing using Udon is really easy. It uses the file extension `.udon`. Here we'll create a very simple blog and publish our first posts.
639
615
@@ -774,11 +750,7 @@ Use `;join` to keep up with comments as they get posted:
774
750
775That's it! Easy.
751That's it! Easy.
776
752
777−;=
778− ;h2
779− ;div(id "static"): A Static Site
753+## A Static Site
780− ==
781−==
782
754
783Hosting a static tree of content is easy. Let's put together a really
755Hosting a static tree of content is easy. Let's put together a really
784simple site for an imaginary Urbit meetup group.
756simple site for an imaginary Urbit meetup group.
@@ -791,7 +763,7 @@ Note: below we use Urbit's implementation of Markdown, [Udon](#udon).
791This markup language allows you to use snippets of Hoon code but not HTML.
763This markup language allows you to use snippets of Hoon code but not HTML.
792In particular, we use Sail, a subset of Hoon. This Sail is rendered as HTML
764In particular, we use Sail, a subset of Hoon. This Sail is rendered as HTML
793when the file is served to a client. To learn about Sail, head over to
765when the file is served to a client. To learn about Sail, head over to
794−the [Sail](/docs/using/sail) section of the docs.
766+the [Sail](/docs/learn/arvo/arvo-internals/sail) section of the docs.
795
767
796In `site/web/meet.udon` put:
768In `site/web/meet.udon` put:
797
769
@@ -805,7 +777,7 @@ In `site/web/meet.udon` put:
805
777
806# Neo-Tokyo Urbit meetup
778# Neo-Tokyo Urbit meetup
807
779
808−;img@"https://ofheroesandcliches.files.wordpress.com/2014/06/neo-tokyo.png"(width "100%");
780+![](https://ofheroesandcliches.files.wordpress.com/2014/06/neo-tokyo.png)
809
781
810Hi there! We meet once a week at The Chat to work on Urbit projects
782Hi there! We meet once a week at The Chat to work on Urbit projects
811together.
783together.