2
<p><span class="h-card" translate="no"><a href="https://mastodon.social/@whitequark" class="u-url mention">@<span>whitequark</span></a></span> I know, sorry. You&#39;ll be ready for next time!</p>
<p><span class="h-card" translate="no"><a href="https://mastodon.social/@whitequark" class="u-url mention">@<span>whitequark</span></a></span> even for things with no back up, i personally run 15-minutely btrbk btrfs snapshots with decaying retention for earlier files. snapshots like these take minimal time to create and help with being able to create backup in a more consistent state</p><p>i will probably switch to zfs for my next computer/drive, whichever comes first, but the principle is the same.</p><p>ofc this depends on fs support. i&#39;m not aware if lvm is capable of doing this on a block dev but it sounds sketchy</p>
<p><span class="h-card" translate="no"><a href="https://mastodon.social/@purpleidea" class="u-url mention">@<span>purpleidea</span></a></span> ... good idea, but would not help me here</p>
<p><span class="h-card" translate="no"><a href="https://fosstodon.org/@kev" class="u-url mention">@<span>kev</span></a></span> it&#39;s still Friday in Wales? Time zones are confusing.</p>
<p>…it matters because *this specific experiment didn&#39;t work that way*. I&#39;ve talked about this on here already but if this language sees a list in function position it just interprets it:</p><p><a href="https://github.com/mcclure/lisp0-experiment/blob/4f74f1a4a210507d7de8ded2e44c63c9e43bbd16/sample/test/basic/lisp/fun.ls0#L15" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">github.com/mcclure/lisp0-exper</span><span class="invisible">iment/blob/4f74f1a4a210507d7de8ded2e44c63c9e43bbd16/sample/test/basic/lisp/fun.ls0#L15</span></a></p><p>This turns out to create three big problems.</p><p>1. Lists are mutable. What happens if a list gets modified while it&#39;s being executed?<br />2. How do you represent args?<br />3. How do you represent locals?</p><p>I chose to simply ignore problem 1. Problems 2 and 3 were not so easily banished.</p>
<p>I’ve been positing this every year for sixteen years.</p>
Attached image 0
<p>An important thing about homiconicity: In homoiconic languages, you can build code in an in-memory structure, and there&#39;s some way to execute that structure, but that *doesn&#39;t mean the interpreter is literally executing the structure you built*. LISP has &quot;defun&quot;, TCL has &quot;proc&quot;. In each of these cases, you pass in a code structure (formally, at runtime) and get back an executable object. You execute these &quot;compiled&quot; executable objects, not the original data. This is a fiddly distinction, but…</p>
<p>LISP and its descendants are &quot;homoiconic&quot; languages: The code model is represented within the data model. You can easily represent LISP code within LISP as quoted lists of symbols, you can(?) construct a function by constructing a list containing code and then pass that to defun (??) to make an executable function. I feel homoiconicity has lost some meaning with time, as modern languages like Go or Rust with (LISP-inspired!) macro systems only present a *representation* of code to other code.</p>
<p>So I&#39;m re-formulating my &quot;0-LISP&quot; experiment from the last couple months, in a kinda fundamental way. I think this makes it better / more likely to be someday useful, but it feels weird.</p><p><a href="https://mastodon.social/@mcc/114365866529550435" target="_blank" rel="nofollow noopener" translate="no"><span class="invisible">https://</span><span class="ellipsis">mastodon.social/@mcc/114365866</span><span class="invisible">529550435</span></a></p><p>The original intent of this experiment was to make a language where code is a hygienic data structure:</p><p>- In TCL, strings are functions, because strings can be &quot;eval&quot;ed.<br />- But strings are not a good data structure; when they break it&#39;s in unclean ways.<br />- A solution: Go LISPy, use lists.</p>