StoneKnifeForth
Hi Kragen!<p>Wow, what an answer!  It&#x27;s longer and more well-nuanced than some of my posts on HN -- and some of my posts are long and well-nuanced!<p>Hey, if you would like to take this conversation to an email discussion, I would certainly welcome you there!  My email address is:<p>peter.d.sherman@gmail.com<p>&gt;&quot;My thinking on Forth, which is something I&#x27;m an amateur at, has changed a little bit since I wrote tokthr and SKF. I think that if you evaluate Forth as a programming language, it&#x27;s generally going to look pretty deficient. It&#x27;s more bug-prone and harder to read than alternatives like C, Lisp, BASIC, or assembly language, although it does support compile-time metaprogramming and powerful abstraction facilities.&quot;<p>[...]<p>&gt;&quot;But in Forth you&#x27;re always worrying about whether you&#x27;re doing something in the cleanest and the best way. Should I define a -! word? Maybe that if statement should be a word of its own that takes A and&#x2F;or MOD_ADLER as parameters? Maybe I should do the subtraction and just conditionally store the result into A if it&#x27;s still positive?&quot;<p>All of what you say about Forth <i>is</i> true -- but if and only if -- we evaluate it compared to the many other, frequently better, programming languages that exist today...<p>I don&#x27;t evaluate Forth in this way.<p>&quot;Beauty is in the eye of the beholder&quot; -- as they say!<p>You see, why Forth is so beautiful to me (at least as the smallest possible version of Forth that can still be extended) -- is because it exists somewhere in the &quot;problem continuum&quot; (for lack of a better term!) -- of all of the problems that computer scientists in history, exploring new technology for the first time (in history -- what&#x27;s old to us was new to them) would have had to face down, and solve.<p>I am interested in that &quot;problem continuum&quot; -- of problems -- now well-solved -- but historically, that would have not been the case!<p>In other words, let&#x27;s suppose you are one of the early computer scientists, and your computer only has a row of switches to specify an address, and another row of switches to specify a value for that address, and another switch which when toggled, writes the value of the row of switches into the address specified by the other row.<p>OK, so that&#x27;s a very primitive computer!<p>No display, no keyboard, no nothing!<p>So now from that computer -- what&#x27;s the next thing that needs to be built to advance that state of computer science one step forward?  Like, maybe that&#x27;s you connect that computer to a typewriter with typewriter capabilities, like the Teletype 33 ASR: <a href="https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Teletype_Model_33" rel="nofollow">https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Teletype_Model_33</a><p>But, you first need a serial port (of sorts!) to do that!<p>Also if you want to type data to&#x2F;from the computer -- then you need a program to do that (of which, the first one of those COULD NOT have been entered via the teletype -- it would have had to been entered by switches, by hand!)<p>You see computer history -- would have been, had we lived there, had we experienced it -- a &quot;continuum of problems&quot;.<p>With specific incremental solutions at those points in time -- each of which would incrementally, incrementally (a little bit here, a little bit there!) -- get us a bit closer to the computer programs, programming languages and systems of today -- that we all know and love!<p>You see, I want to know how the early historical computer pioneers -- basically had to &quot;MacGuyver&quot; things (again, for lack of a better term!) -- Forth is an important step in all of that, because at the point in time that you have the smallest working Forth -- then you can pretty much start creating the infrastructure for all of the OS&#x27;es&#x2F;Compilers&#x2F;Debuggers, etc. -- that are to follow!<p>But if and only if you know what you&#x27;re doing!<p>For example, using an existing compiler (as is done in many college-level compiler writing classes) to compile a new compiler -- is &quot;cheating&quot; (how did that original compiler come into existence in the first place?  You see, it wouldn&#x27;t have started its life as a fully functional compiler!  It could have started its life as an assembler, and then features added (high level constructs) and eventually assembly language conversion removed -- until finally it became one of the first generation of true compilers, etc.<p>Now, Forth is not a first generation true compiler -- but it <i>is</i> a very important <i>stepping stone</i> (again, in the &quot;problem continuum&quot;, for lack of a better term!) -- for getting there one day -- being able to write assemblers and debuggers in Forth, and eventually extend them enough such that one day they&#x27;re a true compiler -- like perhaps Algol&#x2F;C&#x2F;Pascal (was Algol ever a true one-pass compiler that didn&#x27;t require a linker?).<p>But anyway, you see what I&#x27;m looking for!<p>Anyway, thanks for your awesome response, and if you&#x27;d like to continue this discussion, just shoot me an email, peter.d.sherman@gmail.com !<p>-Peter