@@ -39,7 +39,7 @@ The chain of reasoning goes something like this:
39Software complexity leads to monopolies and lack of individual digital
39Software complexity leads to monopolies and lack of individual digital
40sovereignty, in addition to bugs and security vulnerabilities. One of
40sovereignty, in addition to bugs and security vulnerabilities. One of
41the best ways to reduce software complexity is to restrict oneself to
41the best ways to reduce software complexity is to restrict oneself to
42−pure mathematical functions —- no side effects, no implicit arguments.
42+pure mathematical functions — no side effects, no implicit arguments.
43This makes the system deterministic. So we want a deterministic,
43This makes the system deterministic. So we want a deterministic,
44functional operating system for individuals to run.
44functional operating system for individuals to run.
@@ -118,14 +118,14 @@ Hoon and Nock have several unusual properties:
118 data structures are what are elsewhere called "functional" or
118 data structures are what are elsewhere called "functional" or
119 "persistent" data structures, meaning they're immutable<sup>*</sup> and share
119 "persistent" data structures, meaning they're immutable<sup>*</sup> and share
120 structure wherever possible.
120 structure wherever possible.
121− <br/><br/><small>*with the exception of "unifying
121+ <br/><small>*with the exception of "unifying
122 equality", which some runtimes provide as an optimization</small><br/>
122 equality", which some runtimes provide as an optimization</small><br/>
124- **Homoiconic**. Code and data are represented the same way and can be
124- **Homoiconic**. Code and data are represented the same way and can be
125 converted to each other. Lisp dialects are also homoiconic, but Hoon
125 converted to each other. Lisp dialects are also homoiconic, but Hoon
126 and Nock are arguably even more so, since things like closures and the
126 and Nock are arguably even more so, since things like closures and the
127 environment are just Nock trees. We even have a statically typed
127 environment are just Nock trees. We even have a statically typed
128− metacircular interpreter called +mule. We run userspace code
128+ metacircular interpreter called <code>+mule</code>. We run userspace code
129 metacircularly with negligible performance overhead because of Urbit's
129 metacircularly with negligible performance overhead because of Urbit's
130 jet system. In Lisp "eval is evil" is a common saying but, in Urbit,
130 jet system. In Lisp "eval is evil" is a common saying but, in Urbit,
131 eval is a first-class feature.
131 eval is a first-class feature.
@@ -199,7 +199,7 @@ Hoon and Nock have several unusual properties:
199 lot of the system manipulates types. In particular, the `!>` rune, when
199 lot of the system manipulates types. In particular, the `!>` rune, when
200 applied to a piece of data, uses compile-time type reflection to
200 applied to a piece of data, uses compile-time type reflection to
201 produce something called a "vase": a pair of type and data, similar to
201 produce something called a "vase": a pair of type and data, similar to
202− a Data.Dynamic in Haskell, or a limited form of a dependent pair.
202+ a <code>Data.Dynamic</code> in Haskell, or a limited form of a dependent pair.
203 Since the Arvo kernel does a lot of dynamic compilation, it uses vases
203 Since the Arvo kernel does a lot of dynamic compilation, it uses vases
204 to implement something akin to a dynamically typed language using
204 to implement something akin to a dynamically typed language using
205 Hoon. This allows for type-safe dynamic program loading, program
205 Hoon. This allows for type-safe dynamic program loading, program
@@ -234,7 +234,7 @@ Even Hoon's seemingly baroque syntax is extremely regular and an
234unusually thin layer over the abstract syntax tree. It's designed to be
234unusually thin layer over the abstract syntax tree. It's designed to be
235a power tool; learning the syntax takes some time, but you only have to
235a power tool; learning the syntax takes some time, but you only have to
236learn it once, and then it's not hard to read. It's like an English
236learn it once, and then it's not hard to read. It's like an English
237−speaker learning Cyrillic. This heaping spoonful of syntactic sugar
237+speaker learning Hiragana or Cyrillic. This heaping spoonful of syntactic sugar
238(along with jets for performance) is enough to take Nock from a Turing
238(along with jets for performance) is enough to take Nock from a Turing
239tarpit to a practical, ergonomic programming tool.
239tarpit to a practical, ergonomic programming tool.