hmn/src/templates/src/fishbowls/lisp-jam/lisp-jam.html

5443 lines
228 KiB
HTML

<div class="chatlog">
<!-- Emojis by Twitter's Twemoji https://twemoji.twitter.com/ -->
<div class="chatlog__message-group">
<div id="chatlog__message-container-740584956492775535" class="chatlog__message-container " data-message-id="740584956492775535">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:00 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">here we go again</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740584961886781471" class="chatlog__message-container chatlog__message-container--pinned" data-message-id="740584961886781471">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:00 AM">08:00</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><strong>Topic:</strong> Lessons from the <a class="inserted-after" href="https://en.wikipedia.org/wiki/Lisp_(programming_language)" target="_blank">Lisp</a> Jam</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740585445578113094" class="chatlog__message-container " data-message-id="740585445578113094">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:02 AM">08:02</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So yeah, we did a Lisp jam several weeks ago, and it's about time we all reconvened and discussed what we learned from it.
(If you're interested in reading conversations that happened during the jam, start here: <a href="https://discord.com/channels/239737791225790464/485261036308660244/729636584093384724" target="_blank">https://discord.com/channels/239737791225790464/485261036308660244/729636584093384724</a>)</span>
<span class="chatlog__edited-timestamp" title="21-Oct-20 06:34 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740586204717645907" class="chatlog__message-container " data-message-id="740586204717645907">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:05 AM">08:05</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">As a recap, we had several really interesting projects, including:</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740586462705352825" class="chatlog__message-container " data-message-id="740586462705352825">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:06 AM">08:06</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><span class="chatlog__markdown-mention" title="nakst">@nakst</span> 's flip, a 16-bit Lisp-based OS (demo here: <a href="https://discordapp.com/channels/239737791225790464/485261036308660244/731467698352947260" target="_blank">https://discordapp.com/channels/239737791225790464/485261036308660244/731467698352947260</a>)</span>
<span class="chatlog__edited-timestamp" title="10-Dec-20 10:39 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740587011144155206" class="chatlog__message-container " data-message-id="740587011144155206">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:08 AM">08:08</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><span class="chatlog__markdown-mention" title="rxi#5759">@rxi</span> 's cel7, a tiny game framework built around his <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">fe</span> language: <a href="https://rxi.itch.io/cel7" target="_blank">https://rxi.itch.io/cel7</a></span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 08:31 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740587455383732254" class="chatlog__message-container " data-message-id="740587455383732254">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:10 AM">08:10</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><span class="chatlog__markdown-mention" title="accidentalrebel#3885">@accidentalrebel</span> 's Emacs game engine: <a href="https://github.com/accidentalrebel/emacs-game-engine" target="_blank">https://github.com/accidentalrebel/emacs-game-engine</a></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740587517400711230" class="chatlog__message-container " data-message-id="740587517400711230">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:10 AM">08:10</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__attachment " onclick="">
<a href="files/preview-C3778.png" target="_blank">
<img class="chatlog__attachment-media" src="files/preview-C3778.png" alt="Image attachment" title="Image: preview.png (53.53 KB)" loading="lazy">
</a>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740588240783933520" class="chatlog__message-container " data-message-id="740588240783933520">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:13 AM">08:13</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><span class="chatlog__markdown-mention" title="Allen4th#9584">@Allen4th</span> 's Splink!, a Lisp IDE: <a href="https://github.com/4th-dimention/splink" target="_blank">https://github.com/4th-dimention/splink</a></span>
</div>
<div class="chatlog__attachment " onclick="">
<a href="files/appWin32_CpigF1o7Ac-108B9.png" target="_blank">
<img class="chatlog__attachment-media" src="files/appWin32_CpigF1o7Ac-108B9.png" alt="Image attachment" title="Image: appWin32_CpigF1o7Ac.png (144.25 KB)" loading="lazy">
</a>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740588927546687560" class="chatlog__message-container " data-message-id="740588927546687560">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:15 AM">08:15</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><span class="chatlog__markdown-mention" title="inso#8405">@inso</span> 's peril, a "C in Lisp" toy language: <a href="https://github.com/baines/peril" target="_blank">https://github.com/baines/peril</a></span>
</div>
<div class="chatlog__attachment " onclick="">
<a href="files/unknown-A2ED1.png" target="_blank">
<img class="chatlog__attachment-media" src="files/unknown-A2ED1.png" alt="Image attachment" title="Image: unknown.png (128.73 KB)" loading="lazy">
</a>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740590476863733790" class="chatlog__message-container " data-message-id="740590476863733790">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:22 AM">08:22</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><span class="chatlog__markdown-mention" title="ryanfleury#4528">@ryanfleury</span> 's unnamed music visualizer: <a href="https://discordapp.com/channels/239737791225790464/485261036308660244/732057090889220126" onclick="scrollToMessage(event, '732057090889220126')">https://discordapp.com/channels/239737791225790464/485261036308660244/732057090889220126</a></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740591067128135681" class="chatlog__message-container " data-message-id="740591067128135681">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:24 AM">08:24</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><span class="chatlog__markdown-mention" title="Luis Reyes#8385">@Luis Reyes</span> 's puyo puyo game, made using rxi's cel7 (a jam project built on someone else's jam project!): <a href="https://gist.github.com/no-difference/36745227bfb4257b762009d30392ec5d" target="_blank">https://gist.github.com/no-difference/36745227bfb4257b762009d30392ec5d</a></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740591906232467606" class="chatlog__message-container " data-message-id="740591906232467606">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:27 AM">08:27</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">and my Dream-th (<a class="inserted-after" href="https://en.wikipedia.org/wiki/Dreams_(video_game)" target="_blank">Dreams</a>, with a Lisp!) - a Lispy interpreter made in Dreams for PS4 <a href="https://youtu.be/KcPKZmQve_c" target="_blank">https://youtu.be/KcPKZmQve_c</a></span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 08:28 AM">(edited)</span>
</div>
<div class="chatlog__embed">
<div class="chatlog__embed-color-pill" style="background-color: rgba(255, 0, 0, 255)"></div>
<div class="chatlog__embed-content-container">
<div class="chatlog__embed-content">
<div class="chatlog__embed-text">
<div class="chatlog__embed-author-container">
<a class="chatlog__embed-author-link" href="https://www.youtube.com/channel/UCxECbT45tz5HJv_p1po3dyw">
<div class="chatlog__embed-author">Ben Visness</div>
</a>
</div>
<div class="chatlog__embed-title">
<a class="chatlog__embed-title-link" href="https://www.youtube.com/watch?v=KcPKZmQve_c">
<div class="chatlog__markdown chatlog__markdown-preserve">Dream-th (Dreams, with a Lisp!): Casual Code Walkthrough</div>
</a>
</div>
<div class="chatlog__embed-youtube-container">
<iframe class="chatlog__embed-youtube" src="https://www.youtube.com/embed/KcPKZmQve_c" width="400" height="225"></iframe>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740592139565531146" class="chatlog__message-container " data-message-id="740592139565531146">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:28 AM">08:28</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">(sorry if I missed anyone's project!)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740592499441270934" class="chatlog__message-container " data-message-id="740592499441270934">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:30 AM">08:30</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">You can see more of these projects and some early discussion about "<a class="inserted-after" href="https://en.wikipedia.org/wiki/Homoiconicity" target="_blank">homoiconicity</a>" in the <span class="chatlog__markdown-mention">#accountability</span> channel if you scroll back a bit. (I hope we can talk a bit more about homoiconicity today!) But the purpose of this fishbowl is for us to actually discuss what we all learned as a result of producing all these projects.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740593447118831716" class="chatlog__message-container " data-message-id="740593447118831716">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:33 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Something I was thinking about while researching Lisp and doing my tiny jam project was meaning being imposed upon a uniform structure in Lisp (and the implications this has for <a class="inserted-after" href="https://dion.systems/" target="_blank">Dion</a> specifically)--I'm sure Allen can speak a lot to this also. This architecture seems to lift semantic language meaning out of the tree structure, and instead adds to it as metadata. The interesting thing here is that you can start imposing custom things on top of a uniform thing.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740593572616863805" class="chatlog__message-container " data-message-id="740593572616863805">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:34 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">one message into this fishbowl and I already need more coffee</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740593607702085733" class="chatlog__message-container " data-message-id="740593607702085733">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:34 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Hahaha, fair :P</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740593796881842307" class="chatlog__message-container " data-message-id="740593796881842307">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:35 AM">08:35</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">This also gets into something I've been playing with for awhile now, which is a concept of trying to form "legos", where you have a uniform building block you use to piece together many different things, much in the same way that Lisp does. Interestingly enough I've been trying to use this in entity systems, as well as UI systems. The results seem to be fairly fruitful</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 08:36 AM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740594591769559051" class="chatlog__message-container " data-message-id="740594591769559051">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:38 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Say more about that; this ties a little bit into the discussion of "homoiconic" languages we had before</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740594765296566303" class="chatlog__message-container " data-message-id="740594765296566303">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:39 AM">08:39</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Lisp's building blocks are obviously very small and simple (basically just linked lists in the common case?) but I know Dion is more complex than that.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740595682410496110" class="chatlog__message-container " data-message-id="740595682410496110">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:42 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So I am still not 100% sure what "homoiconic" means; from what I've heard it is a term that has been used to mean a number of things, but I think the term is getting at the same picture that I am trying to get at, which is just trying to describe a system with a uniform structure at the bottom, but with meaning imposed on top of that with metadata.
Dion has been like this for a while, but over time what we've found is that we're constantly driving to a simpler building block; very recently we've moved to a very uniform structure that is slightly more structured than Lisp, where we effectively have lists-of-lists like Lisp does, <em>except</em> we also have <a class="inserted-after" href="https://en.wikipedia.org/wiki/Abstract_syntax_tree" target="_blank">AST</a> nodes that are used to make certain grammatical enforcements, which are formed by the definition for some kind of node type. We call those nodes "specs", so what we find is that we have an alternating pattern: sets-of-specs-of-sets</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740596199471448155" class="chatlog__message-container " data-message-id="740596199471448155">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:44 AM">08:44</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Interestingly the UI stuff for Dion--which is a completely different system (though it is related to the constraints of the code, e.g. recursiveness, because it was meant to be used for things that need to exist <em>alongside</em> code)--is similar in this way. At first I started with a kind of sprawling megastruct of stuff, but overtime as I started collapsing/simplifying functionality, I was finding that my building block was becoming more and more uniform. These UI nodes form a list-of-lists-style tree, just like Lisp.</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 08:45 AM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740596687709405213" class="chatlog__message-container " data-message-id="740596687709405213">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:46 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I look forward to when <span class="chatlog__markdown-mention" title="Allen4th#9584">@Allen4th</span> can be online to discuss Splink, because it seems like that might be exploring similar ideas. Do you know if Allen's work on Splink influenced your design work on Dion?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740596920761712730" class="chatlog__message-container " data-message-id="740596920761712730">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:47 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Definitely. In fact Allen had more insight than I did because his project was sort of like a mini "compute engine" (the term we are using for Dion) for a textual Lisp, so I'm sure he can speak to a lot of this in greater detail</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740597332201963550" class="chatlog__message-container " data-message-id="740597332201963550">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:49 AM">08:49</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I think the course of design has been a gigantic expansion, followed by a compression to something much tighter and simpler; Allen is way better than I am at the second stage of that, so naturally he was thinking about this kind of thing harder during the jam. <img loading="lazy" class="chatlog__emoji " alt="😄" title="smile" src="files\twemoji_1f604.svg"></span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 08:49 AM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740597566378606674" class="chatlog__message-container " data-message-id="740597566378606674">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:50 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">It's interesting that you're still managing to preserve C-like semantics on top of that; clearly the execution models are very different between Dion and Lisp</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740597581842743357" class="chatlog__message-container " data-message-id="740597581842743357">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:50 AM">08:50</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">at least by default, maybe</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740597801825599540" class="chatlog__message-container " data-message-id="740597801825599540">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:51 AM">08:51</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">by the way I know this discussion got really deep really fast, but as people who participated in the jam are available, I'd love if you just hopped in to share your overall thoughts and what you learned</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740597817751633991" class="chatlog__message-container " data-message-id="740597817751633991">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:51 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Well really there isn't an assumed execution model, which is interesting; it is basically a uniform tree, plus some metadata, which is used to render, type-check, and eventually compile to real instructions on a computer. In other words, a C-like AST is just a more specific version--with more metadata over the nodes--of a Lisp AST</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 08:52 AM">(edited)</span>
</div>
</div>
</div>
</div>
</div><div class="chatlog__message-group" style="">
<div id="chatlog__message-container-740597817973932094" class="chatlog__message-container " data-message-id="740597817973932094">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:51 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">even if it interrupts the flow a bit</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740597886424973403" class="chatlog__message-container " data-message-id="740597886424973403">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:51 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Yes absolutely, don't let me infect every conversation with Dion, that was just my takeaway that was very useful for me :)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740598186405527582" class="chatlog__message-container " data-message-id="740598186405527582">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:52 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">it's interesting to me that you mentioned your megastruct thing for UI, since I just yesterday watched your talk with Randall (at Randall?) about that stuff</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740598370300592140" class="chatlog__message-container " data-message-id="740598370300592140">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:53 AM">08:53</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">What does that simplifying process look like there? What are some examples of ways that your UI entity design became more uniform?</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740598567449788518" class="chatlog__message-container " data-message-id="740598567449788518">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:54 AM">08:54</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">(the talk, for those who didn't see it <a href="https://www.youtube.com/watch?v=UolgW-Ff4bA" target="_blank">https://www.youtube.com/watch?v=UolgW-Ff4bA</a>)</span>
</div>
<div class="chatlog__embed">
<div class="chatlog__embed-color-pill" style="background-color: rgba(255, 0, 0, 255)"></div>
<div class="chatlog__embed-content-container">
<div class="chatlog__embed-content">
<div class="chatlog__embed-text">
<div class="chatlog__embed-author-container">
<a class="chatlog__embed-author-link" href="https://www.youtube.com/channel/UCz25mk42tI3qKfN_-97heTw">
<div class="chatlog__embed-author">Randy's Archive</div>
</a>
</div>
<div class="chatlog__embed-title">
<a class="chatlog__embed-title-link" href="https://www.youtube.com/watch?v=UolgW-Ff4bA">
<div class="chatlog__markdown chatlog__markdown-preserve">Why an ECS just ain't it - feat. Ryan Fleury</div>
</a>
</div>
<div class="chatlog__embed-youtube-container">
<iframe class="chatlog__embed-youtube" src="https://www.youtube.com/embed/UolgW-Ff4bA" width="400" height="225"></iframe>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740599639417552926" class="chatlog__message-container " data-message-id="740599639417552926">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 08:58 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Yeah so my talk with Randall (<span class="chatlog__markdown-mention" title="randy#3728">@randy</span>) was very much related to this. Entities in a game world are a <em>little</em> different because there isn't necessarily some kind of tree structure imposed on them (though often times, there is), but my approach that I was trying to get at in that video was very much the same: Drive to a uniform building block.
Initially I started with a megastruct, where I just started dumping stuff for any possible UI widget, with some flags:
<div class="chatlog__markdown-pre chatlog__markdown-pre--multiline language-c hljs cpp"><span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">UI_Widget</span>
{</span>
UI_Widget *next, *prev, *parent, *children_list, *children_list_tail;
u64 properties[UI_WidgetProperty_Max/<span class="hljs-number">64</span>+<span class="hljs-number">1</span>];
<span class="hljs-comment">// etc.</span>
b32 *clicked;
f32 *drag_f32_value;
v4 *color_picker_value;
<span class="hljs-comment">// etc. etc. etc.</span>
};</div></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740599728156180550" class="chatlog__message-container " data-message-id="740599728156180550">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:58 AM">08:58</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">And that's all fine, but you'll notice that there's an explosion happening: The "widget response data"</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740599841910030417" class="chatlog__message-container " data-message-id="740599841910030417">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:59 AM">08:59</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">What I ended up wanting was a "canvas widget", which basically allows for <em>any</em> custom interception of rendering or updating</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740599990694576149" class="chatlog__message-container " data-message-id="740599990694576149">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 08:59 AM">08:59</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">And that eventually added these to the widget struct:
<div class="chatlog__markdown-pre chatlog__markdown-pre--multiline language-c hljs cpp"><span class="hljs-keyword">void</span> *custom_user_data;
UI_CustomUpdate *CustomUpdate;
UI_CustomUpdate *CustomRender;</div></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740600165223890965" class="chatlog__message-container " data-message-id="740600165223890965">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:00 AM">09:00</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><em>NOTE:</em> <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">custom_user_data</span> is allocated on double-buffered per-frame arenas, so it can be used to store persistent data per-widget, because you can always persistently access last frame's state, <em>and</em> allocate current frame's state, and map between the two.
I then noticed that these--paired with some built-in properties that are a fast-path for implementing very common UI paradigms, like clicking--could be used to represent almost any simple widget I already had.</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 09:08 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740600241652367430" class="chatlog__message-container " data-message-id="740600241652367430">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:00 AM">09:00</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">(You <em>could</em> implement clicking with a <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">CustomUpdate</span>, but I have a fast-path for it where you just flick on a property and it does the logic)</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 09:01 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740600425803415653" class="chatlog__message-container " data-message-id="740600425803415653">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:01 AM">09:01</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">And then I realized I had moved the definition of very specific UI widgets <em>out</em> of the internals of the UI system, and into a sort of "third user" of the API, who is tasked with forming widgets</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740600667168833596" class="chatlog__message-container " data-message-id="740600667168833596">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:02 AM">09:02</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">In other words, the building of widget types became a third face to the API, and therefore became user code, allowing for <em>very specific</em> widgets (e.g. file explorer buttons that display super specific stuff), formed by usage code:</span>
</div>
<div class="chatlog__attachment " onclick="">
<a href="files/unknown-4EA26.png" target="_blank">
<img class="chatlog__attachment-media" src="files/unknown-4EA26.png" alt="Image attachment" title="Image: unknown.png (131.87 KB)" loading="lazy">
</a>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740600851827130439" class="chatlog__message-container " data-message-id="740600851827130439">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:03 AM">09:03</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">On the other side, the structure of the widgets is 100% uniform and can be used as such, for example with keyboard navigation.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740600975865282651" class="chatlog__message-container " data-message-id="740600975865282651">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:03 AM">09:03</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So there's a real magic to being able to adjust the "structuredness" you're dealing with at different places in the API, and ultimately I think that's what Lisp provides, and I think this was just a slice of that in the UI sphere. In one spot, you can consider things as a generic uniform tree, in another spot, you can write the most specific code possible to specify the exact information you want. But there isn't any weird inheritance or casting pointers or anything like that, the two structures are actually just the same thing, you're just talking about their contents differently.</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 09:04 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740601593283608668" class="chatlog__message-container " data-message-id="740601593283608668">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:06 AM">09:06</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Another interesting property of the UI stuff is that it allows for <em>composability</em> very easily. So I can turn on the "clickable" property, <em>and</em> I can feed in a custom update/render, which allows me to do things like make those file explorer buttons. But that is a sort of different rabbit hole not <em>immediately</em> related to the Lisp-like uniform building block (though the two play <em>very nicely</em> with each other).</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 09:09 AM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740602879806537828" class="chatlog__message-container " data-message-id="740602879806537828">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:11 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So maybe this doesn't really get to the heart of it, but do you think something like Dion or Lisp would allow you to do this stuff more easily or naturally?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740603065752617010" class="chatlog__message-container " data-message-id="740603065752617010">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:12 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I think with something like UI structures, not really, but with <em>code itself</em>, definitely</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740603332300767254" class="chatlog__message-container " data-message-id="740603332300767254">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:13 AM">09:13</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">The fact that--if we want to treat our C code as data--we need to parse it, already puts us a mile away from what we want, but even after that point, you're still talking about a very specific tree, when in many cases you want a generic, Lisp-like one</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 09:13 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740603522747334656" class="chatlog__message-container " data-message-id="740603522747334656">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:13 AM">09:13</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Someone could always write a C compiler that parses out to a Lisp tree, maybe!</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 09:14 AM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740604094263066746" class="chatlog__message-container " data-message-id="740604094263066746">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:16 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I know we've had the discussion about "parsing" Lisp before at some point, but it's pretty much a non-issue because parsing Lisp is hardly any more difficult than deserializing some binary representation of the same thing</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740604182213689426" class="chatlog__message-container " data-message-id="740604182213689426">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:16 AM">09:16</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">it's still directly representing the final structure</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740604224655851632" class="chatlog__message-container " data-message-id="740604224655851632">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:16 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Right, actually what Allen and I have been discussing recently is that parsing is mostly a problem when it's <em>not local</em></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740604274408685648" class="chatlog__message-container " data-message-id="740604274408685648">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:16 AM">09:16</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Localized parsing is not very problematic</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740604390318145598" class="chatlog__message-container " data-message-id="740604390318145598">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:17 AM">09:17</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">It is for this reason that we've moved to a list of "expression tokens" (even though those "tokens" are just full subtrees, not textual tokens) for our expressions in Dion. They are still formally a tree, but we don't <em>actually</em> have the <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">+</span> with two children, like we did before</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 09:19 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740604729952043019" class="chatlog__message-container " data-message-id="740604729952043019">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:18 AM">09:18</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Parsing starts to get nasty when you've got important information scattered throughout 100 files, it's not clear how they are supposed to connect, it's impossible to tell what things are until you've figured that out, and finally, add a little bit of textual preprocessor as the cherry on top</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740604812848136204" class="chatlog__message-container " data-message-id="740604812848136204">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:19 AM">09:19</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">In other words, when you're parsing something like that, it's very difficult to tell "where you are"</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740605816729632930" class="chatlog__message-container " data-message-id="740605816729632930">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:23 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">interesting</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740605969284726875" class="chatlog__message-container " data-message-id="740605969284726875">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:23 AM">09:23</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I mean something like Lisp still has bindings in the environment and whatnot; no sophisticated program can do stuff entirely locally</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740605994635231273" class="chatlog__message-container " data-message-id="740605994635231273">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:23 AM">09:23</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">but I suppose in Dion that's just a direct pointer to another node?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740607239965900942" class="chatlog__message-container " data-message-id="740607239965900942">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:28 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Right, not quite a pointer, but a "node handle", which keeps track of a generation number</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740607419796815945" class="chatlog__message-container " data-message-id="740607419796815945">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:29 AM">09:29</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">All "close" relationships in the tree are formed by "pointers" (they aren't even pointers anymore for practical architectural reasons having to do with very large codebases, they're just indices--also helps us keep the size of nodes down), but "far" relationships are formed by handles, which have more information packed into them</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 09:30 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740607750089998469" class="chatlog__message-container " data-message-id="740607750089998469">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:30 AM">09:30</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">And that's specifically so that, say, deleting a type that someone is referencing doesn't crash the program or result in massively broken code or something</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 09:30 AM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740608401523998750" class="chatlog__message-container " data-message-id="740608401523998750">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:33 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">makes sense</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740608475637481574" class="chatlog__message-container " data-message-id="740608475637481574">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:33 AM">09:33</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">mind if I deviate a bit and just say a few of the things I learned from my project?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740608533619540058" class="chatlog__message-container " data-message-id="740608533619540058">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:33 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Not at all, I'd prefer that--I've gone on long enough :P</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740608811005640895" class="chatlog__message-container " data-message-id="740608811005640895">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:35 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">so I went into the jam really not knowing Lisp at all - I kind of understood the basics but couldn't even tell you what the list structure actually looked like, much less how you would do anything interesting in it</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740608864352862358" class="chatlog__message-container " data-message-id="740608864352862358">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:35 AM">09:35</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I had to play around with <a class="inserted-after" href="https://en.wikipedia.org/wiki/Racket_(programming_language)" target="_blank">Racket</a> a bit and I implemented <a class="inserted-after" href="https://github.com/rui314/minilisp" target="_blank">minilisp</a> just to try and learn it</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740609002014244906" class="chatlog__message-container " data-message-id="740609002014244906">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:35 AM">09:35</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">but in the process of creating the thing in <a class="inserted-after" href="https://en.wikipedia.org/wiki/Dreams_(video_game)" target="_blank">Dreams</a>, I really had to grapple a lot with what Lisp actually <em>is</em></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740609173238317149" class="chatlog__message-container " data-message-id="740609173238317149">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:36 AM">09:36</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">and I've mentioned before in other channels, but it weirdly felt like implementing Lisp in Smalltalk or something. Dreams feels very object-oriented in a pure sort of way.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740609312984137810" class="chatlog__message-container " data-message-id="740609312984137810">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:37 AM">09:37</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I had to question, for example, if I actually needed memory allocations to make things behave like Lisp (I did)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740609546480779405" class="chatlog__message-container " data-message-id="740609546480779405">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:37 AM">09:37</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">or nuances like when you <em>evaluate</em> a list as a function vs. just looking at the list data (in some sense, what's the runtime and what's the actual program?)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740610264973574295" class="chatlog__message-container " data-message-id="740610264973574295">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:40 AM">09:40</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">for example, your primitive functions have to be able to access their arguments somehow, which implies working down the list and evaluating each argument (which means possibly calling more functions)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740610590531256402" class="chatlog__message-container " data-message-id="740610590531256402">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:42 AM">09:42</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">In order to achieve that, I had to implement some list-walking stuff in my runtime that I don't think could be done just with more Lisp code - I think at some level, something in the runtime needs to actually know how to walk a list</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740611352338366514" class="chatlog__message-container " data-message-id="740611352338366514">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:45 AM">09:45</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I think I might have actually learned more about object-oriented programming through this project than I did about Lisp. There are parts of Dream-th that feel very natural, like how the <a class="inserted-after" href="https://en.wikipedia.org/wiki/Cons" target="_blank">cons</a> cells can talk to each other by proximity, just seeing what's snapped on to their value slot. Having each cons cell be an "agent" that you could send messages to felt really natural there. ("What's in your <a class="inserted-after" href="https://en.wikipedia.org/wiki/CAR_and_CDR" target="_blank">cdr</a> slot?", "Can you ask your <a class="inserted-after" href="https://en.wikipedia.org/wiki/CAR_and_CDR" target="_blank">car</a> thing to evaluate itself and then tell me what it said?")</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740611923447382017" class="chatlog__message-container " data-message-id="740611923447382017">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:47 AM">09:47</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">On the other hand, just implementing an addition function was a nightmare of IDs, and I needed three different objects all talking to each other to make that happen. (One to walk the list nodes, another to evaluate the things at those list nodes, and another to grab the return values.) In retrospect, one of those may have been unnecessary if I had smarter messages in my runtime, and obviously some of that is just Dreams being weird. But I really felt the pain at some points of not knowing where to put the state or behavior, which is inherent to object-oriented programming.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740611979580014605" class="chatlog__message-container " data-message-id="740611979580014605">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:47 AM">09:47</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Also naming. Naming sucks. Everything in Dream-th is some riff on "evaler".</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740612346359316601" class="chatlog__message-container " data-message-id="740612346359316601">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:49 AM">09:49</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">It's possible that if I put more work into abstraction, I could maybe make the objects small enough that the system is easier to understand. But if you watch the latter half of my code walkthrough video, you'll see that a simple addition function is almost too complex to explain.</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 09:49 AM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740612894051270696" class="chatlog__message-container " data-message-id="740612894051270696">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:51 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">That is pretty interesting. It sounds like the concept of classical object-orientation--message passing between agents, basically--works much better in Dreams than most other places, because there are actual "real world objects" that are directly equivalent to the "code objects", but maybe this addition "circuit" is an example of where that breaks down?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740612935516160111" class="chatlog__message-container " data-message-id="740612935516160111">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 09:51 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">(It occurs to me that I to a large extent had to implement not just a programming language, but a computer. Following memory references is a lot of work since you have to find the physical location of the thing in space, and then actually travel there, which is several steps.)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740613132682002573" class="chatlog__message-container " data-message-id="740613132682002573">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:52 AM">09:52</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Yeah the problem is that the addition logic was quite a crazy sequence of actions, and ping-ponged back and forth between the different objects involved in the operation.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740613189859016764" class="chatlog__message-container " data-message-id="740613189859016764">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:52 AM">09:52</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">let me see if I can give you a sense of those steps...</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740614452906557481" class="chatlog__message-container " data-message-id="740614452906557481">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:57 AM">09:57</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">- START: receive eval message with ID of cons cell containing the first argument
- tell list walker to go there
- list walker calls to global registry to get physical location of cons cell, and performs several steps to travel there
- list walker sends message to cons cell asking what is in its car slot
- list walker tells evaler to go to the car slot (this is what could be elided with better messages)
- evaler goes to the car object via the global registry and travel thing
- evaler sends eval message to car thing
- eval happens, a result is spawned and the ID is sent back to the evaler
- evaler tells value grabber to go grab the value
- value grabber goes to result via the same multi-step process
- value grabber sends result back to the primitive (via wires, mercifully)
- primitive sends message to list walker saying it's done with the value
- list walker asks cons cell what's in its cdr slot
- list walker either moves on and repeats most of this, or sends stop messages to evaler and value grabber
- list walker sends done message to primitive
- primitive sends message to spawner with a result
- spawner produces a value and send the ID back to the primitive
- primitive returns the ID of the spawned value back to the thing that evaled it</span>
</div>
<div class="chatlog__reactions">
<div class="chatlog__reaction" title="scream">
<img class="chatlog__emoji chatlog__emoji--small" alt="😱" src="files/1f631-31CF7.svg" loading="lazy">
<span class="chatlog__reaction-count">1</span>
</div>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740614487257776150" class="chatlog__message-container " data-message-id="740614487257776150">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:57 AM">09:57</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">this is, to put it mildly, insane.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740614690509553774" class="chatlog__message-container " data-message-id="740614690509553774">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:58 AM">09:58</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">There are echoes of concurrent programming in this too, because each object is an independent <a class="inserted-after" href="https://en.wikipedia.org/wiki/Actor_model" target="_blank">actor</a> and must be explicitly sequenced with the others via messages.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740614713641140295" class="chatlog__message-container " data-message-id="740614713641140295">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:58 AM">09:58</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">(It's very <a class="inserted-after" href="https://en.wikipedia.org/wiki/Communicating_sequential_processes" target="_blank">CSP</a>-like.)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740614937839271986" class="chatlog__message-container " data-message-id="740614937839271986">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:59 AM">09:59</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Now as I said, part of that is the "computer". The "look up a location by ID and then travel there" is basically fetching from RAM.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740615008051920998" class="chatlog__message-container " data-message-id="740615008051920998">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:59 AM">09:59</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">And that part could likely be standardized in some way so that each thing didn't implement it itself.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740615085516390462" class="chatlog__message-container " data-message-id="740615085516390462">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 09:59 AM">09:59</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I think there are several things in here that could be better abstracted and simplified so that it more concisely describes the actual logic of the system.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740615358829953045" class="chatlog__message-container " data-message-id="740615358829953045">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:01 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">That's kind of fascinating, definitely seems like it is more complicated than an addition circuit or something :P</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740615540036468757" class="chatlog__message-container " data-message-id="740615540036468757">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:01 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I've never actually used Smalltalk, but I really hope that modeling problems isn't as challenging as it is here.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group" style="">
<div id="chatlog__message-container-740616106317840474" class="chatlog__message-container " data-message-id="740616106317840474">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:03 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">for reference, here's minilisp's plus primitive
<div class="chatlog__markdown-pre chatlog__markdown-pre--multiline language-c hljs cpp"><span class="hljs-function"><span class="hljs-keyword">static</span> Obj *<span class="hljs-title">prim_plus</span><span class="hljs-params">(Obj *env, Obj *list)</span> </span>{
<span class="hljs-keyword">int</span> sum = <span class="hljs-number">0</span>;
<span class="hljs-keyword">for</span> (Obj *args = eval_list(env, list); args != Nil; args = args-&gt;cdr) {
<span class="hljs-keyword">if</span> (args-&gt;car-&gt;type != TINT)
error(<span class="hljs-string">"+ takes only numbers"</span>);
sum += args-&gt;car-&gt;value;
}
<span class="hljs-keyword">return</span> make_int(sum);
}</div></span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 10:04 AM">(edited)</span>
</div>
</div>
</div>
</div>
</div><div class="chatlog__message-group">
<div id="chatlog__message-container-740616092950593606" class="chatlog__message-container " data-message-id="740616092950593606">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:03 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">My entire understanding of Dreams and Dream-th comes from the first few minutes of your video <span class="chatlog__markdown-mention" title="bvisness#0001">@bvisness</span> but based on my vague understanding of all of it, it seems like it highlights how important organization is for a "computation system"</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740616323624730644" class="chatlog__message-container " data-message-id="740616323624730644">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:04 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">As in - even if Smalltalk did require very similar signals and objects as Dreams, the quality of the model would also be improved by the basic fact that you could probably find an easier way to organize it that isn't available in Dreams.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740616369946492938" class="chatlog__message-container " data-message-id="740616369946492938">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:05 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Interesting, I think you're right</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740617106747293758" class="chatlog__message-container " data-message-id="740617106747293758">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:07 AM">10:07</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">a large part of the complexity in the Dreams version is that since many messages are sent based on physical proximity, objects can really only follow one pointer at a time</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740617150812651520" class="chatlog__message-container " data-message-id="740617150812651520">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:08 AM">10:08</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">which is why I needed separate list walkers, evalers, and value grabbers</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740617303733043333" class="chatlog__message-container " data-message-id="740617303733043333">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:08 AM">10:08</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">if I need to get messages from two things at the same time, I need two objects or I guess I need to travel back and forth and save state along the way</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740617342681350226" class="chatlog__message-container " data-message-id="740617342681350226">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:08 AM">10:08</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">this is obviously a limitation of Dreams and not of other OO models</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740617456015638559" class="chatlog__message-container " data-message-id="740617456015638559">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:09 AM">10:09</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">but; I suppose it's analogous to a limited memory bus or something</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740617564648112188" class="chatlog__message-container " data-message-id="740617564648112188">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:09 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Yeah or the "tape" of the classical Turing Machine definition.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740617826494185504" class="chatlog__message-container " data-message-id="740617826494185504">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:10 AM">10:10</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">It definitely seems like you had to simultaneously mine out the turing complete part of Dreams <em>and then</em> make a Lisp work on top of it.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740618168887935068" class="chatlog__message-container " data-message-id="740618168887935068">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:12 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">probably</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740618229516599428" class="chatlog__message-container " data-message-id="740618229516599428">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:12 AM">10:12</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">this has me wanting to go back in and made a couple simplifications</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740618460513566791" class="chatlog__message-container " data-message-id="740618460513566791">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:13 AM">10:13</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I think for example I could make a "memory bus" that is a pair of objects wired together - one that goes to visit the memory address, and one that goes to visit the requester, and that effectively creates a temporary "wire" between them to facilitate messages</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740618541396656249" class="chatlog__message-container " data-message-id="740618541396656249">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:13 AM">10:13</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">it would be fine for there to be only one because execution is sequential</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740618675362463965" class="chatlog__message-container " data-message-id="740618675362463965">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:14 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Ahh interesting.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740618892103254096" class="chatlog__message-container " data-message-id="740618892103254096">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:15 AM">10:15</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">It seems like the "machine" you have right now is literally a <a class="inserted-after" href="https://en.wikipedia.org/wiki/Lisp_machine" target="_blank">lisp machine</a>. Like it has to implement some features that are not usually a part of implementing a Lisp because the underlying layer doesn't even have them (Dreams doesn't give you RAM).</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740619014098649248" class="chatlog__message-container " data-message-id="740619014098649248">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:15 AM">10:15</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">But it's still a machine whose execution and instructions are just defined to be Lisp.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740619034936213534" class="chatlog__message-container " data-message-id="740619034936213534">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:15 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">yeah</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740619357448699954" class="chatlog__message-container " data-message-id="740619357448699954">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:16 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So if that's the case, one thing I would be curious about is the comparison between the complexity of taking a sum on Dreams that way vs building a machine in Dreams with a different architecture.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740619488495534096" class="chatlog__message-container " data-message-id="740619488495534096">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:17 AM">10:17</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Does a stack based machine or a register based machine with a "bytecode" interpretation model take more or less complexity to get up and running?</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740619616807682069" class="chatlog__message-container " data-message-id="740619616807682069">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:17 AM">10:17</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Did Lisp simplify or complicate the design of a machine in Dreams?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740619626853171370" class="chatlog__message-container " data-message-id="740619626853171370">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:17 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I'm not sure if Dreams can take two levels of computers <img loading="lazy" class="chatlog__emoji " alt="😛" title="stuck_out_tongue" src="files\twemoji_1f61b.svg"></span>
</div>
<div class="chatlog__reactions">
<div class="chatlog__reaction" title="brain">
<img class="chatlog__emoji chatlog__emoji--small" alt="brain" src="files/487994603568496650-3FA2C.png" loading="lazy">
<span class="chatlog__reaction-count">1</span>
</div>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740619691906564139" class="chatlog__message-container " data-message-id="740619691906564139">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:18 AM">10:18</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">that's a good question</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740619828162855074" class="chatlog__message-container " data-message-id="740619828162855074">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:18 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Haha yeah I don't mean a Lisp macine <em>on</em> a register machine, just the side-by-side <img loading="lazy" class="chatlog__emoji " alt="😄" title="smile" src="files\twemoji_1f604.svg"></span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740619874824355945" class="chatlog__message-container " data-message-id="740619874824355945">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:18 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I'm not sure to what extent Dreams itself can do sophisticated computations. I haven't really tried, to be honest. For example, I'm not sure how you would implement any kind of recursive function.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740619949986545695" class="chatlog__message-container " data-message-id="740619949986545695">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:19 AM">10:19</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">You don't have a stack, really.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740620001882406973" class="chatlog__message-container " data-message-id="740620001882406973">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:19 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Couldn't you do the y-combinator thing?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740620051534577694" class="chatlog__message-container " data-message-id="740620051534577694">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:19 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><em>googles furiously</em></span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740620085202255874" class="chatlog__message-container " data-message-id="740620085202255874">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:19 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><a href="https://en.wikipedia.org/wiki/Fixed-point_combinator#Fixed_point_combinators_in_lambda_calculus" target="_blank">https://en.wikipedia.org/wiki/Fixed-point_combinator#Fixed_point_combinators_in_lambda_calculus</a></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740620098120843354" class="chatlog__message-container " data-message-id="740620098120843354">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:19 AM">10:19</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I think this is it...</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740620240345497621" class="chatlog__message-container " data-message-id="740620240345497621">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:20 AM">10:20</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">From my understanding--it has been awhile--this allows you to effectively do a recursive function purely from non-recursive functions, <em>as long as</em> you can treat functions as values</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740620765178888253" class="chatlog__message-container " data-message-id="740620765178888253">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:22 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I have tried to understand the fixed-point combinator and I feel like just conceptually - without even trying to describe the computation of it to an actual machine - it is more complicated than the actual implementation details of Dream-th!</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740621058402549782" class="chatlog__message-container " data-message-id="740621058402549782">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:23 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Haha, yeah, that is totally true :P</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740621093454217287" class="chatlog__message-container " data-message-id="740621093454217287">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:23 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">someday I really do need to learn some lambda calculus</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740621491296665661" class="chatlog__message-container " data-message-id="740621491296665661">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:25 AM">10:25</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">so <span class="chatlog__markdown-mention" title="Allen4th#9584">@Allen4th</span> , what would you say are a few takeaways from your work on Splink?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740622219205673060" class="chatlog__message-container " data-message-id="740622219205673060">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:28 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">That's a lot to unpack.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740622424260739243" class="chatlog__message-container " data-message-id="740622424260739243">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:29 AM">10:29</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I sort of struck research gold - not in the sense that Splink is particularly great for anything - but I just happened to find a path where I got to try a lot of really wild stuff.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740622725609160745" class="chatlog__message-container " data-message-id="740622725609160745">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:30 AM">10:30</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I think the thing which almost anyone could learn from is the ideas about evaluation order, and functional vs stateful computations.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740622932702658701" class="chatlog__message-container " data-message-id="740622932702658701">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:31 AM">10:31</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So something I wanted to try in Splink which you can see if you look at the screenshots of it is that each little block is one Lisp expression, and then the evaluation of that Lisp expression is shown at all times right on the block.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740623144976646165" class="chatlog__message-container " data-message-id="740623144976646165">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:31 AM">10:31</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">And since Splink is a "compute engine" not just a programming language + editor, those blocks are actually each separate little units in the compute system. They don't have any concept of global ordering.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740623281387864104" class="chatlog__message-container " data-message-id="740623281387864104">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:32 AM">10:32</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">What that means is it doesn't really make sense to think of a global environment where first block A effects the environment and then block B effects the environment etc.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740623411352699010" class="chatlog__message-container " data-message-id="740623411352699010">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:33 AM">10:33</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">There <em>is</em> still a global environment, but it has to be defined in such a way that order won't matter.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740623816920924321" class="chatlog__message-container " data-message-id="740623816920924321">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:34 AM">10:34</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">The way I did this is to say that all eval just happens in two steps. First each of those blocks gets added to the environment as a "deferred" evaluation, and then when you actually go to evaluate one, if it depends on another block that just means you need to eval that other block. It doesn't matter if A depends on B or B depends on A, they will both see the each other in the environment.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740624127232180305" class="chatlog__message-container " data-message-id="740624127232180305">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:35 AM">10:35</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Then if A depends on B, you will find this out while trying to evaluate A. If B is still in the "deferred" state, you can just try to evaluate B before you evaluate A. This also made it super easy to detect cycles because you can just have A marked as "in-progress" and then if some block tries to eval A again before it finishes you know you hit a cycle.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740624392341553173" class="chatlog__message-container " data-message-id="740624392341553173">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:36 AM">10:36</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Putting all that together once I had a basic understanding of Lisp was surprisingly painless, but the <em>takeaway</em> is that I never really found a way to make it extremely useful as a model of computation.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740624841685729361" class="chatlog__message-container " data-message-id="740624841685729361">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:38 AM">10:38</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Because this forces you to do everything in <em>very</em> strictly functional style ways. I ended up hacking in some ideas to make state work without breaking the assumption that each block has only one possible evaluation, and so I was able to do some RNG stuff with it, but it's still really far from something I could do something useful with.</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 10:38 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740625249220952165" class="chatlog__message-container " data-message-id="740625249220952165">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:40 AM">10:40</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">The standard idea of Lisp with a read-eval-print loop is actually easier to use than this for most purposes. Having the immediate eval for multiple different expressions was really neat - but I suppose (repeating my biggest take away) I am not sure it's practical to make that the <em>core</em> of the compute system.</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 10:40 AM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740625748502511657" class="chatlog__message-container " data-message-id="740625748502511657">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:42 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">That is super interesting. I wonder how much of that can fit into a computing environment that allows for state... Like maybe it is still preferable to have something like the functional real-time evaluation thing for cases where it can be determined that something is an immutable functional computation or something.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740626827030298766" class="chatlog__message-container " data-message-id="740626827030298766">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:46 AM">10:46</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Like it might seem useful to have that model of computation--see Excel--but maybe it isn't a hard problem to support both, and just take what you can get in both stateful computations <em>and</em> functional ones?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740626829685030912" class="chatlog__message-container " data-message-id="740626829685030912">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:46 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Right. There are a lot of neat ideas that I could think of to try "next" if I actually wanted to make Splink useful.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740627195659288626" class="chatlog__message-container " data-message-id="740627195659288626">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:48 AM">10:48</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So one idea is that you just have these "units" or "blocks" that are already in Splink, and the eval of a unit only changes when you change it or a unit it depended on.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740627350697279548" class="chatlog__message-container " data-message-id="740627350697279548">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:48 AM">10:48</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">But then you extend that with a new sort of "unit" maybe called a "program" that explicitly does not have the ability to eval at all times.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740627631472640042" class="chatlog__message-container " data-message-id="740627631472640042">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:49 AM">10:49</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I also have ideas about trying to make a "global environment" a more explicit thing.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740627800117215252" class="chatlog__message-container " data-message-id="740627800117215252">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:50 AM">10:50</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Like if a unit could say "I require that there be a global variable <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">A</span> and <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">B</span> that I can read and modify" then you could "type check" these environments.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740627957034385423" class="chatlog__message-container " data-message-id="740627957034385423">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:51 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Ahhhh interesting...</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740627966844731473" class="chatlog__message-container " data-message-id="740627966844731473">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:51 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">That unit couldn't depend on another unit unless it could pass along knowledge of the global variables - and it could only be called by someone who also had knowledge of those particular variables.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740628117214724247" class="chatlog__message-container " data-message-id="740628117214724247">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:51 AM">10:51</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Then you could say "Here's a program with all it's global variables requirements" "Here's an initial value for those global variables" and then <em>that</em> is something you can treat as purely functional again.</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 10:51 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740628389366333541" class="chatlog__message-container " data-message-id="740628389366333541">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:52 AM">10:52</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">One of the cool things you get if you do have purely functional expressions is that you sort of get a testing system that falls out of the compute system "for free"</span>
</div>
<div class="chatlog__reactions">
<div class="chatlog__reaction" title="thumbsup">
<img class="chatlog__emoji chatlog__emoji--small" alt="👍" src="files/1f44d-B3F5F.svg" loading="lazy">
<span class="chatlog__reaction-count">1</span>
</div>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740628526251638875" class="chatlog__message-container " data-message-id="740628526251638875">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:53 AM">10:53</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">You just have some units that form tests, set up the expression however you want and then check if the evaluation is what you expect.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740628599165681725" class="chatlog__message-container " data-message-id="740628599165681725">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:53 AM">10:53</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Which is why I bothered exploring this in the first place.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740628666144391290" class="chatlog__message-container " data-message-id="740628666144391290">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:53 AM">10:53</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Or "one reason why" I should say.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740628698809761933" class="chatlog__message-container " data-message-id="740628698809761933">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:54 AM">10:54</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">But, yeah, I just don't know how to make it practical.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740629267737739397" class="chatlog__message-container " data-message-id="740629267737739397">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:56 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Yeah definitely makes sense. I am just imagining a C editor or something where you hover over things, and you get two possible results:
1. The value of the functional value, computed in real-time
2. "Indeterminate"</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740629429247541248" class="chatlog__message-container " data-message-id="740629429247541248">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:56 AM">10:56</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">And maybe that allows for the functional tool that tests assertions on pure functions that should always be true, <em>and</em> allows for mutable state.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740629966743666849" class="chatlog__message-container " data-message-id="740629966743666849">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 10:59 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So a C-like that always includes in it's type information of functions the rules about visibility of globals in the function is a very interesting idea.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740630095076786237" class="chatlog__message-container " data-message-id="740630095076786237">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 10:59 AM">10:59</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Then a pure-functional function would just be one with no global visibility.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740630235615330457" class="chatlog__message-container " data-message-id="740630235615330457">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:00 AM">11:00</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">But still you need another step which is the <em>expressions</em> that form the tests. Basically a "test" at least in this sense is a pure-functional function and inputs.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740630683638038691" class="chatlog__message-container " data-message-id="740630683638038691">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:01 AM">11:01</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Another cool thing about explicit global visibility in the type information, when you also imagine putting it into a compute engine instead of a textual language, would be very easy transition paths from global variables to context pointers.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740631396191830026" class="chatlog__message-container " data-message-id="740631396191830026">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:04 AM">11:04</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Transitioning from:
<div class="chatlog__markdown-pre chatlog__markdown-pre--multiline language-C hljs">gl_buffer : GLBuffer;
<span class="hljs-comment">// ...</span>
<span class="hljs-function">proc <span class="hljs-title">render_rect</span><span class="hljs-params">(rect : Rect, color : Color)</span> globals[gl_buffer : GLBuffer]</span>{
<span class="hljs-comment">// ...</span>
}</div>
-&gt;
<div class="chatlog__markdown-pre chatlog__markdown-pre--multiline language-C hljs">RenderCtx :: <span class="hljs-class"><span class="hljs-keyword">struct</span>{</span>
gl_buffer : GLBuffer;
};
<span class="hljs-comment">// ...</span>
<span class="hljs-function">proc <span class="hljs-title">render_rect</span><span class="hljs-params">(ctx : In-Out RenderCtx, rect : Rect, color : Color)</span></span>{
<span class="hljs-comment">// ...</span>
}</div></span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 11:05 AM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740631468950159381" class="chatlog__message-container " data-message-id="740631468950159381">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:05 AM">11:05</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">But anyway - that's fairly far off the topic of things I actually got a chance to try with Splink <img loading="lazy" class="chatlog__emoji " alt="😄" title="smile" src="files\twemoji_1f604.svg"></span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740631531701141504" class="chatlog__message-container " data-message-id="740631531701141504">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 11:05 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">not at all, that's the point of this fishbowl</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740634960251191336" class="chatlog__message-container " data-message-id="740634960251191336">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 11:18 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I just can't wait for <span class="chatlog__markdown-mention" title="nakst#1416">@nakst</span> to be online and tell us about flip</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740638964569866350" class="chatlog__message-container " data-message-id="740638964569866350">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/7181a9d5c0264f3b6d9ed0e8ac1e2825.webp" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="" title="nakst#1416" data-user-id="759536006764167209">nakst</span>
<span class="chatlog__timestamp">Aug 05, 2020 11:34 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">oh yeah I'm here</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740638994244829274" class="chatlog__message-container " data-message-id="740638994244829274">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:34 AM">11:34</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">what do you want to know about <span class="chatlog__markdown-mention" title="bvisness#0001">@bvisness</span> ?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740639145835233340" class="chatlog__message-container " data-message-id="740639145835233340">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 11:35 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Whatever you found interesting about the project!</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740639209202909336" class="chatlog__message-container " data-message-id="740639209202909336">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:35 AM">11:35</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Certainly I think it's already amazing that we had an OS entered into our jam</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740639290194657341" class="chatlog__message-container " data-message-id="740639290194657341">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:36 AM">11:36</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I'm curious how long it took just to get something off the ground</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740639355193786408" class="chatlog__message-container " data-message-id="740639355193786408">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:36 AM">11:36</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">but also I'm curious what you liked and disliked about the result, any surprising new discoveries, whatever</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740639572534362122" class="chatlog__message-container " data-message-id="740639572534362122">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/7181a9d5c0264f3b6d9ed0e8ac1e2825.webp" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="" title="nakst#1416" data-user-id="759536006764167209">nakst</span>
<span class="chatlog__timestamp">Aug 05, 2020 11:37 AM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So ... it's not actually that hard to make a single tasking 16-bit OS for x86, since the BIOS can do most of the heavy lifting for you (disk/floppy access, graphics, keyboard input)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740639741288120410" class="chatlog__message-container " data-message-id="740639741288120410">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:37 AM">11:37</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I had got a working environment to start write the lisp interpreter within only a few hours.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740639962587725914" class="chatlog__message-container " data-message-id="740639962587725914">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:38 AM">11:38</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">From there, it took a few days to write the base interpreter. I was mostly using the design of <a class="inserted-after" href="https://github.com/rxi/fe" target="_blank">rxi's fe</a>, with some small changes.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740640582942064711" class="chatlog__message-container " data-message-id="740640582942064711">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:41 AM">11:41</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">One thing that I thought worked out quite nicely was memory management. All objects are stored in a 64KB block on memory, and all string segments are stored in another 64KB block. So I could set 2 segment registers (fs/gs) at the start of the program to access objects and strings respectively. Therefore a pointer to an object can fit in 2 bytes, and you don't have to add an offset to it, just use the correct segment register</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740641324213993543" class="chatlog__message-container " data-message-id="740641324213993543">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:44 AM">11:44</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">On the lisp side of things, I knew that adding string manipulation builtins was going to be difficult. In the rxi-fe design, strings exist as a linked list of small sections of the string (in flip, each section is 8 bytes: a 2 byte next pointer (qword aligned, so 3 bits spare for misc flags), and 6 ascii chars). So it's not very easy to do things like take a substring, or index individual characters.
What I decided to do was use a Unix pipes inspired approach ...</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740641884912877599" class="chatlog__message-container " data-message-id="740641884912877599">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:46 AM">11:46</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">For example, when you read a file, <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">[read "my file.txt"]</span> then the contents of the file is written to the terminal. If you want to store the contents of the file in a string, then you can use the <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">capture</span> builtin, which "captures" whatever is being output to the terminal, e.g. <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">[capture [read "my file.txt"]]</span> returns a string with the contents of the file. This extends to being able to capture anything, e.g. <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">[capture [print [+ 30 50]]</span> will create a string with "80" written in ASCII</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740642197203845222" class="chatlog__message-container " data-message-id="740642197203845222">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:47 AM">11:47</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">writing to a file does something similar, it will "capture" anything that's printed, and write it to the file. so to copy a file, you do <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">[write "file 2.txt" [read "file 1.txt"]]</span>. the <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">read</span> builtin streams out all the data in the file (in buffered chunks), and the <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">write</span> builtin captures it, and writes it to the second file</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740642332868870156" class="chatlog__message-container " data-message-id="740642332868870156">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:48 AM">11:48</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">this is really nice because it requires basically no memory (other than some small buffers), to be able to do fairly complex string operations</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740642413982515210" class="chatlog__message-container " data-message-id="740642413982515210">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:48 AM">11:48</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">concatenating strings is just printing them both, and capture in a single string: <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">[capture [print string1] [print string2]]</span></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740642949779554385" class="chatlog__message-container " data-message-id="740642949779554385">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:50 AM">11:50</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">to upper case string, there is a special capture command that upper-cases anything passed in: <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">[capture-upper [print "hello"]]</span> makes string object containing "HELLO". similar for lower case. I wanted to upper case a "pipe" function, so instead you'd do <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">[capture [to-upper [print "hello"]]]</span>, where <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">to-upper</span> converts what's being sent through the stream to upper case, without having to store it in a string. that makes it more composable, so if you just wanted to print a string in upper case, you'd do <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">[to-upper [print "hello"]]</span>, rather than having to store it in an intermediate strings... however I ran out of time before I could implement this</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740643101265100882" class="chatlog__message-container " data-message-id="740643101265100882">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:51 AM">11:51</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">to make a substring, there is a just a special command to print a substring <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">[print-substr "hello world" 3 5] </span> prints "lo wo" (although I can't remember the exact order of the arguments)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740644101535432714" class="chatlog__message-container " data-message-id="740644101535432714">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:55 AM">11:55</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">All these streaming functions were really easy to implement, actually!
for example, here is the <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">capture</span> builtin code (simplified slightly)
<div class="chatlog__markdown-pre chatlog__markdown-pre--multiline language-asm">do_builtin_capture:
; Push the old stream callback and its data onto the stack.
push word [print_callback]
push word [print_data]
; Set our callback.
mov word [print_callback],capture_string
; ... create empty string object ...
; (omitted)
; Store string as our callback data.
mov [print_data],dx
; ... evaluate next argument ...
; (omitted)
; Restore previous stream callback.
pop word [print_data]
pop word [print_callback]
ret
capture_string:
; The callback!
; Read each character..
lodsb
or al,al
jz .done
; And append it to the string.
mov bx,[print_data]
push si
call string_append_character
pop si
mov [print_data],bx
jmp capture_string
.done: ret</div>
all that you have to do to receive data, is save the old callback, update the callback to your callback, and then restore the previous one once your builtin finishes</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740644354430861385" class="chatlog__message-container " data-message-id="740644354430861385">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:56 AM">11:56</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">the builtins that write data to the stream just use the standard printing functions</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740644537810157609" class="chatlog__message-container " data-message-id="740644537810157609">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 11:56 AM">11:56</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">that's all I really have to report, I think. Unless people have questions?</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740646435950690406" class="chatlog__message-container " data-message-id="740646435950690406">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 12:04 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I really like the idea of lisp functions that operate on streams</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740646528690946115" class="chatlog__message-container " data-message-id="740646528690946115">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/7181a9d5c0264f3b6d9ed0e8ac1e2825.webp" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="" title="nakst#1416" data-user-id="759536006764167209">nakst</span>
<span class="chatlog__timestamp">Aug 05, 2020 12:04 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">rough breakdown of lines count (~5700)
30% interpreter core
15% OS stuff, error handling
30% builtins
20% IO, filesystems
5% actual lisp code (the included programs)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740646645825536132" class="chatlog__message-container " data-message-id="740646645825536132">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 12:05 PM">12:05</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><span class="chatlog__markdown-mention" title="bvisness#0001">@bvisness</span> yeah, it worked out really nice, even though it was just initially a hack to get file IO working without <s>proper</s> traditional string manipulation</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 12:05 PM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740646751467339847" class="chatlog__message-container " data-message-id="740646751467339847">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 12:05 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">that already looks like a far more pleasant shell than any I've ever used</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740646856656158750" class="chatlog__message-container " data-message-id="740646856656158750">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 12:06 PM">12:06</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I wonder what it would take to apply that shell design to an existing operating system</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group" style="">
<div id="chatlog__message-container-740647200874561717" class="chatlog__message-container " data-message-id="740647200874561717">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/7181a9d5c0264f3b6d9ed0e8ac1e2825.webp" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="" title="nakst#1416" data-user-id="759536006764167209">nakst</span>
<span class="chatlog__timestamp">Aug 05, 2020 12:07 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">also, my favourite feature in the shell :)</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 12:07 PM">(edited)</span>
</div>
<div class="chatlog__attachment " onclick="">
<video class="chatlog__attachment-media" controls="">
<source src="files/matching_braces-4334F.mp4" alt="Video attachment" title="Video: matching_braces.mp4 (29.29 KB)">
</video>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740648258124120165" class="chatlog__message-container " data-message-id="740648258124120165">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 12:11 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">man, for the rest of the week now I'm gonna be frustrated with my shell for not being lisp</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740648512374571029" class="chatlog__message-container " data-message-id="740648512374571029">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/7181a9d5c0264f3b6d9ed0e8ac1e2825.webp" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="" title="nakst#1416" data-user-id="759536006764167209">nakst</span>
<span class="chatlog__timestamp">Aug 05, 2020 12:12 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">it sure would be nice to have a shell where i actually knew how to evaluate arithmetic expression <img loading="lazy" class="chatlog__emoji " alt="😆" title="laughing" src="files\twemoji_1f606.svg"></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740649068551864360" class="chatlog__message-container " data-message-id="740649068551864360">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 12:14 PM">12:14</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">i have given up on linux, and just started using firefox as a calculator...</span>
</div>
<div class="chatlog__attachment " onclick="">
<a href="files/unknown-905D8.png" target="_blank">
<img class="chatlog__attachment-media" src="files/unknown-905D8.png" alt="Image attachment" title="Image: unknown.png (9.56 KB)" loading="lazy">
</a>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740649982545363095" class="chatlog__message-container " data-message-id="740649982545363095">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 12:18 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">well bash is the only programming environment I've ever used where I have to look up the syntax of if statements literally every time</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740650016313442343" class="chatlog__message-container " data-message-id="740650016313442343">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 12:18 PM">12:18</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">it's a syntactic nightmare</span>
</div>
<div class="chatlog__reactions">
<div class="chatlog__reaction" title="point_up">
<img class="chatlog__emoji chatlog__emoji--small" alt="☝️" src="files/261d-3A498.svg" loading="lazy">
<span class="chatlog__reaction-count">1</span>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740661873476894843" class="chatlog__message-container " data-message-id="740661873476894843">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 01:05 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Pitch: Lispish language, compiles to shell and batch, maybe a virtual machine debugger too</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740662233717145681" class="chatlog__message-container " data-message-id="740662233717145681">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:07 PM">13:07</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">If I was going to make more progress on Splink, I think I would experiment with a lisp debugger, as I think you could do some pretty useful stuff there given that it is specialized to a Lisp interpretation machine.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740662478584807504" class="chatlog__message-container " data-message-id="740662478584807504">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:08 PM">13:08</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">And having a cross OS shell script and better shell script debugging is something I think would be super useful.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740666360270422026" class="chatlog__message-container " data-message-id="740666360270422026">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 01:23 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">shell scripts are such important glue in so many areas, and yet they are always done in just the worst programming languages</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740666448686350428" class="chatlog__message-container " data-message-id="740666448686350428">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:24 PM">13:24</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I would love to see a richer shell environment that way</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740666676495908955" class="chatlog__message-container " data-message-id="740666676495908955">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:24 PM">13:24</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">and, if you allow people to omit parentheses on the outermost thing, the basic experience probably wouldn't be that different</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740666748164112455" class="chatlog__message-container " data-message-id="740666748164112455">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:25 PM">13:25</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">(I dunno if it's a bad idea to allow people to omit parentheses.)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740667107502588055" class="chatlog__message-container " data-message-id="740667107502588055">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:26 PM">13:26</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So one thing I'm curious about is if the work people did on these projects changed their opinion of Lisp at all, given that we certainly don't see much of it around here.</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 01:27 PM">(edited)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740667480585797754" class="chatlog__message-container " data-message-id="740667480585797754">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:28 PM">13:28</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I went from not understanding it and thinking it was hard to read, to seeing a lot of new value in it (but also that is hard to read)</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740668027154202664" class="chatlog__message-container " data-message-id="740668027154202664">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:30 PM">13:30</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I wouldn't really say that my opinion changed, but I certainly learned a lot about it.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740670926642872393" class="chatlog__message-container " data-message-id="740670926642872393">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 01:41 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So I spent the last few days of my work on Splink more focused on trying to use it to see if it was any good and I definitely came away from it seeing the some real issues with Lisp.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740671191739793429" class="chatlog__message-container " data-message-id="740671191739793429">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:42 PM">13:42</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I think the basic concept that your built ins are just special types of "nodes" that have built in apply rules is cool, and the idea of a <a class="inserted-after" href="https://en.wikipedia.org/wiki/Macro_(computer_science)" target="_blank">macro</a> as just an apply form that doesn't eval it's arguments etc. is cool too.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740671344232104007" class="chatlog__message-container " data-message-id="740671344232104007">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:43 PM">13:43</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">It has the flexibility/power to define all sorts of things, but it's also important to examine how difficult it is to actually define anything with it.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740671557872910387" class="chatlog__message-container " data-message-id="740671557872910387">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:44 PM">13:44</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So like, the super powerful version of a macro lets you say something like "read this variable, do some math, then store a new value for this variable that is visible in <em>my</em> environment not just yours"</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740671728648454235" class="chatlog__message-container " data-message-id="740671728648454235">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:45 PM">13:45</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">To actually do this a macro in Splink (and I think in most Lisps? Not sure) has to return a Lisp AST that then gets evaluated in the caller's context.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740671933678616717" class="chatlog__message-container " data-message-id="740671933678616717">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:45 PM">13:45</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">But that makes it really hard to correctly write the body of a macro because the thing you actually have to construct looks so different from the code you would have to write in-line to achieve the same effect.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740672142168817815" class="chatlog__message-container " data-message-id="740672142168817815">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:46 PM">13:46</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve"><span class="chatlog__markdown-pre chatlog__markdown-pre--inline">(:= x (+ x 1))</span> becomes (and this is probably wrong but it's something like this) <span class="chatlog__markdown-pre chatlog__markdown-pre--inline">(list := arg (list + arg 1))</span></span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740672744848359475" class="chatlog__message-container " data-message-id="740672744848359475">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:49 PM">13:49</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">And then if you want your macro to have rules like, "please eval this argument but not this" or, "put this define in the caller's context but not this one" it's super confusing and would take me hours of tinkering with recursion, and lists, and quotes, just to finally get to the pattern I wanted.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740672945357324298" class="chatlog__message-container " data-message-id="740672945357324298">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:49 PM">13:49</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Point is I think it is a system that stands out for the depth to which it can modify itself. But it fails in the important criteria of making things which seem like they should be trivial, actually be trivial.</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 01:50 PM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740673089125351495" class="chatlog__message-container " data-message-id="740673089125351495">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 01:50 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">So how might you choose to fix some of those issues? Or do I need to wait for <a class="inserted-after" href="https://handmade-seattle.com/" target="_blank">Handmade Seattle</a> <img loading="lazy" class="chatlog__emoji " alt="😛" title="stuck_out_tongue" src="files\twemoji_1f61b.svg"></span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740673305568084040" class="chatlog__message-container " data-message-id="740673305568084040">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 01:51 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Haha well I am not sure exactly, but to put it simply I think doing everything as sort of fixed expression functional style stuff makes it harder than it needs to be.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740673548829327492" class="chatlog__message-container " data-message-id="740673548829327492">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:52 PM">13:52</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">A typed procedural thing might be more verbose, but it'd be easier to see that a particular macro is saying "here's the root of my tree" "here's where I evaluate and save the result for the first argument" "here's where I ..." you get the point.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740673641288564766" class="chatlog__message-container " data-message-id="740673641288564766">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:52 PM">13:52</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">At least for me, just being able to think about my lists and trees in a typed procedural language would have been a lot more effective.</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 01:52 PM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740673720057593926" class="chatlog__message-container " data-message-id="740673720057593926">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 01:52 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">sure</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740673990485606460" class="chatlog__message-container " data-message-id="740673990485606460">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:54 PM">13:54</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">did working with Splink change your thinking at all on the "homoiconicity" thing? (which I will define as heavy use of simple, uniform building blocks)</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 01:54 PM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740674041358188566" class="chatlog__message-container " data-message-id="740674041358188566">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 01:54 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Yes and no.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740674086828769361" class="chatlog__message-container " data-message-id="740674086828769361">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:54 PM">13:54</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Given your definition, I was already a huge fan of that pattern going into Splink.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740674159775973516" class="chatlog__message-container " data-message-id="740674159775973516">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:54 PM">13:54</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">But I also don't necessarily think that's exactly a useful definition of homoiconicity.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740674286729035876" class="chatlog__message-container " data-message-id="740674286729035876">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:55 PM">13:55</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">But certainly I came out of it with an even deeper appreciation of how far you can go with a few basic building blocks.</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740674452538261534" class="chatlog__message-container " data-message-id="740674452538261534">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 01:55 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I didn't want to define it as "everything uses exactly one form" because I think we disputed whether that was even true of Lisp during the jam</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740674833674928196" class="chatlog__message-container " data-message-id="740674833674928196">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e5e2a49a0e3cc3c43b4b79168dcb4da1-B0325.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="Allen4th#9584" data-user-id="273134589000810496">Allen4th</span>
<span class="chatlog__timestamp">Aug 05, 2020 01:57 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">For instance, I now am fairly convinced that something like Splink would be a really useful way to construct a "typer" for a C-Like that has to simultaneously figure out the sizes/offsets of type members, resolve the constant expressions of arrays, and check the types of everything along the way. I realized that doing that is quite similar to what Splink has to do, and that maybe building the typer out of a single "lego brick" rather than a specialized piece for each thing would make a lot of sense.</span>
</div>
</div>
</div>
</div>
<div id="chatlog__message-container-740675019272617984" class="chatlog__message-container " data-message-id="740675019272617984">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<div class="chatlog__short-timestamp" title="05-Aug-20 01:58 PM">13:58</div>
</div>
<div class="chatlog__message-primary">
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">Right, my take away on the word homoiconicity is more or less that I don't know what it means, but it vaguely means "those things that are special about Lisp"</span>
<span class="chatlog__edited-timestamp" title="05-Aug-20 01:58 PM">(edited)</span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740675131109802185" class="chatlog__message-container " data-message-id="740675131109802185">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/1963eacbf364164efce1c597dc66aeab-E6901.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(250, 186, 71)" title="bvisness#0001" data-user-id="132715550571888640">bvisness</span>
<span class="chatlog__timestamp">Aug 05, 2020 01:58 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">therefore lisp is the most homoiconic possible language <img loading="lazy" class="chatlog__emoji " alt="😛" title="stuck_out_tongue" src="files\twemoji_1f61b.svg"></span>
</div>
</div>
</div>
</div>
</div>
<div class="chatlog__message-group">
<div id="chatlog__message-container-740707017752314078" class="chatlog__message-container " data-message-id="740707017752314078">
<div class="chatlog__message">
<div class="chatlog__message-aside">
<img class="chatlog__avatar" src="files/e666f2aa4fa50eade7484de6a45639dc-A5D0D.png" alt="Avatar" loading="lazy">
</div>
<div class="chatlog__message-primary">
<div class="chatlog__header">
<span class="chatlog__author" style="color: rgb(52, 152, 219)" title="ryanfleury#4528" data-user-id="137051765328576512">ryanfleury</span>
<span class="chatlog__timestamp">Aug 05, 2020 04:05 PM</span>
</div>
<div class="chatlog__content chatlog__markdown">
<span class="chatlog__markdown-preserve">I think that'll probably do it for this Fishbowl discussion. Thanks everyone for participating, it was a really interesting discussion!
<strong>End of Fishbowl Day 3, thanks everyone for participating!</strong>
(check pinned messages for conversation start)</span>
</div>
</div>
</div>
</div>
</div>
</div>