5 ms·
FORTH Lives on in every stack machine
by danbmil99 4y ago
FORTH
Lives on in every stack machine
- JadeNB 4y agoThe whole point of this list is to chronicle influential (but "mostly dead") programming languages; if they were counted as alive because of their influences, then they'd still be alive. But, also, Forth isn't on the list.
- danbmil99 4y agoMy point is FORTH should definitely be on the list. It is pretty much dead as an actual programming language in that no one programs in it anymore. But it was/is very influential... For example, PostScript is basically a dialect of FORTH.
- alwillis 4y ago> My point is FORTH should definitely be on the list. It is pretty much dead as an actual programming language in that no one programs in it anymore. Forth—not dead! The Forth community just had their 37th conference a few months ago [1]. It's obscure no doubt but it's still being used and dev tools are still being developed and updated. Apparently the FedEx handheld scanner runs on Forth and it's also used to create firmware and boot loaders [2] for various embedded systems [3]. [1]: https://forth-standard.org https://forth-standard.org [2]: https://www.freebsd.org/cgi/man.cgi?query=loader&sektion=8 https://www.freebsd.org/cgi/man.cgi?query=loader&sektion=8 [3]: https://www.forth.com/resources/forth-apps/ https://www.forth.com/resources/forth-apps/
- ComputerGuru 4y agoYeah, FreeBSD is/was a big Forth user for its boot menu, but that’s being ported to Lua now.
- DonHopkins 4y agoNot just FreeBSD, but Sun SPARC, Apple PowerMac, Pegasos, IBM Power Systems, OLPC XO-1, and other systems. https://en.wikipedia.org/wiki/Open_Firmware https://en.wikipedia.org/wiki/Open_Firmware
- JadeNB 4y ago> My point is FORTH should definitely be on the list. It is pretty much dead as an actual programming language in that no one programs in it anymore. But it was/is very influential... Wow, I totally misunderstood your point. I'm sorry.
- Taniwha 4y agoPretty sure Algol (and not Forth) lived on all the Burroughs large systems stack machines (B6700 and friends) - they're still with us as the Unisys A series
- DonHopkins 4y agoYes, I agree FORTH should be probably be on the list, at least if the list was a few languages longer, for as influential as it's been. WAForth for WebAssembly is beautiful and modern! https://github.com/remko/waforth https://github.com/remko/waforth It's a lovingly crafted and hand written in well commented WebAssembly code, using Racket as a WebAssembly macro pre-processor. I learned so much about WebAssembly by reading this and the supporting JavaScript plumbing. The amazing thing is that the FORTH compiler dynamically compiles FORTH words into WebAssembly byte codes, and creates lots of tiny little WebAssembly modules dynamically that can call each other, by calling back to JavaScript to dynamically create and link modules, which it links together in the same memory and symbol address space on the fly! A real eye opener to me that it was possible to do that kind of stuff with dynamically generated WebAssembly code! It has many exciting and useful applications in other languages than FORTH, too. Lots more discussion and links in the reddit article. But here's the beef, jump right in: https://github.com/remko/waforth/blob/master/src/waforth.wat https://github.com/remko/waforth/blob/master/src/waforth.wat Reddit /r/Forth discussion of WAForth: https://www.reddit.com/r/Forth/comments/zmb4eb/waforth_wasmbased_ans_forth_supports_interactive/ https://www.reddit.com/r/Forth/comments/zmb4eb/waforth_wasmb... remko: Author here If you can't be bothered to install VS Code, you can have a look at a standalone version of the example notebook (in a 26kB self-contained page). And if you're planning to go to FOSDEM 2023, come say hi: I'll be giving a talk there on WebAssembly and Forth in the Declarative and Minimalistic Computing devroom. DonHopkins: I really love your tour-de-force design and implementation of WAForth, and I have learned a lot about WebAssembly by reading it. Never before have I seen such beautiful meticulously hand written and commented WebAssembly code. Especially the compiler and runtime plumbing you've implemented that dynamically assembles bytecode and creates WebAssembly modules for every FORTH word definition, by calling back to JavaScript code that pulls the binary bytecode of compiled FORTH words out of memory and creates a new module with it pointing to the same function table and memory. WebAssembly is a well designed open standard that's taking over the world in a good way, and it also runs efficiently not just in most browsers and mobile smartphones and pads, but also on the desktop, servers, cloud edge nodes, and embedded devices. And those are perfect target environments for FORTH! What you've done with FORTH and WebAssembly is original, brilliant, audacious, and eye-opening! I'd read the WebAssembly spec before, and used and studied the Unity3D WebAssembly runtime and compiler to integrate Unity3D with JavaScript, and I also studied the AssemblyScript subset of TypeScript targeting WebAssembly and its runtime, and also Aaron Turner's awesome wasmboy WebAssembly GameBoy emulator . I first saw your project a few years ago and linked to it in this Hacker News discussion about Thoughts on Forth Programming because I thought it was cool, but it's come a long way in three years, and I'm glad I finally took the time to read some of your code, which was well worth the investment of time. Until reading your code, I didn't grasp that it was possible to integrate WebAssembly with JavaScript like that, and use it to dynamically generate code the way you have! Also, the way you used Racket as a macro assembler for WebAssembly was a practical and beautiful solution to the difficult problem of writing maintainable WebAssembly code by hand. Even for people not planning on using FORTH, WAForth is an enlightening and useful example for learning about WebAssembly and its runtime, and a solid proof of concept that it's possible to dynamically generate and run WebAssembly code on the fly, and integrate a whole bunch of tiny little WebAssembly modules together. Playing with and reading through your well commented code has really helped me understand WebAssembly and TypeScript and the surface between them at a much deeper level. Thank you for implementing and sharing it, and continuing to improve it too! remco: Wow, thanks a lot, I really appreciate that! It makes me very happy that I was able to get someone to learn something about WebAssembly by reading the source code, which is exactly what I was going for. [More links and discussion of WAForth, WebAssembly, and Forth Metacompilers:] https://www.reddit.com/r/Forth/comments/zmb4eb/waforth_wasmbased_ans_forth_supports_interactive/ https://www.reddit.com/r/Forth/comments/zmb4eb/waforth_wasmb...