<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title>Why Scratch and Assembly are alike - eso.chipmunk.land</title>
	<link href="https://eso.chipmunk.land/9/why-scratch-and-assembly-are-alike/" rel="alternate"/>
	<subtitle>assembly, lowlevel, programming, scratch, technology</subtitle>	<id>https://eso.chipmunk.land/feed/conversation/9/</id>
	<updated>2026-07-01T19:08:35Z</updated>
	<generator>esoBB</generator>
	<entry>
		<title>max</title>
		<link href="https://eso.chipmunk.land/post/192/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/192/</id>
		<updated>2026-07-01T19:08:35Z</updated>
		<author>
			<name>max</name>
		</author>
		<content type="html"><![CDATA[<blockquote><p><cite>Parker2991 - <a href='https://eso.chipmunk.land/post/191/' class='postLink'>go to this post</a></cite></p><p>now thinking of it, it reminds me of json</p></blockquote><p>Well JSON does kinda stand for JavaScript Object Notation.</p>]]></content>
	</entry>
	<entry>
		<title>Parker2991</title>
		<link href="https://eso.chipmunk.land/post/191/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/191/</id>
		<updated>2026-07-01T18:25:16Z</updated>
		<author>
			<name>Parker2991</name>
		</author>
		<content type="html"><![CDATA[<blockquote><p><cite>max - <a href='https://eso.chipmunk.land/post/189/' class='postLink'>go to this post</a></cite></p><p>I&#39;ve only taken a brief look at Nix but it quite frankly makes me think of JavaScript, and maybe other languages I&#39;ve worked with like Python, Lua, PHP, and more.<br/>Most programming languages you&#39;ll encounter have taken some inspiration from C. All sorts of syntax like <code>my_function()</code>,  <code>a == b</code>,  <code>a || b</code>, <code>int example = 1;</code>,  <code>/* this is a comment */</code>  can be seen in C but also other languages like Java.<br/>I doubt C was the original source for all of it, but I wouldn&#39;t really know. Still, I wouldn&#39;t be surprised if it&#39;s where the other languages sourced their ideas from. Runtimes/interpreters/etc are often written in C and maybe also C++ which was derived from it too.</p></blockquote><p>now thinking of it, it reminds me of json</p>]]></content>
	</entry>
	<entry>
		<title>max</title>
		<link href="https://eso.chipmunk.land/post/190/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/190/</id>
		<updated>2026-07-01T18:25:07Z</updated>
		<author>
			<name>max</name>
		</author>
		<content type="html"><![CDATA[<p>Also I now remember that Scratch <i>technically</i> does have a stack, but only for custom block calls and such AFAIK.</p>]]></content>
	</entry>
	<entry>
		<title>max</title>
		<link href="https://eso.chipmunk.land/post/189/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/189/</id>
		<updated>2026-07-01T18:22:21Z</updated>
		<author>
			<name>max</name>
		</author>
		<content type="html"><![CDATA[<blockquote><p><cite>Parker2991 - <a href='https://eso.chipmunk.land/post/180/' class='postLink'>go to this post</a></cite></p><p>naw naw naw nix and c feel similar even though i never used c i have only seen it</p></blockquote><p>I&#39;ve only taken a brief look at Nix but it quite frankly makes me think of JavaScript, and maybe other languages I&#39;ve worked with like Python, Lua, PHP, and more.<br/>Most programming languages you&#39;ll encounter have taken some inspiration from C. All sorts of syntax like <code>my_function()</code>,  <code>a == b</code>,  <code>a || b</code>, <code>int example = 1;</code>,  <code>/* this is a comment */</code>  can be seen in C but also other languages like Java.<br/>I doubt C was the original source for all of it, but I wouldn&#39;t really know. Still, I wouldn&#39;t be surprised if it&#39;s where the other languages sourced their ideas from. Runtimes/interpreters/etc are often written in C and maybe also C++ which was derived from it too.</p>]]></content>
	</entry>
	<entry>
		<title>Parker2991</title>
		<link href="https://eso.chipmunk.land/post/185/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/185/</id>
		<updated>2026-07-01T13:31:14Z</updated>
		<author>
			<name>Parker2991</name>
		</author>
		<content type="html"><![CDATA[<blockquote><p><cite>Plovie - <a href='https://eso.chipmunk.land/post/183/' class='postLink'>go to this post</a></cite></p><p>Well, I hadn&#39;t seen much Nix before, but from a quick look, the C similarity seems pretty superficial. Nix is a high-level, lazy, purely functional DSL – much closer in spirit to Haskell than to C.</p></blockquote><p>ic</p>]]></content>
	</entry>
	<entry>
		<title>Plovie</title>
		<link href="https://eso.chipmunk.land/post/183/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/183/</id>
		<updated>2026-07-01T11:47:34Z</updated>
		<author>
			<name>Plovie</name>
		</author>
		<content type="html"><![CDATA[<blockquote><p><cite>Parker2991 - <a href='https://eso.chipmunk.land/post/180/' class='postLink'>go to this post</a></cite></p><p>naw naw naw nix and c feel similar even though i never used c i have only seen it</p></blockquote><p>Well, I hadn&#39;t seen much Nix before, but from a quick look, the C similarity seems pretty superficial. Nix is a high-level, lazy, purely functional DSL – much closer in spirit to Haskell than to C.</p>]]></content>
	</entry>
	<entry>
		<title>Parker2991</title>
		<link href="https://eso.chipmunk.land/post/180/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/180/</id>
		<updated>2026-07-01T07:18:47Z</updated>
		<author>
			<name>Parker2991</name>
		</author>
		<content type="html"><![CDATA[<p>naw naw naw nix and c feel similar even though i never used c i have only seen it</p>]]></content>
	</entry>
	<entry>
		<title>max</title>
		<link href="https://eso.chipmunk.land/post/134/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/134/</id>
		<updated>2026-06-27T04:27:19Z</updated>
		<author>
			<name>max</name>
		</author>
		<content type="html"><![CDATA[<blockquote><p><cite>Plovie - <a href='https://eso.chipmunk.land/post/132/' class='postLink'>go to this post</a></cite></p><p>Sounds more like pub/sub or message dispatch, with the broadcast names acting as topics/labels.</p></blockquote><p>I suppose so. Broadcasts also spawn new &quot;threads&quot; (and are sometimes used for background tasks).</p><blockquote><p>Aaaaaaand if they keep going in that direction, it might eventually turn into a block-based Lisp dialect ;)</p></blockquote><p>That reminds me, Scratch 2.0 projects are encoded into a lisp-like JSON format. For instance, ((timer) &gt; (20)) is [&quot;&gt;&quot;, [&quot;timer&quot;], &quot;20&quot;] I think.</p>]]></content>
	</entry>
	<entry>
		<title>Plovie</title>
		<link href="https://eso.chipmunk.land/post/132/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/132/</id>
		<updated>2026-06-27T04:01:32Z</updated>
		<author>
			<name>Plovie</name>
		</author>
		<content type="html"><![CDATA[<blockquote><p><cite>max - <a href='https://eso.chipmunk.land/post/131/' class='postLink'>go to this post</a></cite></p><p>Sort of a tangent, but I&#39;d like to note that code (albeit not individual instructions) is addressable in Scratch. The first example to come to mind is how Scratch&#39;s broadcast operation can take an arbitrary broadcast name, effectively letting broadcast names work as addresses; using broadcasts could lead to performance issues though.</p></blockquote><p>Sounds more like pub/sub or message dispatch, with the broadcast names acting as topics/labels.</p><blockquote><p><cite>max - <a href='https://eso.chipmunk.land/post/131/' class='postLink'>go to this post</a></cite></p><p>I also hear that in Scratch 3.0 it&#39;s possible to pass arbitrary custom block names to the procedure call block using input/field shenanigans, though I could be mistaken and either way I forget the details. Either way you can do some crazy stuff with inputs and fields in said version, for instance nesting lists, and that&#39;s only scratching the surface!</p></blockquote><p>Aaaaaaand if they keep going in that direction, it might eventually turn into a block-based Lisp dialect <img src='https://eso.chipmunk.land/js/x.gif' style='background-position:0 -100px' alt=';)' class='emoticon'/></p>]]></content>
	</entry>
	<entry>
		<title>max</title>
		<link href="https://eso.chipmunk.land/post/131/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/131/</id>
		<updated>2026-06-27T03:12:45Z</updated>
		<author>
			<name>max</name>
		</author>
		<content type="html"><![CDATA[<blockquote><p><cite>Plovie - <a href='https://eso.chipmunk.land/post/130/' class='postLink'>go to this post</a></cite></p><p>Based on my very limited experience with both, though, I&#39;d say there&#39;s at least one major difference: Scratch keeps custom blocks and variables pretty clearly separate, while assembly is much closer to the machine level, where addresses, instructions, and data can interact in ways Scratch simply doesn&#39;t allow.</p><p>In Scratch, custom blocks aren&#39;t first-class citizens: you can&#39;t store a custom block in a variable and pass it around. That limits the kinds of abstractions you can build. For example, you can make something that maps a fixed operation over a list, but you can&#39;t really write a fully general <code>map</code> function that takes another function as an argument.</p><p>So while both can feel &quot;low-level&quot; in the sense that you often build things step by step, I wouldn&#39;t say they&#39;re all <i>that</i> alike in terms of abstraction mechanisms.</p><p>Just my two cents.</p></blockquote><p>Indeed, the Scratch VM manages data quite differently. Instead of fixed-size registers everything is a string. There is no single address space for memory; each variable and list more-or-less has its own distinct address space (as accessed with (letter (x) of (y)) or (item (x) of list [y]).<br/>This is sort of similar to a Harvard architecture machine, as the program does not exist in the same address space as its data; most modern computers use von Neumann architecture, which is reflected by their assembly programs.<br/>Still, I had a reason to make this comparison. The idea that something as low-level as assembly and something as high-level (and introductory, even) as Scratch have so many things in common is quite funny to me, especially since most comparisons can&#39;t be made to high-but-lower-level languages (i.e. JavaScript manages a stack, makes data structures easy, etc).</p><p>Sort of a tangent, but I&#39;d like to note that code (albeit not individual instructions) is addressable in Scratch. The first example to come to mind is how Scratch&#39;s broadcast operation can take an arbitrary broadcast name, effectively letting broadcast names work as addresses; using broadcasts could lead to performance issues though.<br/>I also hear that in Scratch 3.0 it&#39;s possible to pass arbitrary custom block names to the procedure call block using input/field shenanigans, though I could be mistaken and either way I forget the details. Either way you can do some crazy stuff with inputs and fields in said version, for instance nesting lists, and that&#39;s only scratching the surface!</p>]]></content>
	</entry>
	<entry>
		<title>Plovie</title>
		<link href="https://eso.chipmunk.land/post/130/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/130/</id>
		<updated>2026-06-27T01:39:43Z</updated>
		<author>
			<name>Plovie</name>
		</author>
		<content type="html"><![CDATA[<p>Based on my very limited experience with both, though, I&#39;d say there&#39;s at least one major difference: Scratch keeps custom blocks and variables pretty clearly separate, while assembly is much closer to the machine level, where addresses, instructions, and data can interact in ways Scratch simply doesn&#39;t allow.</p><p>In Scratch, custom blocks aren&#39;t first-class citizens: you can&#39;t store a custom block in a variable and pass it around. That limits the kinds of abstractions you can build. For example, you can make something that maps a fixed operation over a list, but you can&#39;t really write a fully general <code>map</code> function that takes another function as an argument.</p><p>So while both can feel &quot;low-level&quot; in the sense that you often build things step by step, I wouldn&#39;t say they&#39;re all <i>that</i> alike in terms of abstraction mechanisms.</p><p>Just my two cents.</p>]]></content>
	</entry>
	<entry>
		<title>max</title>
		<link href="https://eso.chipmunk.land/post/18/" rel="alternate"/>
		<id>https://eso.chipmunk.land/post/18/</id>
		<updated>2026-06-22T23:55:13Z</updated>
		<author>
			<name>max</name>
		</author>
		<content type="html"><![CDATA[<p>Here are the reasons</p><ol><li>Assembly has a limited number of registers that can be used to hold values<br/>    1.1. Scratch projects have a limited number of variables that can be used to hold values</li><li>Assembly programs can work with a medium that can store indefinite amounts of addressable data called memory<br/>    2.1. Scratch programs can work with mediums that can store indefinite amounts of addressable data called lists</li><li>Assembly requires you to manually manage a stack, often using PUSH and POP instructions<br/>    3.1. Scratch requires you to manually manage a stack, often using list operations</li><li>In assembly, to pass values to functions you must put the values in specific registers expected by the function, and to return values you must set a register<br/>    4.1. In Scratch, to return values from a custom block or broadcast you must also set a variable, and to pass values to a broadcast you must use variables and/or lists</li><li>Assembly languages often do not include any support for structs, meaning the programmer must implement structures on their own, often by adding offsets to a memory addresses<br/>    5.1. Scratch does not have any support for structs, meaning the programmer must implement structures on their own, often by adding offsets to list indices</li></ol><p>Have I said enough?</p>]]></content>
	</entry>
</feed>
