{"id":4509,"date":"2020-01-26T04:18:44","date_gmt":"2020-01-26T04:18:44","guid":{"rendered":"http:\/\/mathscitech.org\/articles\/?p=4509"},"modified":"2024-01-01T10:36:26","modified_gmt":"2024-01-01T10:36:26","slug":"pol","status":"publish","type":"post","link":"https:\/\/mathscitech.org\/articles\/pol","title":{"rendered":"Forth, Lisp, &#038; Ruby: languages that make it easy to write your own domain specific language (DSL)"},"content":{"rendered":"<p>Before domain-specific languages (DSLs) and REPL environments (read, execute, print, loop) became fashionable, computing pioneer Charles (Chuck) Moore had built, by 1968, what he viewed as the perfect computer programming language, which he named <a href=\"https:\/\/colorforth.github.io\/HOPL.html\" rel=\"noopener noreferrer\" target=\"_blank\">FORTH (for fourth generation language)<\/a>.  What he had kept in view during its creation was an extreme austerity in syntax and structure as he searched for the minimalist system required to interact with a computer and be able to write custom <strong>problem-oriented languages<\/strong> to solve them.  This approach is what he considered to be &#8220;programming&#8221;: you solve your problem by developing an application specific language with multiple levels of abstraction giving you in the end a small dictionary of simple words (in code) which represents the solution cleanly and in overall the fewest lines of code.  Let&#8217;s look at this idea, how it has worked out over the years, and how you can apply this, regardless of the language you choose to (or have to) work with.  This article looks at Forth, Lisp &#038; Ruby, language that make it easy to solve classes of problems by writing your own DSL, i.e. by programming a specific &#8220;problem-oriented language&#8221; in which to solve your problem.<\/p>\n<p><!--more--><\/p>\n<h3>1. Succinctness is Power<\/h3>\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Paul_Graham_(programmer)\" rel=\"noopener noreferrer\" target=\"_blank\">Paul Graham<\/a>, the well-known founder of Y Combinator, wrote &#8220;<a href=\"http:\/\/paulgraham.com\/power.html\" rel=\"noopener noreferrer\" target=\"_blank\">Succinctness = Power<\/a>&#8221; in 2002.  A few quotes are noteworthy:<\/p>\n<p>&#8220;<em>[Power] is directly proportionate to succinctness.  Certainly succinctness is a factor in readability, in the mathematical sense [that] total effort = effort per line x number of lines.  (We have to be careful here to distinguish between the readability of an individual line of code and the readability of the whole program. It&#8217;s the second that matters.)<\/em>&#8221;<\/p>\n<p>&#8220;<em>To the user encountering the language for the first time, a programming language that has high readability-per-line means that the source code will look <em>unthreatening<\/em>. &#8230; [But] this is similar to the very successful technique of letting people pay in low monthly installments instead of frightening them with a high upfront price.  [But] installment plans are a net loss&#8230; the buyer is going to make a lot of those low, low payments; and the [similarly] programmer is going to read a lot of those individually readable lines.<\/em>&#8221;  (Paul Graham, 2002, Succinctness is Power)<\/p>\n<p>Larry Wall, creator of Perl, says something similar when talking about Java, <a href=\"https:\/\/mathscitech.org\/articles\/gplus#16\" rel=\"noopener noreferrer\" target=\"_blank\">in his 2013 interview<\/a>: <em>&#8220;Java is sort of the Cobol of the 21st century &#8230; It&#8217;s kind of heavyweight, verbose, and everyone loves to hate it &#8230; But managers like it because it looks like you&#8217;re getting a lot done.  If 100 lines of Java code accomplish a task, then it looks like you&#8217;ve written 100 lines, even though in a different language, it might only take 5 lines.  It&#8217;s like, you can eat a 1-pound steak, or you can eat 100 pounds of shoe leather.  Though you feel a greater sense of accomplishment after the shoe leather, maybe there&#8217;s some downsides.&#8221;<\/em> (Larry Wall, 2013)<\/p>\n<p>What of Python?  Paul Graham again: &#8220;<em>Python&#8217;s goal is regularity and readability, not succinctness.<\/em>&#8221; (PG\/2002).<\/p>\n<h3>2. Lisp&#8230; and Forth<\/h3>\n<p>So what is more concise and more powerful?  Paul Graham&#8217;s destination is Lisp, and he describes why in &#8220;<a href=\"http:\/\/paulgraham.com\/icad.html\" rel=\"noopener noreferrer\" target=\"_blank\">Revenge of the Nerds<\/a>&#8220;: &#8220;<em>Lisp was a piece of theory that unexpectedly got turned into a programming language.<\/em>&#8221; (PG\/2002b)  Or, to expand a bit, Lisp is more powerful and succinct than most modern languages because it was developed as math, not as a language.  Its designer, <a href=\"https:\/\/en.wikipedia.org\/wiki\/John_McCarthy_(computer_scientist)\" rel=\"noopener noreferrer\" target=\"_blank\">John McCarthy<\/a> (MIT), came up with it as a simpler form of a universal Turing machine, but did not imagine it would be implemented: his graduate student Steve Russell wrote it later in IBM 704 machine code.  <\/p>\n<p>If Lisp is good, then Forth is better.  All the power of Lisp, due to its extensibility and recursiveness, all of this has been consciously built into Forth by Chuck Moore, who learned Lisp and APL from McCarthy at MIT, programmed with Fortran at SAO, Algol at Stanford, and Cobol at Mohasco.  <\/p>\n<p>Where Lisp is the embodiment of an academic paper, <strong><a href=\"https:\/\/colorforth.github.io\/HOPL.html\" rel=\"noopener noreferrer\" target=\"_blank\">Forth<\/a>&#8221; is the working toolset of a master programmer<\/a>, a programmer with a severely minimalistic mindset, and who has been sharpening his toolset for 40 years<\/strong>: it took Chuck <a href=\"https:\/\/colorforth.github.io\/HOPL.html\" rel=\"noopener noreferrer\" target=\"_blank\">10 years to invent Forth<\/a> (1958-1968), another 10 years to perfect it for writing software only applications (1968-1978), after which he pursued software into silicon with Forth chips and other <a href=\"http:\/\/www.ultratechnology.com\/mup21.html\" rel=\"noopener noreferrer\" target=\"_blank\">MISC (minimal instruction set) chip designs<\/a> (some, like the Novix, used by NASA for space satellites), tighter and sharper Forths which he used to build his own CAD tools for doing ultra efficient chip layouts, until finally arriving at <a href=\"https:\/\/en.wikipedia.org\/wiki\/ColorForth\" rel=\"noopener noreferrer\" target=\"_blank\">ColorForth<\/a> in the 1980s.  He tinkered with this through until July 2001 (<a href=\"https:\/\/colorforth.github.io\/primer.htm\" rel=\"noopener noreferrer\" target=\"_blank\">the last stable version<\/a>), and which he has now used for 18 years, including for use in the 144-multicomputer on a chip, the GA144 super Forth chip.<\/p>\n<p>But, back to the title heading:<\/p>\n<p>Here is what Chuck Moore has to say about <a href=\"https:\/\/colorforth.github.io\/POL.htm\" rel=\"noopener noreferrer\" target=\"_blank\">Programming a Problem-Oriented Language<\/a>:<br \/>\n&#8220;<em>I&#8217;ve written many programs over the years. I&#8217;ve tried to write good programs, and I&#8217;ve observed the manner in which I write them rather critically. <strong>My goal has been to decrease the effort required and increase the quality produced.<\/strong>  <\/p>\n<p>&#8220;In the course of these observations, I&#8217;ve found myself making the same mistakes repeatedly. Mistakes that are obvious in retrospect, but difficult to recognise in context. &#8230;  <\/p>\n<p>&#8220;I&#8217;ve also been distressed at the lack of concern from others about problems I consider significant. It amounts to a general indifference to quality; a casual attitude of confidence that one&#8217;s programs are pretty good, in any case as good as necessary. I&#8217;m convinced this confidence is misplaced. Moreover this attitude is reinforced by the massive trend to high-level languages and a placid acceptance of their inefficiencies. &#8230; [To counter this, there is] a Basic Principle and two corollaries: Keep it Simple, Do not Speculate, and Do it Yourself. &#8230; <\/p>\n<p>&#8220;I&#8217;m going to tell you how to write a program.   It is a specific program; that is, a program with a specific structure and capabilities.  The next step is a problem-oriented-language, [i.e. one that is] tailored to a particular application ([one can] substitute <em>application language<\/em> as synonymous.)  <\/p>\n<p>A problem-oriented-language can express any problem I&#8217;ve encountered.  By permitting the program to dynamically modify its control language, we mark a qualitative change in capability.  In a sense, our program has evolved into a meta-language, [i.e. a language which] we apply to the application.&#8221;<\/em>  (Chuck Moore, 1970b, Programming a Problem-Oriented Language)<\/p>\n<p>He then he goes on to describe, from first principles, why Forth is built the way it is, i.e. it is built to be the ultimate problem-oriented language, complete in 4K bytes of code. (Note this is indeed bytes, not K bytes or megabytes!)<\/p>\n<p>What are other examples of problem-oriented languages?  There are many, <em>but almost all of them are static, i.e. not extensible<\/em>.  Only Lisp and Forth have that capability of extensibility (meta-language) out of the box.<\/p>\n<p>Forth, by its design, makes it easy to write a domain specific language.  No need to decide on a syntax or write a parser.  The Forth engine is the parser and uses the dictionary which your program dynamically extends with the new domain specific vocabulary.<\/p>\n<h3>3. Domain Specific Languages<\/h3>\n<p>Looking at domain specific languages generally, examples are: graphviz, CSS, regular expressions, SQL, and parser-generator tools.  These have a syntax not limited by any specific programming language, but as a consequence, one needs to treat it with a parser.<\/p>\n<p>What about writing a DSL in an existing language (not Forth)?  In this case <em>&#8220;you have a particular idiomatic usage of one programming language; you&#8217;re still writing in that host programming language, but you&#8217;re using only a subset of its features, you use it in a kind of pidgin way to get that same feeling as you have with an external dsl.  What you want to get is the feeling that I&#8217;m programming in a language that has been specially written to write my kind of state machine, even though you are programming in the host language, for example Ruby.  You still want to fool yourself with the illusion.<\/em>&#8221; (MF\/2013)  Martin Fowler <a href=\"https:\/\/channel9.msdn.com\/Series\/DSL-DevCon-2009\/Martin-Fowler-Introducing-Domain-Specific-Languages#time=#time=0h28m40s\" rel=\"noopener noreferrer\" target=\"_blank\">Fowler\/2013 (28:40)<\/a><\/p>\n<p>This is at the heart of what a problem-oriented language approach is.<\/p>\n<h3>4. Programming in a Problem-Oriented Language, and a Plug for Forth<\/h3>\n<p>Why have we gone on this journey through history and languages?  Because programming to build problem-oriented languages (or domain specific languages) is, I believe, is at the root of productive application programming, regardless of the language you choose to use.<\/p>\n<p>Quietly, many have chosen to work in Forth, some exclusively, and others as detoxification from a software development world which is anything but simplistic or minimalistic.  (See Scot Stevenson&#8217;s article, <a href=\"https:\/\/web.archive.org\/web\/20150908041901\/http:\/\/uebersquirrel.blogspot.de\/2014\/02\/how-i-came-to-join-underground-computer.html\" rel=\"noopener noreferrer\" target=\"_blank\">How I came to join the underground computer cult of Forth<\/a>, (Feb 20, 2014).  <\/p>\n<p>Forth is a language that forces this type of thinking upon you, and it is worth using until the way of thinking has become ingrained, second nature.  Then one will write in this way in any language, for the better.<\/p>\n<p>Bernd Paysan puts it well:<br \/>\n<em>&#8220;Forth is an interactive language&#8230; You have a command line and you can just type commands in and try them out. This is very helpful for the beginner and the impatients, and it turns out that it is helpful for everyone, especially for debugging. You don&#8217;t need to write a test program to test your program.<\/p>\n<p>&#8220;Forth is fast&#8230; Though it has an interactive command line, programs are really compiled to quite efficient code. Forth programs are also called &#8220;words&#8221;, since each program has a name &#8230; You call it just by typing in that name. There is no difference between words from the language and words you defined yourself, you can even define words using an inline assembler. The whole system is written this way. <\/p>\n<p>&#8220;In this respect, Forth is quite similar to Lisp and its descendants&#8230; [but] Forth differs from Lisp in that it doesn&#8217;t use lists, neither for calling, nor for storing multiple values. Forth uses a stack to pass data between words, and it uses the raw memory (as seen by the assembler programmer) for more permanent storage. It&#8217;s much lower leveled than Lisp, and that&#8217;s one of the reason why it is fast. It&#8217;s not only fast, the simplicity makes it very small, too.<\/p>\n<p>&#8220;Forth is the ultimate language for building extensions. Programming in Forth is generating higher levels of abstractions, until you have a language well fitted to solve your problem. The simplicity of the underlying system allows it to rely on it, which is important when you search bugs. The usual approach for application programming is to keep each layer simple, too. This is essential for rapid development of critical applications.<\/p>\n<p>&#8220;Forth is said to be an amplifier. A good programmer programs better in Forth (and he learns to program better in other languages, too, when he masters Forth); a bad programmer programs worse in Forth, and he&#8217;s spoiled when working with other programming languages.&#8221;<\/em> &#8211; Bernd Paysan, <a href=\"https:\/\/bernd-paysan.de\/why-forth.html\" rel=\"noopener noreferrer\" target=\"_blank\">Why Forth?<\/a>, 1997<\/p>\n<p>Jeff Schilling writes similarly:<br \/>\n&#8220;<em>One of the unique things about Forth (at least until the resurgence in interest in Domain Specific Languages &#8211; fueled by Ruby but arguably around for a long time) is the ability to have the source language converge on the problem space. It is a magical place wherein the syntactic sugar of the programming language fades into the background and the language of the domain emerges.<\/p>\n<p>&#8220;Many experienced Forth programmers have reported that the language frees them to think in terms of the solution instead of the tool, that it is expressive enough to encourage original, elegant solutions without penalty and without bending over backward. (Some have even said their use of Forth made them better programmers in other languages.)<\/em>&#8221; &#8211; Jeff Schilling, <a href=\"http:\/\/manicwave.com\/blog\/2007\/10\/02\/rediscovering-our-past-the-joy-of-forth\/\" rel=\"noopener noreferrer\" target=\"_blank\">The Joy of Forth<\/a>, 2007.<\/p>\n<h3>5. Invitation<\/h3>\n<p>If you haven&#8217;t tried Forth, try it.  Start with Starting Forth and GForth, or with F-PC Forth within vDosPlus (an MS-DOS emulator for modern Windows machines).  You may be surprised at how much it starts to grow on you, and to change how you think about applications programming.<\/p>\n<p>To see the results of using Forth to build real applications, check out my <a href=\"https:\/\/mathscitech.org\/articles\/turtle-logo-forth\" rel=\"noopener noreferrer\" target=\"_blank\">Turtle Logo program<\/a> with installer and source code included.  It was written in 2016 in about 900 lines of Forth code using F-PC with the main program development done in spare time over a number of weeks, and then extended into a full fledged program for pre-schoolers to learn programming concepts over the next several months (my first child was the first user).  To my surprise (and delight), coming back to it three years later for my second child, it was easy to continue to extend it again with minimal effort due to the tightly factored design that Forth steers toward, and the multi-layered, problem-oriented language that results.<\/p>\n<p>For an example using Ruby, see the Cuneiform Transliteration Parser and Sign Frequency Generator built to analyze the <a href=\"https:\/\/mathscitech.org\/articles\/mathematics-uruk-susa\" rel=\"noopener noreferrer\" target=\"_blank\">first known instances of writing in Uruk and Susa<\/a> c.3500 BCE (nearly 5500 years ago!).  Watch this space for that article (forthcoming).<\/p>\n<hr\/>\n<h3>Related Articles<\/h3>\n<ul>\n<li><a href=\"https:\/\/mathscitech.org\/articles\/programming-survey\" rel=\"noopener noreferrer\" target=\"_blank\">Six Areas of Computer Programming: A Survey<\/a>\n<li><a href=\"https:\/\/mathscitech.org\/articles\/prop-logic\" rel=\"noopener noreferrer\" target=\"_blank\">Applied Propositional Logic: A summary of the theory, a simulator in 28 lines of Forth code, and digital design using only NAND gates<\/a>\n<li><a href=\"https:\/\/mathscitech.org\/articles\/forth\" rel=\"noopener noreferrer\" target=\"_blank\">Forth Reference<\/a>\n<li><a href=\"https:\/\/mathscitech.org\/articles\/turtle-logo-forth\" rel=\"noopener noreferrer\" target=\"_blank\">Coding for pre-schoolers: a \u2018Turtle Logo\u2019 in Forth<\/a>\n<li><a href=\"https:\/\/mathscitech.org\/articles\/mathematics-uruk-susa\">The Mathematics of Uruk and Susa (c.3500-3000 BCE)<\/a>\n<li><a href=\"https:\/\/mathscitech.org\/articles\/microcontrollers-nano\" rel=\"noopener noreferrer\" target=\"_blank\">Experimenting with Microcontrollers \u2013 an Arduino development kit for under \u00a310<\/a>\n<li><a href=\"https:\/\/mathscitech.org\/articles\/talking-sensors\" rel=\"noopener noreferrer\" target=\"_blank\">Voice-controlled Hardware: Making Sensors Talk for Under \u00a35<\/a>\n<\/ul>\n<hr\/>\n<h3>Further Reading<\/h3>\n<ol>\n<li> Scot Stevenson, <a href=\"https:\/\/web.archive.org\/web\/20150908041901\/http:\/\/uebersquirrel.blogspot.de\/2014\/02\/how-i-came-to-join-underground-computer.html\" rel=\"noopener noreferrer\" target=\"_blank\">How I came to join the underground computer cult of Forth<\/a>, (Feb 20, 2014)\n<li> <a href=\"https:\/\/bernd-paysan.de\/why-forth.html\" rel=\"noopener noreferrer\" target=\"_blank\">Why Forth?<\/a>  By Bernd Paysan, creator of GForth and GForth for Android\n<li> <a href=\"https:\/\/web.archive.org\/web\/20160224165407\/http:\/\/uebersquirrel.blogspot.de\/2014\/05\/the-dragon-free-internals-of-forth.html\" rel=\"noopener noreferrer\" target=\"_blank\">The Dragon-free Internals of Forth<\/a>, Scot Stevenson, (May 17, 2014)\n<li><a href=\"http:\/\/manicwave.com\/blog\/2007\/10\/02\/rediscovering-our-past-the-joy-of-forth\/\" rel=\"noopener noreferrer\" target=\"_blank\">The Joy of Forth: Rediscovering our past<\/a>, Jeff Schilling, 2007\n<li> <a href=\"https:\/\/web.archive.org\/web\/20160224165407\/http:\/\/uebersquirrel.blogspot.de\/search\/label\/forth\" rel=\"noopener noreferrer\" target=\"_blank\">Forth postings<\/a>, Scot Stevenson, 2014\/2015 posts\n<li> Programming in Forth &#8211; <a href=\"https:\/\/www.forth.com\/forth-books\/\" rel=\"noopener noreferrer\" target=\"_blank\">Books from Forth Inc.<\/a> (many free)<\/li>\n<li> <a href=\"https:\/\/www.amazon.co.uk\/Jueraen-Pintaske\/e\/B00N8HVEZM\" rel=\"noopener noreferrer\" target=\"_blank\">Forth Library on Amazon<\/a>\n<li> Arduino Controlled by eForth, C.H.Ting, 2018, <a href=\"https:\/\/archive.org\/details\/TheArduinoControlledByEForth\/mode\/2up\" rel=\"noopener noreferrer\" target=\"_blank\">PDF available for free<\/a>.  Explains how Forth lets you learn a chip interactively &#8211; bare metal programming!\n<li><a href=\"https:\/\/www.forthwithlife.co.uk\/\" rel=\"noopener noreferrer\" target=\"_blank\">Forth with Life<\/a> (integrated Mobile\/Cloud medical application).\n<li><a href=\"https:\/\/colorforth.github.io\/bio.html\" rel=\"noopener noreferrer\" target=\"_blank\">Charles (Chuck) Moore (b.1938)<\/a>, Father of Forth, and Stack-based Computing.  <a href=\"https:\/\/en.wikipedia.org\/wiki\/Charles_H._Moore\" rel=\"noopener noreferrer\" target=\"_blank\">Wikipedia<\/a>.\n<li> [Moore\/1970a] <a href=\"http:\/\/www.ultratechnology.com\/4th_1970.html\" rel=\"noopener noreferrer\" target=\"_blank\">Forth: A Language for Interactive Computing<\/a>, Chuck Moore, 1970, <a href=\"http:\/\/www.ultratechnology.com\/4th_1970.pdf\" rel=\"noopener noreferrer\" target=\"_blank\">PDF download<\/a>\n<li> [Moore\/1970b] <a href=\"https:\/\/colorforth.github.io\/POL.htm\" rel=\"noopener noreferrer\" target=\"_blank\">Programming a Problem Oriented Language (POL)<\/a>, by Chuck Moore, 1970, (<a href=\"http:\/\/www.forth.org\/POL.pdf\" rel=\"noopener noreferrer\" target=\"_blank\">PDF download<\/a>)\n<li> [Moore\/1991] <a href=\"https:\/\/colorforth.github.io\/HOPL.html\" rel=\"noopener noreferrer\" target=\"_blank\">Forth: The Early Years (History of Programming Languages)<\/a>, by Chuck Moore, 1991.  In it, he describes the 10 years it took for him to invent Forth (1958-1968), between MIT&#8217;s Smithsonian Astronomical Observatory (he knew John Gaustad, took a course from John McCarthy on LISP, and had looked at APL), Stanford, and Mohasco.\n<li> <a href=\"https:\/\/www.forth.com\/resources\/forth-programming-language\/\" rel=\"noopener noreferrer\" target=\"_blank\">The Evolution of Forth<\/a>, Rather, Colburn, Moore, 1993\n<li> CISC vs. RISC vs. MISC, <a href=\"http:\/\/www.ultratechnology.com\/mup21.html\" rel=\"noopener noreferrer\" target=\"_blank\">MuP21: A High Performance MISC Processor<\/a> (MuP21 = MISC Microprocessor 21) C.H. Ting &#038; Chuck Moore, 1995\n<li> <a href=\"http:\/\/www.ultratechnology.com\/index.html\" rel=\"noopener noreferrer\" target=\"_blank\">The Continuation of Chuck Moore&#8217;s Journey in search of Computing Nirvana<\/a> (my title, Jeff Fox&#8217;s main page of Ultra Technology)\n<li> <a href=\"http:\/\/www.complang.tuwien.ac.at\/forth\/fth79std\/FORTH-79.TXT\" rel=\"noopener noreferrer\" target=\"_blank\">Forth-79 standard<\/a>\n<li> <a href=\"http:\/\/forth.sourceforge.net\/std\/fst83\/FORTH-83.PRN\" rel=\"noopener noreferrer\" target=\"_blank\">Forth-83 standard<\/a>  <a href=\"http:\/\/forth.sourceforge.net\/std\/fst83\/fst83-12.htm\" rel=\"noopener noreferrer\" target=\"_blank\">Word List Summary<\/a>\n<li> <a href=\"http:\/\/www.complang.tuwien.ac.at\/forth\/dpans-html\/dpans.htm\" rel=\"noopener noreferrer\" target=\"_blank\">ANS-Forth 94 standard<\/a>\n<li> <a href=\"https:\/\/colorforth.github.io\/byte.htm\" rel=\"noopener noreferrer\" target=\"_blank\">Threads of a FORTH Tapestry, Byte, August 1980, Editorial<\/a>\n<li> <a href=\"http:\/\/www.jupiter-ace.co.uk\/Forth_PCWGoForthAnd.html\" rel=\"noopener noreferrer\" target=\"_blank\">Go FORTH and multiply!<\/a>, 1981 article\n<li> <a href=\"http:\/\/www.ultratechnology.com\/forth0.htm\" rel=\"noopener noreferrer\" target=\"_blank\">The Many Forths<\/a>, Survey by Jeff Fox.  <a href=\"https:\/\/tinymicros.com\/wiki\/Forth\" rel=\"noopener noreferrer\" target=\"_blank\">TinyMicros Forths<\/a>\n<li> <a href=\"http:\/\/www.ultratechnology.com\/chips.htm\" rel=\"noopener noreferrer\" target=\"_blank\">Forth Chips<\/a>, Survey by Jeff Fox.  <a href=\"https:\/\/web.archive.org\/web\/20160628202639\/http:\/\/www.retrocomputers.eu\/2011\/05\/25\/fignition-diy-computer-2nd-batch-for-sale\/\" rel=\"noopener noreferrer\" target=\"_blank\">FIGnition DIY computer<\/a> for <a href=\"https:\/\/web.archive.org\/web\/20110909120029\/http:\/\/www.ebay.co.uk:80\/itm\/FIGnition-DIY-Computer-Batch-2-\/200612170602?pt=UK_VintageComputing_RL&#038;hash=item2eb56acb6a\" rel=\"noopener noreferrer\" target=\"_blank\">\u00a320 on Ebay<\/a>\n<li><a href=\"http:\/\/pygmy.utoh.org\/3ins4th.html\" rel=\"noopener noreferrer\" target=\"_blank\">A 3-instruction Forth<\/a>\n<li> <a href=\"http:\/\/www.greenarraychips.com\/\" rel=\"noopener noreferrer\" target=\"_blank\">GreenArrays Technology, GA144<\/a> &#8211; 144 full-fledged processors on a single chip.  <a href=\"http:\/\/www.greenarraychips.com\/home\/about\/bios.html\" rel=\"noopener noreferrer\" target=\"_blank\">People<\/a>\n<li> <a href=\"https:\/\/colorforth.github.io\/patents.htm\" rel=\"noopener noreferrer\" target=\"_blank\">22 patents (Moore Microprocessor Patent library)<\/a>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Before domain-specific languages (DSLs) and REPL environments (read, execute, print, loop) became fashionable, computing pioneer Charles (Chuck) Moore had built, by 1968, what he viewed as the perfect computer programming language, which he named FORTH (for fourth generation language). What he had kept in view during its creation was an extreme austerity in syntax and [Read More&#8230;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","footnotes":""},"categories":[120,18,100],"tags":[174,144,142,127,148,147,141,143,146,125,145,24],"coauthors":[112],"class_list":["post-4509","post","type-post","status-publish","format-standard","hentry","category-software-engineering","category-programming","category-softwaretools","tag-arduino","tag-chuck-moore","tag-dsl","tag-forth","tag-java","tag-larry-wall","tag-lisp","tag-logo","tag-paul-graham","tag-programming","tag-python","tag-ruby","odd"],"views":10479,"_links":{"self":[{"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/posts\/4509","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/comments?post=4509"}],"version-history":[{"count":39,"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/posts\/4509\/revisions"}],"predecessor-version":[{"id":10516,"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/posts\/4509\/revisions\/10516"}],"wp:attachment":[{"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/media?parent=4509"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/categories?post=4509"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/tags?post=4509"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/mathscitech.org\/articles\/wp-json\/wp\/v2\/coauthors?post=4509"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}