<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Compiler Spotlight]]></title><description><![CDATA[Programming language showcases and interviews with compiler developers.]]></description><link>https://compilerspotlight.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!m1Fh!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff003735e-3e91-45f6-999e-bb602306d873_476x476.png</url><title>Compiler Spotlight</title><link>https://compilerspotlight.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 05 Oct 2026 02:10:21 GMT</lastBuildDate><atom:link href="https://compilerspotlight.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jeaye Wilkerson]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[compilerspotlight@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[compilerspotlight@substack.com]]></itunes:email><itunes:name><![CDATA[Jeaye Wilkerson]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jeaye Wilkerson]]></itunes:author><googleplay:owner><![CDATA[compilerspotlight@substack.com]]></googleplay:owner><googleplay:email><![CDATA[compilerspotlight@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jeaye Wilkerson]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Language Showcase: Gren]]></title><description><![CDATA[Hi everyone!]]></description><link>https://compilerspotlight.substack.com/p/language-showcase-gren</link><guid isPermaLink="false">https://compilerspotlight.substack.com/p/language-showcase-gren</guid><dc:creator><![CDATA[Jeaye Wilkerson]]></dc:creator><pubDate>Sat, 15 Oct 2022 19:47:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tODT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi everyone! This showcase is oriented around Gren, an Elm-inspired functional language, created by <a href="https://github.com/robinheghan">Robin Heggelund Hansen</a>. He&#8217;s accepting <a href="https://github.com/sponsors/robinheghan">sponsorship</a> for his work, too.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tODT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tODT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png 424w, https://substackcdn.com/image/fetch/$s_!tODT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png 848w, https://substackcdn.com/image/fetch/$s_!tODT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png 1272w, https://substackcdn.com/image/fetch/$s_!tODT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tODT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png" width="290" height="210.32967032967034" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1056,&quot;width&quot;:1456,&quot;resizeWidth&quot;:290,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;https://gren-lang.org/bigbird.png&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="https://gren-lang.org/bigbird.png" title="https://gren-lang.org/bigbird.png" srcset="https://substackcdn.com/image/fetch/$s_!tODT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png 424w, https://substackcdn.com/image/fetch/$s_!tODT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png 848w, https://substackcdn.com/image/fetch/$s_!tODT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png 1272w, https://substackcdn.com/image/fetch/$s_!tODT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F271e8b04-e2e4-4a01-b4f9-6de91b86d6e6_1953x1416.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h3>How would you describe Gren to the average programmer?</h3><p>Gren tries to take the most important ideas from pure functional programming languages and present them in an easy-to-learn language which can be used for pretty much anything.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://compilerspotlight.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Compiler Spotlight! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>If you've heard of Elm, Gren is quite similar (in fact, it started as a fork of Elm), but we intend to support back-end development starting with our next release in December 2022.</p><p>If you haven't heard of Elm, or pure functional programming in general, it's a way of writing code that has no side effects. Side effects are things like mutations, exceptions, HTTP calls, file IO etc. These things are necessary for any real-world programming, and pure functional programming doesn't remove them from your toolset. Instead, pure functional programming makes you focus on the actions leading up to, and which come after, a particular side effect. In other words, the code you write doesn't contain side effects, even though your application does.</p><p>Another common trait of pure functional programming languages is that they have a strict, but flexible, static type system. This type system lets you model exceptional situations as type errors, instead of runtime exceptions. So, NullPointerExceptions don't exist in Gren; they&#8217;re a type error instead. Not handling an HTTP timeout is not an exception, but a type error, etc.</p><p>Pure functional programming makes for easy-to-follow code execution and have fewer bugs. Gren intends to expose that to as many people and as many platforms as possible.</p><h3>Which problems is Gren trying to solve?</h3><p>Haskell demonstrated the benefits of pure functional programming, however many people find it hard to learn and understand. Elm showed that you can take the important concepts of Haskell and distill it into an easy-to-learn programming language. The problem is that Elm only targets the browser. In addition, Elm hasn't had a release in a few years, even though there are bugs to fix and rough edges to smooth out.</p><blockquote><div><hr></div><p>Gren intends to take all the benefits of Elm and make it available to more platforms, like web servers and command line applications.</p><div><hr></div></blockquote><p>At the same time, we intend to continue evolving the foundation that Elm has laid down for us, by improving the language and extending the number of available APIs.</p><h3>What are some of the toughest challenges with building Gren?</h3><p>Gren compiles to JavaScript, and most JavaScript APIs are not pure, meaning they cause side-effects when used. One of the most tricky aspects of developing Gren is exposing a pure interface over impure APIs which, at the same time, is pleasant to use and easy to understand.</p><h3>What's next for Gren?</h3><p>The focus right now is on supporting the NodeJS runtime, so that people can write command line applications and web back-ends. The basic functionality for this will be included in our 0.2.0 release (targeted for December 2022) and more APIs will be made available throughout 2023.</p><h3>Where can people learn more?</h3><p>Our <a href="https://gren-lang.org">website</a> contains enough information to get started. We also have a community on <a href="https://gren.zulipchat.com">Zulip</a> and curious individuals are encouraged to join the discussion!</p><h3>Program comparison: arithmetic</h3><p>Prompt: Implement a program which takes in a single string from stdin containing a basic arithmetic expression, such as &#8220;1 + 2 - 5&#8221;, evaluate it, and print the result.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://gist.github.com/jeaye/1c8ca9e6bf357175a7689b499bf8129f" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nONw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5be22fde-72fd-4ad0-a60f-8f3eac92c1f3_1094x2402.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nONw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5be22fde-72fd-4ad0-a60f-8f3eac92c1f3_1094x2402.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nONw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5be22fde-72fd-4ad0-a60f-8f3eac92c1f3_1094x2402.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nONw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5be22fde-72fd-4ad0-a60f-8f3eac92c1f3_1094x2402.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nONw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5be22fde-72fd-4ad0-a60f-8f3eac92c1f3_1094x2402.jpeg" width="1094" height="2402" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/5be22fde-72fd-4ad0-a60f-8f3eac92c1f3_1094x2402.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2402,&quot;width&quot;:1094,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:265994,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://gist.github.com/jeaye/1c8ca9e6bf357175a7689b499bf8129f&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nONw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5be22fde-72fd-4ad0-a60f-8f3eac92c1f3_1094x2402.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nONw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5be22fde-72fd-4ad0-a60f-8f3eac92c1f3_1094x2402.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nONw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5be22fde-72fd-4ad0-a60f-8f3eac92c1f3_1094x2402.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nONw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F5be22fde-72fd-4ad0-a60f-8f3eac92c1f3_1094x2402.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://compilerspotlight.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Compiler Spotlight! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Language Showcase: Lux]]></title><description><![CDATA[Lux is a purely-functional and statically-typed lisp that pushes the boundaries of what's possible in terms of meta-programming.]]></description><link>https://compilerspotlight.substack.com/p/language-showcase-lux</link><guid isPermaLink="false">https://compilerspotlight.substack.com/p/language-showcase-lux</guid><dc:creator><![CDATA[Jeaye Wilkerson]]></dc:creator><pubDate>Sun, 18 Sep 2022 01:01:15 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!rozv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this post of Compiler Spotlight, <a href="https://github.com/eduardoejp">Eduardo Julian</a>, Lux&#8217;s creator, walks us through the unique language he&#8217;s been building.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rozv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rozv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png 424w, https://substackcdn.com/image/fetch/$s_!rozv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png 848w, https://substackcdn.com/image/fetch/$s_!rozv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png 1272w, https://substackcdn.com/image/fetch/$s_!rozv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rozv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png" width="276" height="276" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/adfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:500,&quot;resizeWidth&quot;:276,&quot;bytes&quot;:30265,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rozv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png 424w, https://substackcdn.com/image/fetch/$s_!rozv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png 848w, https://substackcdn.com/image/fetch/$s_!rozv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png 1272w, https://substackcdn.com/image/fetch/$s_!rozv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fadfd5505-e7d9-4c58-a581-2692e7fcfa72_500x500.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3>How would you describe Lux to the average programmer?</h3><p>Lux is a purely-functional and statically-typed lisp that pushes the boundaries of what's possible in terms of meta-programming.</p><p>A secondary aspect of Lux is that it's meant to be (as closely as it can be) an omni-platform language that you can use to build software for very different projects with very different circumstances, by leveraging the multitude of available platforms (currently the JVM, JavaScript, Python, Ruby and Lua).</p><h3>What problems is Lux trying to solve?</h3><p>Honestly, mostly just problems that I've felt I've had. &#128517;</p><p>I wanted to make a typed lisp because I wanted Clojure to have types and core.typed just wasn't doing it for me.<br><br>I wanted to make Lux crazy extensible and customizable because I wanted to know that no matter what software development I wanted to do in the future, I could always bend the language to my will, and I wanted to give other people the same freedom.<br><br>And I wanted Lux to compile to anything because of a bad experience I had years ago working on a little game, and feeling frustrated that I couldn't compile Clojure to ActionScript in order to run my game on Flash.</p><h3>What makes Lux unique?</h3><p>There are so many answers to that question, but I'll try to focus on the most outstanding stuff.<br><br>Types are first-class values and they're just data-structures, so you can introspect then and compute with them at will (though most of the useful stuff you might want to do with them will likely happen at compile-time).</p><blockquote><div><hr></div><p>Macros have access to the state of the compiler, which gives you more power and flexibility than macros in other lisps.</p><div><hr></div></blockquote><p>And not only can you write macros to manipulate the syntax of Lux, but you can also write extensions for the compiler with regards to semantic analysis (and type-checking) of code, optimizations and even code-generation. These extensions are a bit more complex than macros, but not too much, and you can do with them stuff that even macros cannot accomplish.<br><br>There's even an (experimental) meta-compiler architecture that I introduced (and plan to use heavily in the future), that allows creating your own compiler sitting alongside the Lux compiler, and would even let you create polyglot programs from within Lux. It's still very early stage, and I haven't done anything useful with it yet, but I plan on building something important on top in an upcoming release (though I'm keeping what it is a secret for now &#128521;).</p><h3><strong>What's the coolest thing that's been built with </strong>Lux<strong> so far?</strong></h3><p>Publicly, the Lux compiler itself, and the Lux build tool.<br><br>Privately, I'm working on a project for doing financial analysis and it's being written in Lux. But it's closed-source and commercial, so I can't disclose more.</p><h3>What are some of the toughest challenges with building Lux?</h3><p>Prioritizing stuff.</p><blockquote><div><hr></div><p>I've had crazy cool ideas sitting on a TO-DO list for years because of higher priority stuff that I needed to do.</p><div><hr></div></blockquote><p>It kills me to pick winners and losers in terms of what gets scheduled for an upcoming release. There is just so much stuff that I want to do! &#129321;<br><br>But most of the heavy-duty stuff that I had pending has now been done, and I feel like the next few iterations are going to grant me the peace of mind I have yearned for the last few years.</p><h3>So, what&#8217;s next?</h3><p>More platforms!<br><br>In particular, I'm hoping to compile to C/C++ in the future; and maybe Perl, PHP, Common Lisp and a few other platforms. WebAssembly is definitely on the hit-list.<br><br>A friend of mine also gave me an idea that might help me finally get a juicy niche for Lux to live in, but I'm keeping that a secret for now. &#128513;</p><h3>Where can people learn more?</h3><ul><li><p>They should check out <a href="https://github.com/LuxLang/lux">Lux's repo</a></p></li><li><p>There's also <a href="https://github.com/LuxLang/lux/blob/master/documentation/book/the_lux_programming_language/index.md">the book</a> </p></li><li><p>And they can also check out the talk I gave at Strange Loop years ago (though it's a bit dated): </p></li></ul><div id="youtube2-T-BZvBWiamU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;T-BZvBWiamU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/T-BZvBWiamU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><h3>Which language would you say yours is closest to?</h3><p>That's a tough question to answer. Can I split it half-way? &#128517;<br><br>Clojure would definitely be the mother, giving Lux syntax and a lispy orientation towards meta-programming.<br><br>Haskell would be the father, instilling a purely functional work ethic and proper mathematical values.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://compilerspotlight.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for free and see more language showcases. :)</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Program comparison: arithmetic</h3><p>Prompt: Implement a program which takes in a single string from stdin containing a basic arithmetic expression, such as &#8220;1 + 2 - 5&#8221;, evaluate it, and print the result.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://gist.github.com/eduardoejp/8f966ebe09c57b6dfc7fca6d3a43f283" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mG6L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3643b67a-9210-4214-b1f6-33436718e539_1459x3465.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mG6L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3643b67a-9210-4214-b1f6-33436718e539_1459x3465.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mG6L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3643b67a-9210-4214-b1f6-33436718e539_1459x3465.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mG6L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3643b67a-9210-4214-b1f6-33436718e539_1459x3465.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mG6L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3643b67a-9210-4214-b1f6-33436718e539_1459x3465.jpeg" width="1456" height="3458" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3643b67a-9210-4214-b1f6-33436718e539_1459x3465.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3458,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:462494,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://gist.github.com/eduardoejp/8f966ebe09c57b6dfc7fca6d3a43f283&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mG6L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3643b67a-9210-4214-b1f6-33436718e539_1459x3465.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mG6L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3643b67a-9210-4214-b1f6-33436718e539_1459x3465.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mG6L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3643b67a-9210-4214-b1f6-33436718e539_1459x3465.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mG6L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3643b67a-9210-4214-b1f6-33436718e539_1459x3465.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Showing off more code: extensions</h3><p>Arithmetical operations are defined on a per-type basis. Here, we'll define a "universal" way of adding numbers that works on the default numerical types in Lux, so long as the types of all the parameters line up.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://gist.github.com/eduardoejp/47cf26c1aded95303238c1ec1bacc1ef" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hs8X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F726cf764-0d8d-4e93-9603-5f1311f32835_1651x4897.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Hs8X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F726cf764-0d8d-4e93-9603-5f1311f32835_1651x4897.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Hs8X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F726cf764-0d8d-4e93-9603-5f1311f32835_1651x4897.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Hs8X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F726cf764-0d8d-4e93-9603-5f1311f32835_1651x4897.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hs8X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F726cf764-0d8d-4e93-9603-5f1311f32835_1651x4897.jpeg" width="1456" height="4319" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/726cf764-0d8d-4e93-9603-5f1311f32835_1651x4897.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:4319,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:798555,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://gist.github.com/eduardoejp/47cf26c1aded95303238c1ec1bacc1ef&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Hs8X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F726cf764-0d8d-4e93-9603-5f1311f32835_1651x4897.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Hs8X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F726cf764-0d8d-4e93-9603-5f1311f32835_1651x4897.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Hs8X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F726cf764-0d8d-4e93-9603-5f1311f32835_1651x4897.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Hs8X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F726cf764-0d8d-4e93-9603-5f1311f32835_1651x4897.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[Language Showcase: Gwion]]></title><description><![CDATA[Gwion is a programming language aimed at making music.]]></description><link>https://compilerspotlight.substack.com/p/language-showcase-gwion</link><guid isPermaLink="false">https://compilerspotlight.substack.com/p/language-showcase-gwion</guid><dc:creator><![CDATA[Jeaye Wilkerson]]></dc:creator><pubDate>Sun, 21 Aug 2022 18:31:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PF7V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Gwion is a strongly-<em>timed</em> musical programming language inspired by ChucK. In this episode, Gwion&#8217;s creator <a href="https://github.com/fennecdjay">J&#233;r&#233;mie Astor</a> talks us through what goes into making a language for making music.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PF7V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PF7V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png 424w, https://substackcdn.com/image/fetch/$s_!PF7V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png 848w, https://substackcdn.com/image/fetch/$s_!PF7V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png 1272w, https://substackcdn.com/image/fetch/$s_!PF7V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PF7V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png" width="274" height="274" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:274,&quot;bytes&quot;:113510,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!PF7V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png 424w, https://substackcdn.com/image/fetch/$s_!PF7V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png 848w, https://substackcdn.com/image/fetch/$s_!PF7V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png 1272w, https://substackcdn.com/image/fetch/$s_!PF7V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9e8447-545b-4a58-82b5-dfc4ed2fc7f8_1750x1750.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>How would you describe Gwion to the average programmer?</h3><p>It's a programming language meant to be approachable, without leaving advanced concepts aside. More importantly, it's meant to make sound and music.</p><h3>What problems is Gwion trying to solve?</h3><p>I always wanted to have a tool allowing me to create new scales/sounds/rhythms either in a purely explorative way or to use in my contemporary music work. I think music is also a great way to teach mathematics. Finally, I wanted to make some research in human (or band, actually) - computer interaction. At one point, I stumbled upon <a href="https://github.com/ccrma/chuck">ChucK</a>, which really seemed to fit the bill, but it turned out it was not performance oriented enough for my needs. So I started developing this project.</p><h3>What makes Gwion unique?</h3><p>It is very similar in approach to ChucK, in that it's:</p><ul><li><p>Strongly and statically typed</p></li><li><p>Strongly timed (ability to precisely control the flow of time in code)</p></li><li><p>Made to make sound</p></li></ul><p>So the key difference here may be performance. But while learning programming in order to complete this project, I eventually came across features I found missing in ChucK, like function pointers and generics. It did go quite a long way and now has some features I did not plan initially, like variadic generics, effect handler and virtual time (a way to handle computation in a timed manner but not synced to the sound card as Gwion usually is).</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://compilerspotlight.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Compiler Spotlight! Subscribe for free to support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3><strong>What's the coolest thing that's been built with Gwion so far?</strong></h3><p>A company named <a href="https://github.com/amrai-audio">Amrai</a> that is developing a multi-platform (including arm64) audio software meant to power a hardware audio device contacted me last year and is using Gwion for their project. We have been working together since. This project is very exciting in that it will possibly help people all around the world to make music and that's an achievement that I couldn't probably afford with just my music practice. It is also interesting as a language developer because Gwion is used not only to generate sounds but it also handles the rest of the project, like a general purpose language would.</p><h3>What are some of the toughest challenges with building Gwion?</h3><p>I started this project more than six years ago and I had to learn a lot about programming to achieve it. Things like template implementation were very challenging at first. I think the next big challenge will be to implement some fancy memory management strategy, for example, as Lobster does.</p><h3>What&#8217;s next?</h3><p>I made a simple back-end (dsvm) a while back and I plan to switch to it soon. It has a fast register machine and the ability to run multiple JITs. I'm also working on a <a href="https://swig.org/">SWIG</a> module to help with plugin development.</p><h3>Where can people learn more?</h3><p>There are a few sites with short, runnable examples:</p><ul><li><p><a href="https://gwion.github.io/Gwion">The main documentation</a></p></li><li><p><a href="https://gwion.github.io/GwionTour/">A tour of the language</a></p></li><li><p><a href="https://gwion.github.io/GwionSamples">A few, hopefully musical, snippets</a> </p></li></ul><p>Please note that these are pretty WIP and I would love some help here. Other helpful links:</p><ul><li><p><a href="https://github.com/Gwion/Gwion">The Github repository</a></p></li><li><p><a href="https://discord.gg/KmHqbTKSmS">The Discord server</a></p></li></ul><h3>Show us some code!</h3><p>I love this snippet. It makes use of an embedded language and demonstrates both explicit timing and concurrency.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://gist.github.com/jeaye/191590c5d1d2505c5ca5ced689aaf4a7#file-compiler-spotlight-gwion-1-gw" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ofj4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1759935-88f3-40a9-85e2-f9d01370715a_1094x2033.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ofj4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1759935-88f3-40a9-85e2-f9d01370715a_1094x2033.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ofj4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1759935-88f3-40a9-85e2-f9d01370715a_1094x2033.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ofj4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1759935-88f3-40a9-85e2-f9d01370715a_1094x2033.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ofj4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1759935-88f3-40a9-85e2-f9d01370715a_1094x2033.jpeg" width="1094" height="2033" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/b1759935-88f3-40a9-85e2-f9d01370715a_1094x2033.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2033,&quot;width&quot;:1094,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:238404,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://gist.github.com/jeaye/191590c5d1d2505c5ca5ced689aaf4a7#file-compiler-spotlight-gwion-1-gw&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ofj4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1759935-88f3-40a9-85e2-f9d01370715a_1094x2033.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ofj4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1759935-88f3-40a9-85e2-f9d01370715a_1094x2033.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ofj4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1759935-88f3-40a9-85e2-f9d01370715a_1094x2033.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ofj4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1759935-88f3-40a9-85e2-f9d01370715a_1094x2033.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This one is also nice! It shows how easy it can be to react to HIDs.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://gist.github.com/jeaye/191590c5d1d2505c5ca5ced689aaf4a7#file-compiler-spotlight-gwion-2-gw" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NacO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda756f42-1f9e-400e-ab4b-121fcc454ef1_1114x1802.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NacO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda756f42-1f9e-400e-ab4b-121fcc454ef1_1114x1802.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NacO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda756f42-1f9e-400e-ab4b-121fcc454ef1_1114x1802.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NacO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda756f42-1f9e-400e-ab4b-121fcc454ef1_1114x1802.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NacO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda756f42-1f9e-400e-ab4b-121fcc454ef1_1114x1802.jpeg" width="1114" height="1802" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/da756f42-1f9e-400e-ab4b-121fcc454ef1_1114x1802.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1802,&quot;width&quot;:1114,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:222334,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://gist.github.com/jeaye/191590c5d1d2505c5ca5ced689aaf4a7#file-compiler-spotlight-gwion-2-gw&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NacO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda756f42-1f9e-400e-ab4b-121fcc454ef1_1114x1802.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NacO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda756f42-1f9e-400e-ab4b-121fcc454ef1_1114x1802.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NacO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda756f42-1f9e-400e-ab4b-121fcc454ef1_1114x1802.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NacO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fda756f42-1f9e-400e-ab4b-121fcc454ef1_1114x1802.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[Language Showcase: C3]]></title><description><![CDATA[C3 is a C-like language striving to be an evolution of C, rather than a completely new language.]]></description><link>https://compilerspotlight.substack.com/p/language-showcase-c3</link><guid isPermaLink="false">https://compilerspotlight.substack.com/p/language-showcase-c3</guid><dc:creator><![CDATA[Jeaye Wilkerson]]></dc:creator><pubDate>Thu, 11 Aug 2022 19:54:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ydRI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://www.c3-lang.org/">C3</a> is a systems programming language based on C. It&#8217;s an evolution of C enabling the same paradigms and retaining the same syntax as far as possible. For today&#8217;s language showcase, C3&#8217;s developer, <a href="https://github.com/lerno">Christoffer Lern&#246;</a>, talks about what makes it tick.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ydRI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ydRI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png 424w, https://substackcdn.com/image/fetch/$s_!ydRI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png 848w, https://substackcdn.com/image/fetch/$s_!ydRI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png 1272w, https://substackcdn.com/image/fetch/$s_!ydRI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ydRI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png" width="512" height="309.0989010989011" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/af6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:879,&quot;width&quot;:1456,&quot;resizeWidth&quot;:512,&quot;bytes&quot;:83645,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ydRI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png 424w, https://substackcdn.com/image/fetch/$s_!ydRI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png 848w, https://substackcdn.com/image/fetch/$s_!ydRI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png 1272w, https://substackcdn.com/image/fetch/$s_!ydRI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Faf6bb349-416a-45c5-bece-2c1fbcb7f687_1980x1196.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>How would you describe C3 to the average programmer?</h3><p>C3 is an evolution of C: &#8220;what could C look like if backwards compatibility wasn&#8217;t a concern?&#8221;. The main additions are modules, slices and semantic macros, but otherwise it tries to stay close to the look-and-feel of C. Most importantly, it is ABI compatible with C everywhere, meaning functions in C3 are by default callable from C and vice versa.</p><blockquote><div><hr></div><p>You don&#8217;t have to rewrite everything in C3, you can pick and choose.</p><div><hr></div></blockquote><h3>Which problems is C3 trying to solve?</h3><p>C has the burden of backwards compatibility and while it&#8217;s possible to add features on top, it&#8217;s hard to make them nicely integrated in the overall language. Some parts of C (in particular string handling and arrays) aren&#8217;t very ergonomic and makes the language seem harder to use than it needs to be. So it&#8217;s about making C programming more accessible and less punishing by providing better tools for the pain points in C.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://compilerspotlight.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Compiler Spotlight! Subscribe for free to hear about new language showcases.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h3>What makes C3 unique?</h3><p>I don&#8217;t know if it is! There are a couple of &#8221;C replacement languages&#8221; in development right now: Odin, Jai, Zig and Hare to name a few. What they have in common is that they diverge quite a bit from C syntax and semantics. </p><blockquote><div><hr></div><p>C3 is different: you can just lift your C code with just a few changes into C3 and have it run as expected.</p><div><hr></div></blockquote><h3>What are some of the toughest challenges with building C3?</h3><p>I&#8217;d love to have more people invested in the project with strong language design sensibilities to bounce ideas off. I love a good argument to be able to narrow down on the essentials of a feature. Luckily there are forums for budding programming language designers to trade ideas which helps. But that&#8217;s not quite the same as having someone who really wants to help YOUR language.</p><p>The programming is the easy part.</p><h3>What's next for C3?</h3><p>Work on expanding the standard library, I&#8217;d like to reach the point where people can feel it has all the necessary basics.</p><h3>Where can people learn more?</h3><p>The docs can be found at <a href="https://www.c3-lang.org">https://www.c3-lang.org</a> and the compiler can be found on Github: <a href="https://github.com/c3lang/c3c">https://github.com/c3lang/c3c</a></p><h3>Which languages inspired yours the most?</h3><p><a href="https://c2lang.org">C2</a>, by Bas van den Berg. My first compiler work was actually contributing to the C2 compiler! While Bas wanted a more modest feature set on top of C, I thought more ideas should be tested, and initially C3 was just C2 + some more features. When I decided to write a compiler for my ideas, I picked the name C3 to acknowledge its origins.</p><h2>Program comparison: arithmetic</h2><p>Prompt: Implement a program which takes in a single string from stdin containing a basic arithmetic expression, such as &#8220;1 + 2 - 5&#8221;, evaluate it, and print the result.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://github.com/c3lang/c3c/blob/master/resources/examples/plus_minus.c3" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VXQT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf8bf70-849b-47fe-87bb-2ef830271ace_1267x3927.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VXQT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf8bf70-849b-47fe-87bb-2ef830271ace_1267x3927.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VXQT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf8bf70-849b-47fe-87bb-2ef830271ace_1267x3927.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VXQT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf8bf70-849b-47fe-87bb-2ef830271ace_1267x3927.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VXQT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf8bf70-849b-47fe-87bb-2ef830271ace_1267x3927.jpeg" width="1267" height="3927" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4bf8bf70-849b-47fe-87bb-2ef830271ace_1267x3927.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3927,&quot;width&quot;:1267,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:485316,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://github.com/c3lang/c3c/blob/master/resources/examples/plus_minus.c3&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VXQT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf8bf70-849b-47fe-87bb-2ef830271ace_1267x3927.jpeg 424w, https://substackcdn.com/image/fetch/$s_!VXQT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf8bf70-849b-47fe-87bb-2ef830271ace_1267x3927.jpeg 848w, https://substackcdn.com/image/fetch/$s_!VXQT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf8bf70-849b-47fe-87bb-2ef830271ace_1267x3927.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!VXQT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4bf8bf70-849b-47fe-87bb-2ef830271ace_1267x3927.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[Language Showcase: Fennel]]></title><description><![CDATA[Fennel brings together the speed, simplicity, and reach of Lua with the flexibility of a lisp syntax and macro system.]]></description><link>https://compilerspotlight.substack.com/p/language-showcase-fennel</link><guid isPermaLink="false">https://compilerspotlight.substack.com/p/language-showcase-fennel</guid><dc:creator><![CDATA[Jeaye Wilkerson]]></dc:creator><pubDate>Thu, 04 Aug 2022 23:12:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!F-5u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://fennel-lang.org/">Fennel</a> is a Clojure-like lisp with seamless Lua integration which runs anywhere Lua does. Fennel&#8217;s maintainer, <a href="https://technomancy.us/colophon">technomancy</a>, talks in depth about it for today&#8217;s language showcase.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F-5u!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F-5u!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png 424w, https://substackcdn.com/image/fetch/$s_!F-5u!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png 848w, https://substackcdn.com/image/fetch/$s_!F-5u!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png 1272w, https://substackcdn.com/image/fetch/$s_!F-5u!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F-5u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png" width="254" height="336.34065934065933" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1928,&quot;width&quot;:1456,&quot;resizeWidth&quot;:254,&quot;bytes&quot;:180185,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!F-5u!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png 424w, https://substackcdn.com/image/fetch/$s_!F-5u!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png 848w, https://substackcdn.com/image/fetch/$s_!F-5u!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png 1272w, https://substackcdn.com/image/fetch/$s_!F-5u!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F33f71078-9484-426c-9b2b-af3a4002044b_1920x2543.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>How would you describe Fennel to the average programmer?</h3><p>Fennel is a language a lot like Lua, but it simplifies the syntax and removes some of the most error-prone and troublesome features of Lua while adding modern conveniences like pattern matching and a capable REPL for interactive use.

That description omits to mention it's a language in the lisp family, which I think has an undeserved negative association in the mind of the average programmer. Maybe it's better to focus on the concrete benefits like the simplified syntax and lack of operator precedence rules to memorize!</p><h2>Which problems is Fennel trying to solve?</h2><p>Like Lua, Fennel's strengths come from its extremely small size. A compiled Fennel standalone program can be distributed in under 300kb, but it can also be embedded inside a larger program. Historically this has been C programs, but nowadays it's possible to put a Lua VM (and thus Fennel) into programs written in Java, C#, Go, Javascript, and other languages. But it's not just small in terms of disk space, it also has a conceptual simplicity that makes it much easier to fit the whole thing in your head.</p><blockquote><div><hr></div><p>The other thing Fennel is particularly good for is writing games.</p><div><hr></div></blockquote><p>Fennel&#8217;s included out of the box in <a href="https://tic80.com/">TIC-80</a>, the fantasy console, and it works great in <a href="https://love2d.org/">L&#214;VE</a>, the classic 2d Lua game framework. Every year we have a game jam for lisp-family games and the winners of the competition are almost always written in Fennel.<br><br>I've written up more about the rationale behind Fennel on the web site <a href="https://fennel-lang.org/rationale">here</a>.</p><h2>What makes Fennel unique?</h2><p>Fennel is unique in that the language design space is severely constrained: this is a language without a runtime, so we can only implement features which can happen at compile time. All the runtime semantics are predetermined by the Lua VM. There is no standard library. The only other language I know of which did this was Mirah, which compiled to JVM bytecode without any of its own runtime. But the JVM is a much, much larger target than the Lua VM.</p><h2>What's the coolest thing that's been built with Fennel so far?</h2><p>This has to be a tie because it's impossible to pick just one. Ramsey Nasser has created <a href="https://git.sr.ht/~nasser/8fl">8fl</a>, which is environment for live-coding chiptune type music. It's is really expressive and fluid. The other one that comes to mind is Jeremy Penner's <a href="https://blog.information-superhighway.net/honeylisp-livecoding-the-apple-ii-with-6502-assembly">Honeylisp</a>, which is an environment for live-coding games for the Apple II platform (yes, really). It's an editor and compiler written in Fennel which targets the 6502 instruction set and lets you stream your code changes live to a real 8-bit Apple II computer over a serial port.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://compilerspotlight.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Compiler Spotlight! Subscribe for free to receive new language showcases right in your inbox.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>What are some of the toughest challenges with building Fennel?</h2><blockquote><div><hr></div><p>The most difficult thing is holding back on an idea until the time is right. </p><div><hr></div></blockquote><p>We'll often come up with ideas for new features that would make something a lot more convenient, but the initial idea just doesn't <strong>*fit*</strong>.</p><p>For example, the first implementation of macros brought in all the macros from a given file without naming them. So you could have identifiers introduced into the code but there was no hint in the code where they came from. This was later identified as an antipattern, so it was replaced by import-macros which had you name the macros you wanted. But we have the old way still hanging around with a big old warning in the docs that it's not recommended.<br><br>Another example is our map construct. Almost every language (but not Lua) has a construct like map, which iterates over a list of elements with a given function and returns a new list with the results. We really wanted this early on with Fennel. But Fennel has no runtime, and map is a function. So there wasn't any way to do this that fit. We wanted to put it in, but we held off because we hadn't found the right way. Later on someone suggested an approach based on list comprehensions, which are used for the same thing but are a syntactic construct rather than a function. Following this idea, we added icollect as a macro, and it was a much better design than it would have been if we had tried to add map like we originally wanted to.<br><br>We still haven't found a way to express custom types which can roundtrip thru serialization and being read back in again. We have some ideas, but they're half-baked, and we know we're better off without that feature until we find the right way to do it.</p><h2>Program comparison: arithmetic</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://gist.github.com/technomancy/e6bf7910ab0c53ba59cac76c1e32bf4e" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JfDz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F01bee947-156a-414b-b106-01538b6cbce1_1574x1848.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JfDz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F01bee947-156a-414b-b106-01538b6cbce1_1574x1848.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JfDz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F01bee947-156a-414b-b106-01538b6cbce1_1574x1848.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JfDz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F01bee947-156a-414b-b106-01538b6cbce1_1574x1848.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JfDz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F01bee947-156a-414b-b106-01538b6cbce1_1574x1848.jpeg" width="1456" height="1709" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/01bee947-156a-414b-b106-01538b6cbce1_1574x1848.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1709,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:472795,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://gist.github.com/technomancy/e6bf7910ab0c53ba59cac76c1e32bf4e&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JfDz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F01bee947-156a-414b-b106-01538b6cbce1_1574x1848.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JfDz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F01bee947-156a-414b-b106-01538b6cbce1_1574x1848.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JfDz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F01bee947-156a-414b-b106-01538b6cbce1_1574x1848.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JfDz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F01bee947-156a-414b-b106-01538b6cbce1_1574x1848.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Which paradigms does Fennel target?</h2><p>I can't say that Fennel targets functional programming exactly since there is no support for immutable data structures in the language (you need a 3rd-party library), but idiomatic Fennel uses partial application and higher order functions much more than Lua does. It also pushes you in a more functional direction by making rebinding of locals opt-in instead of opt-out. Lack of statements and early returns also contribute to the "imperative-lite" feel, but in the end it is an imperative language.<br><br>I don't really know if this counts as a paradigm, but Fennel focuses strongly on <strong>*interactive*</strong> programming; that is, coding alongside your running program and making changes to it instantaneously without restarting.</p><blockquote><div><hr></div><p>Even if you aren't working in an editor with first-class Fennel support, the repl has built-in support for reloading modules on the fly.</p><div><hr></div></blockquote><h2>Which language would you say Fennel is closest to?</h2><p>The runtime semantics are a pure subset of Lua. In particular, the module system is one under-appreciated feature that is very well-designed, and I've come to prefer Lua's modules over Clojure's. However, the syntax is closest to Clojure, with a few improvements to the destructuring syntax and the addition of pattern matching. Many of the syntactic similarities are somewhat superficial, but the macro system in particular uses Clojure's absolutely brilliant solution to Common Lisp's accidental symbol capture issues. It solves all the same problems as Scheme's hygenic macro system in a fraction of the complexity.</p><h2>Which languages inspired Fennel the most?</h2><p>When Clojure came out in 2007, it showed us the power of hosted languages; that is, taking a runtime from an existing language and developing on it symbiotically so you don't have to start the whole stack from scratch. At the time this was very novel; the only precursor I'm aware of was Coldfusion, which most people didn't take very seriously. Nowadays hosted languages are perhaps even more common than non-hosted languages, and we're even starting to see them break into the mainstream with Kotlin, F#, TypeScript, and Elixir.<br><br>I believe Fennel takes this idea even further than Clojure: since there is no Fennel runtime, compiled Fennel programs are indistinguishable from Lua programs (with maybe a few funny variable names); Fennel functions are Lua functions, and Fennel modules are Lua modules. Of course, the library ecosystem for Lua isn't as rich as that on the JVM, but given its small size and instantaneous startup time, it addresses a niche which Clojure has historically done very poorly.</p><h2>Show off some cool Fennel code</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://gist.github.com/technomancy/9bb2be6bd1a5d8a242be4124306a63c7" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZZBP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fed2c90ba-853f-429c-8fd8-20e01a8f5e2a_1555x2911.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZZBP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fed2c90ba-853f-429c-8fd8-20e01a8f5e2a_1555x2911.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZZBP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fed2c90ba-853f-429c-8fd8-20e01a8f5e2a_1555x2911.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZZBP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fed2c90ba-853f-429c-8fd8-20e01a8f5e2a_1555x2911.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZZBP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fed2c90ba-853f-429c-8fd8-20e01a8f5e2a_1555x2911.jpeg" width="1456" height="2726" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ed2c90ba-853f-429c-8fd8-20e01a8f5e2a_1555x2911.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2726,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:633274,&quot;alt&quot;:&quot;Fennel love2d code&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://gist.github.com/technomancy/9bb2be6bd1a5d8a242be4124306a63c7&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Fennel love2d code" title="Fennel love2d code" srcset="https://substackcdn.com/image/fetch/$s_!ZZBP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fed2c90ba-853f-429c-8fd8-20e01a8f5e2a_1555x2911.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ZZBP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fed2c90ba-853f-429c-8fd8-20e01a8f5e2a_1555x2911.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ZZBP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fed2c90ba-853f-429c-8fd8-20e01a8f5e2a_1555x2911.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ZZBP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fed2c90ba-853f-429c-8fd8-20e01a8f5e2a_1555x2911.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>What's next for Fennel?</h2><p>We had our 1.0 release less than a year ago, and feature changes have certainly slowed down since then. Right now we're focusing more on tooling. We have a formatter and a lua-&gt;fennel reverse compiler to aid porting codebases and example code. We have someone working on a stepping debugger, and someone else just started to implement an LSP server for Fennel.<br><br>So upcoming changes to the compiler now are going to be less about changing the language and more about exposing more information like scoping and modules and such from the compiler to third-party tooling through the API.</p><h2>Where can people learn more?</h2><p>The main site is <a href="https://fennel-lang.org">https://fennel-lang.org</a> but we've also got a decent wiki that we haven't yet moved off Github at <a href="https://github.com/bakpakin/Fennel/wiki">https://github.com/bakpakin/Fennel/wiki</a><br><br>But the main place to learn is the chat which is available both with IRC at <code>#fennel</code> on Libera Chat and via Matrix on <code>#fennel:matrix.org</code> depending on your client preference.</p><blockquote><div><hr></div><p>The chat is fairly active and very friendly to newcomers.</p><div><hr></div></blockquote>]]></content:encoded></item><item><title><![CDATA[Language Showcase: jank]]></title><description><![CDATA[jank is a Clojure dialect on LLVM with gradual typing, a native runtime, and C++ interop.]]></description><link>https://compilerspotlight.substack.com/p/language-showcase-jank</link><guid isPermaLink="false">https://compilerspotlight.substack.com/p/language-showcase-jank</guid><dc:creator><![CDATA[Jeaye Wilkerson]]></dc:creator><pubDate>Sat, 30 Jul 2022 06:25:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hKXw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><a href="https://jank-lang.org">jank</a> is an upcoming Clojure dialect, made by <a href="https://jeaye.com/">Jeaye Wilkerson</a>, aimed at merging the worlds of native programming and interactive, REPL-based functional programming. It features a gradual, structured type system, along the lines of malli. Its JIT is built on LLVM, via C++, and jank&#8217;s interop provides access to native C++ libraries.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://compilerspotlight.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Compiler Spotlight! Subscribe for free to receive new language showcases in your inbox weekly.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>How would you describe jank to the average programmer?</h2><p>First try: Clojure meets TypeScript meets C++.</p><p>The average programmer may not know Clojure, so a second try might be: A functional-first lisp with a standard library built around immutable data structures which allows your code to begin dynamically typed and then become statically typed as you add type annotations. jank is compiled to native code and can interop with C++ directly.</p><h2>Which problems is jank trying to solve?</h2><p>Clojure is superb at transforming data in a purely functional way, but its dynamic type system can make some forms of development challenging (type-rich APIs, fearless refactors, excellent in-editor tooling). Furthermore, Clojure is generally hosted in a very dynamic environment, such as the JVM, CLR, or a JS engine, which is prohibitive when it comes to accessing native libraries, minimizing start time, and working on software like games. jank tries to bridge each of these gaps.</p><h2>What are some of the toughest challenges with building jank?</h2><p>Firstly, it turns out trying to make a fully dynamic language, including REPL support, work in native code is not easy. LLVM&#8217;s JIT support and, in particular, Cling, make this at least possible.</p><p>Secondly, jank is trying to be an excellent dynamic language and an excellent static language. Generally building one is hard enough.</p><h2>Where can people learn more?</h2><p>The website is here: <a href="https://jank-lang.org">https://jank-lang.org</a></p><p>You can sponsor development here: <a href="https://github.com/sponsors/jeaye">https://github.com/sponsors/jeaye</a></p><h2>Program comparison</h2><blockquote><p>Implement a program which takes in a single string from stdin containing a basic arithmetic expression, such as &#8220;1 + 2 - 5&#8221;, evaluate it, and print the result.</p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://gist.github.com/jeaye/c06c95b9e905ff317f7df1d9cf06bd64" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hKXw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hKXw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hKXw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hKXw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hKXw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg" width="1456" height="951" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:951,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152260,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:&quot;https://gist.github.com/jeaye/c06c95b9e905ff317f7df1d9cf06bd64&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hKXw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg 424w, https://substackcdn.com/image/fetch/$s_!hKXw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg 848w, https://substackcdn.com/image/fetch/$s_!hKXw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!hKXw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F296a32f5-1aeb-42af-ad77-4ccd3b9f65b6_1555x1016.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item></channel></rss>