on master help sign in
various fixes
commit2b38a8a866a6f5dc948662fe415fa163c9c0baf5 authorgalen <galen@tlon.io> dateFri 15 Nov 2019, 13:57 (7 years ago) parent1ca7094
1 file changed+5−5
content/blog/why-hoon.md+5−5
content/blog/why-hoon.md+5−5
@@ -39,7 +39,7 @@ The chain of reasoning goes something like this:
3939Software complexity leads to monopolies and lack of individual digital
4040sovereignty, in addition to bugs and security vulnerabilities. One of
4141the 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.
4343This makes the system deterministic. So we want a deterministic,
4444functional operating system for individuals to run.
4545
@@ -118,14 +118,14 @@ Hoon and Nock have several unusual properties:
118118 data structures are what are elsewhere called "functional" or
119119 "persistent" data structures, meaning they're immutable<sup>*</sup> and share
120120 structure wherever possible.
121− <br/><br/><small>*with the exception of "unifying
121+ <br/><small>*with the exception of "unifying
122122 equality", which some runtimes provide as an optimization</small><br/>
123123
124124- **Homoiconic**. Code and data are represented the same way and can be
125125 converted to each other. Lisp dialects are also homoiconic, but Hoon
126126 and Nock are arguably even more so, since things like closures and the
127127 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
129129 metacircularly with negligible performance overhead because of Urbit's
130130 jet system. In Lisp "eval is evil" is a common saying but, in Urbit,
131131 eval is a first-class feature.
@@ -199,7 +199,7 @@ Hoon and Nock have several unusual properties:
199199 lot of the system manipulates types. In particular, the `!>` rune, when
200200 applied to a piece of data, uses compile-time type reflection to
201201 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.
203203 Since the Arvo kernel does a lot of dynamic compilation, it uses vases
204204 to implement something akin to a dynamically typed language using
205205 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
234234unusually thin layer over the abstract syntax tree. It's designed to be
235235a power tool; learning the syntax takes some time, but you only have to
236236learn 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
238238(along with jets for performance) is enough to take Nock from a Turing
239239tarpit to a practical, ergonomic programming tool.
240240