5 ms·
I totally agree with what you said, but I'm having problems to put it into practice. I spent years learning Forth (wrote some toy programs, collaborated with s
by yiyus 7y ago
I totally agree with what you said, but I'm having problems to put it into practice.
I spent years learning Forth (wrote some toy programs, collaborated with some projects, even wrote my own interpreter) and for the last couple of years I have been very interested in APL and derived languages (I like k's simplicity and Dyalog APL's feature completeness, but I'm starting to like J more and more). However, there is no way I can justify using any of this at work.
I cannot convince my colleagues that learning J or colorForth will help them in their careers more than learning C++, Fortran or Python, because it won't (I work in research, writing scientific software), and I cannot convince my bosses that it will be more productive to forget about all those juicy libraries in C++ and Python to rewrite everything in some esoteric language, because in fact it will take me longer.
So, I guess it is also my fault, but I have no idea how to change it.
- carapace 7y ago"Don't worry Charlie, I've got my foot on the rail..." I have a plan... There's a language, Joy, that combines the best parts of Forth and Lisp. It's also simple enough to be (re)implemented in other languages very quickly, so it can form a cross-runtime glue language and UI macro system. It's very good for refactoring, partial evaluation, etc. It seems to deliver on the idea of mathematical programming. I've implemented a simple GUI that takes innovations from the old Oberon OS and Jef Raskin's "Humane Interface" to make a very simple but elegant user interface. With Joy and this UI there are no separate "apps" or programs, only one body of commands (words in Forth, functions, etc.) that can be "scripted" by the user. Mouse interaction and CLI are unified. For example, you can click on commands, and then make a "script" (a new command) out of the commands after the fact. All files are kept in a VCS including the current system state, and autosaved after every change (so you can literally kick out the plug, plug it back in, and keep going from where you left off.) Never lose work. With Joy you wrap other systems and libraries and expose collections of command words that then let the user use them at the "desktop" level. Eventually I'll write parsers for other languages and translate them into Joy to take advantage of the "convergence" to contract the total amount of code (even as I add more capabilities.) I was in the middle of implementing type-inference when I was bushwhacked by compilers in Prolog. The original thing that led me to all this was Dr. Margaret Hamilton's Higher Order Software. (See "System Design from Provably Correct Constructs: the beginnings of true software engineering" James Martin) Long story short, adding type-inference to Joy makes it easy to derive correct software. (This used to be a novel thing to say.) If you want to check it out my project is here: http://joypy.osdn.io/ http://joypy.osdn.io/ Python, Prolog implementations. The GUI is undocumented. There are two: ./gui uses Tkinter text widgets; ./vui uses SDL via PyGame to draw to the screen directly and is meant to guide re-implementation in Joy for a self-hosted IDE thing. I'm just at the point where I'm going to start targeting "vertical niche" use cases (i.e. interpreting MRI data using ML and finite element methods, etc.) and get some user feedback. I'm not going to try to get developers to use it. I'm going straight to the users. If I don't tell them they are programming they should be able to do it just fine on their own. If this works I'm going to eat software, even as it eats the world.
- ekc 7y agoIt's a purely functional language; how exactly is it influenced by the best parts of Forth, then?
- carapace 7y agoMost of the design geist for Forth applies pretty directly to Joy. E.g. you can read "Thinking Forth" and apply it to Joy.
- yiyus 7y agoJoy is in my TODO list. I have only heard good things about it. I never got into it years ago when I was more interested in concatenative languages (neither I learnt cat, which I think is quite similar). Much more recently, I stumbled upon it again in nsl.com. It seems like Steven Apter found the Joy combinators very interesting and implemented them in other languages. It looked like a totally dead language to me and this does not help with motivation, but I should definitively check it at some point. I will have a good look at your project too. It looks like something I may like. It still looks quite far from something I may use at work, but I'd love being wrong about that.
- carapace 7y agonsl.com is pretty amazing, I haven't seen it before, cheers! > It seems like Steven Apter found the Joy combinators very interesting and implemented them in other languages. Yeah. I'm convinced that Joy is somehow important. It has to do with Category Theory maybe, but I'm not a good enough mathematician to say how. Be sure to look at the Prolog implementation in the ./thun subdir. Something that elegant has to be significant, eh? As for using it at work, YMMV. You wouldn't use my project (not yet anyway.) But I think it might makes sense to implement Joy as a library in other languages, like Walker's ATLAST. "The painful path to programmability" explains the idea: ATLAST Autodesk Threaded Language Application System Toolkit by John Walker https://www.fourmilab.ch/atlast/ https://www.fourmilab.ch/atlast/