A Forth Story...
groups.google.com
groups.google.com
About 2/3rds in (past the 'read more') the Novix rates a mention. I think that that is possibly the most underrated CPU design that ever saw the light of day, at the time it was so out of the ordinary that only very few people knew what to do with it.
A high level language (forth is by most definitions a high level language) directly executed by the CPU.
At the time I worked for a company called dadadata in the Netherlands, they were in the process of developing a bunch of real time software to process video images for classification and recognition (1988 or thereabouts). The Novix chip arrived and would have definitely blown the socks of anything that I could have done with a regular PC at the time, if not for one small problem: someone dropped a dime into the power supply and the whole development kit was toast. A couple of all nighters later we had a working reproduction of the code in 'C' and that was used for the customer demonstrations. Still, the power of that little chip is something I'll never forget and it is a pity that the Novix and its successor which iirc was called shboom never made real headway. The forth code for the novix was probably only about 10% or so in size of the equivalent C code. The head forth honcho there called C sneeringly a 'great' language.
There is still hope, even today that one day that power will finally be available in some package that sees wide distribution, the heritage of Novix lives on in the greenarrays line (which is now shipping dev boards and chips).
http://www.greenarraychips.com/
To kill forth and the concepts behind it permanently will take a lot of garlic and stakes, I think it will always have its champions.
Anyway, I hope these find a niche so that this kind of architecture might one day make a comeback. The advantages are staggering.
Could you expand on that?
But the same thing can be said of programming at a low level with a Von Neumann architecture. Such architectures are an exceptionally bad match for what the Green Array (dataflow) architecture is good for, namely highly concurrent applications involving processing flows of data such as sensor networks, computer vision, and all manner of routers.
The way that Von Neumann systems handle this problem is by having high-level programming languages (like C), which gives you some level of abstraction from the hardware so that you can model your program however you like and force it to map to the architecture, even if the problem intrinsically doesn't map well. This is why parallel programming is a hard problem. It's not actually a hard problem (well, it could be intrinsically harder), it's just a hard problem for architectures that are not designed for it. On a Green Arrays chip, parallelism is the most natural thing in the world.
Currently Green Arrays has no equivalent of C, and as I understand, this is unlikely to change as the philosophy of Forth is to stay close to the metal and make that an enjoyable experience. That's probably a good thing actually. it's more efficient to design problems to fit the hardware than to use one architecture for absolutely everything as we've been doing for the past 40 years or whatever (with notable exceptions like the Transputer, the Connection Machine, Xmos XCore chips and FPGA's to a certain extent).
If anybody's interested in the GA144, GreenArrays recently put up a series of free self-paced courses about the architecture: http://school.arrayforth.com/
I dunno, it doesn't seem that bad to me. Cortex-M microcontrollers use the ARM instruction set and seem to be gaining ground. I've personally used PIC24 (the 16bit PIC microcontrollers from Microchip) and various 8bit Atmel ones without using Arduino. The 8bit PIC16 still seems reasonably popular too.
Certainly none are as popular or accessible to beginners than Arduino, but is it really hopelessly obscure? Hell, if I can get started with PIC24, then surely anyone can! (Though I do admit I've started doing prototyping on Arduino lately because the wealth of sample code saves tons of time and headaches, while before the PIC24 was my go-to microcontroller. I have used the AT90USB162 and some Atmega micros for some work too and will probably use them much more in the future).
[1]http://www.greenarraychips.com/home/documents/greg/PB001-100...
Oh well. Where there's muck, there's brass.
Why do you put C in quotes here?
One Saturday morning I was in the local Computer Land store in San Diego and was talking about my just beginning side project of porting Forth. One of the new sales guys got really pissed off and started ranting about why would I waste my time on that, lots of people were doing it, etc. The owners of the store Dan and Dave were friends and they glared at their sales guy, and the conversation turned to more pleasant topics.
I decided that afternoon that the obnoxious guy was perhaps right and started instead spending time with Bill Budge's cool 3D library for the Apple II.
A few months later someone came out with an inexpensive product that was Forth ported to the Apple II and I always wondered if the sales guy who got so mad that Saturday had any involvement with that product.
Unlikely. Porting Forth is not a few months long project ;-) Most of Forth is usually written in Forth anyway - all you have to do is to port some primitives and you're set.
In any case, I did a lot of interesting stuff with Paul Lutus' GraFORTH and TransFORTH. Much more mileage than I ever got out of Aztec C.
BTW, I probably shouldn't say that, but that chess program was most likely the one that came on the boot disk of my first Apple II clone (I live in Brazil and it was impossible - as in "a fellony" - to get a computer from abroad). Thanks for the many hours of challenging chess. I never had the patience to play against humans, however. Meat is too slow. ;-)
Indeed; an 'intermediate' Forth programmer is defined as someone who has written their own Forth implementation but nothing else in the language.
Back in the time that most of the story takes place, there was not the glut of well-developed, thoroughly documented, cross-platorm tools with helpful user communities that we have today. Every machine had its own set of 2 or 3 first-class development development packages (i.e., pascal, cobol, basic, fortran: choose any two).
So when a small, elegant cross-platform development solution like Forth or C comes along, folks would get really excited about it. If you found something you could be productive with, and could take it from job to job, it was hard not to. It just didn't make sense to use the best tool for that particular machine when you knew there was a high probability that you might never use that vendor's hardware for any other project.
From the debugging side, well-factored code consists primarily of short pure functions with a very small number of code paths. This couldn't be a more perfect scenario for TDD. In my own projects I use an extremely simple unit testing system called the Test Anything Protocol (TAP). Here's an example of a fixture:
https://github.com/JohnEarnest/Mako/blob/master/lib/Test/tes...