shakedown.social is one of the many independent Mastodon servers you can use to participate in the fediverse.
A community for live music fans with roots in the jam scene. Shakedown Social is run by a team of volunteers (led by @clifff and @sethadam1) and funded by donations.

Administered by:

Server stats:

285
active users

#concatenative

0 posts0 participants0 posts today
and Null<p>Tabby's got complex pattern matching over structures. There is a lot of code to clean up after adding this, but it's functional</p><p><a href="https://catlang.social/tags/TabbyPL" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TabbyPL</span></a> <a href="https://catlang.social/tags/Rewriting" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Rewriting</span></a> <a href="https://catlang.social/tags/Concatenative" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Concatenative</span></a></p>
Karsten Schmidt<p>Always very much liked the categorical and implicit data-first approach in <a href="https://mastodon.thi.ng/tags/Forth" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Forth</span></a> and other <a href="https://mastodon.thi.ng/tags/concatenative" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>concatenative</span></a> languages. To me it's such a clear &amp; direct representation of the fundamental principle of computing, i.e. chainable sequence(s) of Input→Process→Output and most problems just become about managing the flow of data and the intermediate shapes it will (and have to) take on before a "final" result is produced (in that sense it's also very closely related to node-based visual programming)...</p><p>The simplicity (in the Hickey-ian sense) of the approach/syntax is very much counter to more mainstream langs (esp. C-like langs) and also removes worrying about operator precedence, quirky irregular syntax rules (like all sorts of parantheses, punctuations, semantic whitespace etc.) and much more focuses the mind to come up with small "words" (and to refactor them) expressing the desired data-flow/shapes as concisely and as expressive as needed...</p><p><a href="https://mastodon.thi.ng/tags/Forth" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Forth</span></a>:<br>`data1 data2 op1 data3 op2 op3`</p><p><a href="https://mastodon.thi.ng/tags/Lisp" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Lisp</span></a>:<br>`(op3 (op2 (op1 data1 data2) data3))`</p><p><a href="https://mastodon.thi.ng/tags/Clojure" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Clojure</span></a>'s threading op:<br>`(-&gt; data1 (op1 data2) (op2 data3) (op3))`</p><p>C-like:<br>`op3(data1 op1 data2 op2 data3)` or<br>`op3(op2(op1(data1, data2), data3))`</p><p>OOP fluid interface:<br>`wrapper(data1).op1(data2).op2(data3).op3()`</p><p>(That's not even mentioning here that as in Functional Programming, Forth ops/words/functions can also be treated as data, combined/composed, (re)assembled into larger processes/flows, transformed and lazily executed... additionally, most Forth's have the concept of immediate words, which are never lazy, but I digress...)</p><p><a href="https://mastodon.thi.ng/tags/RandomReflections" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>RandomReflections</span></a> <a href="https://mastodon.thi.ng/tags/Programming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Programming</span></a></p>
Karsten Schmidt<p><a href="https://mastodon.thi.ng/tags/HowToThing" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>HowToThing</span></a> #029 — One for the <a href="https://mastodon.thi.ng/tags/Forth" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Forth</span></a> friends: Minimal livecoding playground for animated 2D geometry generation (incl. SVG export) using a Forth-like DSL (domain-specific language) based on <a href="https://thi.ng/pointfree" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/pointfree</span><span class="invisible"></span></a>, <a href="https://thi.ng/pointfree-lang" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/pointfree-lang</span><span class="invisible"></span></a> and various geometry related operations using <a href="https://thi.ng/geom" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="">thi.ng/geom</span><span class="invisible"></span></a>. A short screen recording is included to demonstrate overall usage. This is a cutdown version of a prototype tool, originally from 2019...</p><p>Even though the language is "Forthy", the underlying thi.ng/pointfree implementation does _not_ use a VM, but instead compiles words to vanilla JavaScript using normal functional composition (or reductions) and each word is passing data &amp; state via a single shared stack context object (with the usual dual data &amp; return stacks and an environment object with var bindings). The language supports quotations, local variables, combinators etc.</p><p>I _highly_ recommend consulting the detailed readme docs for the above packages to familiarize yourself with the basic principles &amp; language features/syntax. If you do have some prior <a href="https://mastodon.thi.ng/tags/Forth" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Forth</span></a> knowledge, many aspects should feel familiar (apart from the geometry DSL terms)...</p><p>Also worth pointing out that the editor/interpreter in this small example is not super forgiving re: error handling and might easily crash when live coding. The point of this demo is not about providing great UX, but to illustrate how the basic thi.ng/pointfree language infrastructure can be easily extended/adapted/integrated...</p><p>Demo:<br><a href="https://demo.thi.ng/umbrella/pointfree-geom/" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">demo.thi.ng/umbrella/pointfree</span><span class="invisible">-geom/</span></a></p><p>Source code:<br><a href="https://github.com/thi-ng/umbrella/tree/develop/examples/pointfree-geom/src" rel="nofollow noopener noreferrer" translate="no" target="_blank"><span class="invisible">https://</span><span class="ellipsis">github.com/thi-ng/umbrella/tre</span><span class="invisible">e/develop/examples/pointfree-geom/src</span></a></p><p>(Note: The source code of the actual language bindings for the geometry operations is not shown here, but available in the `lang.ts` file, linked above...)</p><p><a href="https://mastodon.thi.ng/tags/Forth" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Forth</span></a> <a href="https://mastodon.thi.ng/tags/Pointfree" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Pointfree</span></a> <a href="https://mastodon.thi.ng/tags/Concatenative" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Concatenative</span></a> <a href="https://mastodon.thi.ng/tags/Programming" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Programming</span></a> <a href="https://mastodon.thi.ng/tags/Geometry" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Geometry</span></a> <a href="https://mastodon.thi.ng/tags/Graphics" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Graphics</span></a> <a href="https://mastodon.thi.ng/tags/SVG" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>SVG</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a> <a href="https://mastodon.thi.ng/tags/GenerativeDesign" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeDesign</span></a> <a href="https://mastodon.thi.ng/tags/TypeScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>TypeScript</span></a> <a href="https://mastodon.thi.ng/tags/JavaScript" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>JavaScript</span></a> <a href="https://mastodon.thi.ng/tags/ThingUmbrella" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>ThingUmbrella</span></a></p>
Karsten Schmidt<p>8 years ago I partially started going back to my roots to begin working on a number of <a href="https://mastodon.thi.ng/tags/Forth" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>Forth</span></a> based DSLs &amp; REPLs for livecoding... not just for audio/music, but also <a href="https://mastodon.thi.ng/tags/GenerativeArt" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>GenerativeArt</span></a>, <a href="https://mastodon.thi.ng/tags/shaders" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>shaders</span></a>, <a href="https://mastodon.thi.ng/tags/geometry" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>geometry</span></a> and GUI/layout generation. Even today, I still think Forth-like <a href="https://mastodon.thi.ng/tags/concatenative" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>concatenative</span></a> languages have unique potential &amp; freedoms and are severely under-explored in all of those domains mentioned. Even though all of the examples in this thread are early, pretty rough prototypes, I'd like to share some videos/screenrecs of my previous research, maybe also to inspire others exploring this approach of programming more...</p><p>First off, a <a href="https://mastodon.thi.ng/tags/WebAudio" class="mention hashtag" rel="nofollow noopener noreferrer" target="_blank">#<span>WebAudio</span></a> prototype from 2015, made in the browser REPL at <a href="http://forth.thi.ng" rel="nofollow noopener noreferrer" target="_blank"><span class="invisible">http://</span><span class="">forth.thi.ng</span><span class="invisible"></span></a> (audio starts at ~2:15)</p><p>There's only a single audio buffer used here (boilerplate setup for that in the first 2 mins of the video) and all subsequent operations just write to that buffer or manipulate its contents...</p><p>1/4</p>