1 #+title: Universal Language
2 #+author: Richard Westhaver
3 #+email: ellis@rwest.io
4 #+setupfile: ../clean.theme
5 #+infojs_opt: toc:nil home:https://compiler.company up:./ view:showall
6 #+print_glossary: :level 0 :consume yes :all yes :only-contents no
7 #+glossary_sources: glossary.org
10 :ID: e63d129f-9024-4cd8-9e2c-77f4bc614663 12 This document describes a
*U-Language* as described by the late great
13 [[https://iep.utm.edu/haskell-brooks-curry/][Haskell Curry]]:
15 Every investigation, including the present one, has to be communicated
16 from one person to another by means of language. It is expedient to
17 begin our study by calling attention to this obvious fact, by giving a
18 name to the language being used, and by being explicit about a few of
19 its features. We shall call the language being used the
20 U-Language. [...] There would be no point in calling attention to it,
21 if it were not for the fact that language is more intimately related
22 to our job than of most others.
25 In this document, we will be calling attention to our own language -
26 examining it, and describing how it works.
28 Our job is to solve problems. Hard problems preferred. So we ought to
29 pay close attention to the language we use because it brings the
30 reader and writer
/closer/ to the problem at hand.
32 For starters, we are primarily concerned with
/written languages/ like
33 the one you're reading now. We will skip past the obvious details -
34 English is our primary form of communication for example. The line you
35 are reading currently is a sentence which is part of a paragraph.
37 - This document is for authors and curious readers. It is a loose
38 specification, but also serves as introductory material into our
39 communication and design philosophy.
40 - All sources we write attempt to comply to this standard but it is
41 not strictly enforced. If there is a reason to not comply with a
42 rule, it is already broken.
46 :ID: 98a02bb2-3f39-49c6-898a-68ccd8f3cbe1 48 [[https://www.gnu.org/software/emacs/][GNU Emacs]] is our text editor, so naturally
[[https://orgmode.org/][Org Mode]] is our word
51 If you are already familiar with Emacs and Org-Mode, I recommend
52 opening the source of this document in Emacs and following along.
54 If not, I recommend browsing through the
[[https://orgmode.org/worg/][Worg resources]], but we won't
55 be getting too deep into tribal hacker knowledge of Emacs.
57 What's important to know is this: There is
/Org Syntax/ and
58 /Org-mode/ - these are different things.
60 Our
=ulang= is almost
/exclusively/ based on
/Org Syntax/ and we are
61 not concerned about
/Org-mode/ the application in this document.
63 For the remainder of this document, we assume basic knowledge of Org
69 :ID: 236227a5-b30c-4548-8cad-360428d74d67 71 Our
*U-Language* is colloquially termed
*ulang*. Each section of this
72 document describes a feature or property of our ulang.
80 :ID: 88bf1177-b5b7-4945-8bdc-5229803e617e 82 We derive all text emphasis syntax for rich contents from
[[https://orgmode.org/manual/Emphasis-and-Monospace.html][Org Mode]].
99 Text emphasis markers may be embedded in any syntax as long as it does
100 not cause any conflicts with the host language.
103 :ID: ed035298-f7fa-4726-ad58-2d542323bb61 105 In Org, headings can be summarize as any line starting with a star:
=* 106 H1=. Headings can be nested or 'demoted' by prepending another star:
118 This is a useful pattern which we apply outside of Org - most commonly
119 in our code comments.
121 In our source code, we use the comment character instead of a star:
122 #+name: lisp-headings
125 (print "H1") ;; just an inline comment
132 #+name: rust-headings
144 :ID: 7b4d3229-d85f-4464-b9d0-6beccb1f7b2e 146 A collection of
/headings/ is what we call an
*Outline* - which is
147 also the name of the major-mode utilized for this feature and of
148 course - what Org itself is derived from.
151 :ID: 2cadda9a-22a3-4b42-ad4e-d7a774f74cba 154 In Org, TODO keywords are used to key track of the state of a
[[https://orgmode.org/manual/TODO-Items.html][TODO 157 In ulang, they are used for this purpose and
[[https://orgmode.org/manual/TODO-Extensions.html][extended]] to support a
158 variety of stateful item types beyond just tasks - for example
=NOTE= 161 The following keywords indicate the state of a heading element. They
162 often appear as the first word in a heading.
164 - TBD :: A task to be done at a later date.
165 - TODO :: A task yet to be done.
166 - FIXME :: Item that needs fixing.
167 - WIP :: Work In Progress task.
168 - WAIT :: A suspended task.
169 - DEAD :: Item that will not be completed.
170 - DONE :: Completed task.
171 - BUG :: Designate a bug item.
172 - IDEA :: Designate an idea item.
173 - NOTE :: Designates a note item.
174 - DRAFT :: Designates a draft item.
175 - COMMENT :: A 'commented' item.
176 - PROJECT :: Designates a project item containing a sequence of tasks.
186 :ID: 0f4c0afd-a774-4b98-900b-1ab44f9fd2ef 188 Tasks as they are known in Org, usually consist of a heading that
189 starts with a
[[id:2cadda9a-22a3-4b42-ad4e-d7a774f74cba][Keyword]]. Here we describe some additional sections and
190 metadata which are present in our collection of tasks.
192 Our task management system is roughly a hybrid of two more
193 conventional methods: GTD and Agile. For convenience I will describe
194 these styles and how I use them separately, but the concepts may be
195 spliced differently in real tasks.
199 It's a dirty word in some tech circles - the dreaded PIs, daily
200 standups, and still nobody knows what's going on, Oh my! Do not
201 worry. For the most part we just borrow the vocabulary.
203 Our
/Agile/ workflow consists of roadmaps, features (epics/ARTs),
204 issues (user stories), and of course, tasks.
207 :ID: 174a993b-a5dc-4324-b4f8-dda8101a55b7 211 :ID: 3944c851-e46c-4d75-b8f5-07b5c052177a 213 We reference two different types of identifiers in documentation:
214 - UUID :: =ID= property
215 - User-defined :: =CUSTOM_ID= property
217 Most of the time these IDs don't add any information for the reader -
218 the UUIDs are used to index and graph documents, CUSTOM_IDs are for
219 convenience but are rarely necessary given the many ways of
220 identifying a headline.
223 :ID: a7ae1b2a-559e-46e9-8cab-33e39a218288 225 [[https://orgmode.org/manual/Tags.html][Tags]] are used liberally throughout our documents. They are simple
226 strings usually following a headline as a
=:=-separated list.
228 A tag can be any text without newlines, although it is recommended to
229 treat them as unique identifiers and usage of whitespace is
230 discouraged (but not disallowed).
233 :ID: b686dbc5-3505-49d7-b66a-0772bcf1a726 235 Tags may be prefixed with one of the following characters, indicating
237 - =@= :: location-tag
\\ 238 A
/location tag/ refers to some context-dependent named point in
239 space, such as a user's home address, a popular fast food
240 restaurant, or a specific room found in most houses.
241 - =@home=,
=@taco-bell=,
=@bedroom= 242 - =!= :: timestamp-tag
\\ 243 /Timestamp tags/ refer to some point in time, often named for
244 convenience. You may use literal
[[https://orgmode.org/manual/Timestamps.html][Timestamps]] too. Timestamp tags
245 should not
/directly reference/ scheduling information, doing so is
247 - =!now=,
=!christmas=,
=!someday= 248 - =#= :: anchor-tag
\\ 249 An
/anchor tag/ implies a link to the object identified by some
[[id:3944c851-e46c-4d75-b8f5-07b5c052177a][ID]].
250 - =#readme=,
=#a7ae1b2a-559e-46e9-8cab-33e39a218288=,
=#custom-id= 253 :ID: 805862be-ba2b-4288-a2e3-791c0aa3802f 257 :ID: 7ecaec5d-c656-44e1-8fad-185915655cee 261 :ID: 6aedc026-36d0-4763-adc8-8ae1a79f1b3e