<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<rss version="2.0"><channel><title>Gershwin Programming Language</title><link>http://gershwinlang.org</link><description>Stack-based, Concatenative Clojure</description><item><title>Introducing Gershwin</title><link>http://gershwinlang.org/2013/06/04/introductions/</link><description>&lt;h2&gt;Introducing Gershwin&lt;/h2&gt;&lt;p&gt;Welcome to the home of the Gershwin programming language. Gershwin is currently in a pre-alpha state and under heavy, active development. Both the language and this site will evolve considerably in the next few months.&lt;/p&gt;&lt;p&gt;It&amp;rsquo;s always helpful to have deadlines. This year&amp;rsquo;s Emerging Languages Camp (Strange Loop preconf) has accepted &lt;a href=&quot;https://thestrangeloop.com/sessions/gershwin-stack-based-concatenative-clojure&quot;&gt;my talk proposal on Gershwin&lt;/a&gt;. I submitted that talk proposal based on a prototype version of Gershwin that used Clojure as a library (hosted &lt;a href=&quot;https://github.com/semperos/gershwin&quot;&gt;here&lt;/a&gt;), but have since reimplemented the language as a direct extension of the Clojure reader and compiler. This reimplementation of Gershwin is hosted &lt;a href=&quot;https://github.com/gershwin/gershwin&quot;&gt;here&lt;/a&gt; as a part of the &lt;a href=&quot;https://github.com/gershwin&quot;&gt;Gershwin Github organization&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I want to underscore the fact that Gershwin is only an extension to Clojure. Gershwin takes no credit for Clojure&amp;rsquo;s built-in data structures, concurrency support, namespacing, or any of the other excellent features that make Clojure a joy to develop with. Gershwin adds a few new features to Clojure&amp;rsquo;s reader and compiler infrastructure to allow developers to write programs in a concatenative style, and then leverages those features itself to provide a core API that allows end-users of the language to employ the concatenative approach. Gershwin&amp;rsquo;s data stack is currently implemented as a Clojure vector; Gershwin words and quotations compile directly into Clojure functions; many of Gershwin&amp;rsquo;s core words (functions) delegate directly to identically named ones in Clojure core.&lt;/p&gt;&lt;p&gt;In the same vein, those aspects of Gershwin that are not direct descendants of Clojure are largely inspired by or copied from the &lt;a href=&quot;http://factorcode.org/&quot;&gt;Factor programming language&lt;/a&gt;. From its own description, Factor is &amp;ldquo;an experiment to build a modern, useful Concatenative language with strong abstraction capabilities and good support for interactive development&amp;rdquo; &lt;a href=&quot;http://concatenative.org/wiki/view/Factor/FAQ/Why%3F&quot;&gt;&lt;i class=&quot;icon-external-link&quot;&gt;&lt;/i&gt;&lt;/a&gt;. Though Factor was originally implemented by Slava Pestov as a JVM language, he eventually &lt;a href=&quot;http://concatenative.org/wiki/view/Factor/Java%20Factor&quot;&gt;abandoned&lt;/a&gt; that implementation, primarily due to design limitations imposed by the JVM.&lt;/p&gt;&lt;p&gt;Therefore, from a pragmatic perspective, I have developed Gershwin to have a concatenative, Factor-like language that targets the JVM, for all the reasons any language targets the JVM. However, I also do not intend to program on the JVM without Clojure semantics. And as Fogus &lt;a href=&quot;https://twitter.com/fogus/status/341888294742794240&quot;&gt;recently commented on Twitter&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;If you&amp;rsquo;re creating a new JVM language and /don&amp;rsquo;t/ outright steal Clojure&amp;rsquo;s persistent structs then you&amp;rsquo;re just crazy insane.&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;I&amp;rsquo;m sure I can find other ways to be crazy insane, but not following Clojure&amp;rsquo;s good lead in implementing Gershwin will not be one of them.&lt;/p&gt;</description></item></channel></rss>