Glamorous Toolkit: Moldable development environment
gtoolkit.com
gtoolkit.com
I find the gtoolkit interface a little clunky in a way I can't quite describe but the core ideas are fascinating:
- if you're looking at a compiled method it's trivial to switch between different representations: you can easily look at the original source or the AST or the bytecode. It's also easy to write your own representations.
- the same applies to all other objects: it's easy to write views which let you query and visualize your application's object graph in the ways which are most useful to you
This sounds a lot like the lisp pitch: While you write your application you're also writing the tools which make it easy to write and debug your application. In Lisp you do this through molding the language; in GToolkit you do this through molding the IDE.
I wonder if instead of binding to lua/angelscript, you could instead somehow expose the reverse engineered objects and such to this system to get a nice customizable/programmable UI.
I have 0 understanding of how this system functions at the implementation level, as in how much it relies on the underlying language/runtime/whatever. I know very little about Pharo or how it's actually implemented, just that it's inspired(?) by smalltalk (which I also know very little about). But it looks really cool and makes me excited thinking about the different possibilities that it could potentially open.
A lot of (some?)people are interested in modding games (with no mod support), but have no understanding of C/C++ or memory models. Trying to explain the levels of indirection of all the objects is difficult without visualization.
Are you the author? Where does the connection to the JS/Python runtimes happen? I looked through the github repos, but I am _very_ far out of my depth. I wanted to see what the API looked like, maybe it's something that could be implemented fairly easily.
The connection to other runtimes happens through an instantiating of a more generic proxy model. The same mechanism also enables us to connect with debugging interfaces as well. So, if you have a way to get the memory layout from a runtime, it should certainly be possible to play with it in GT.
Docs link: https://gtoolkit.com/docs/
> I find the gtoolkit interface a little clunky in a way I can't quite describe
I would so love to expore with you what makes it feel clunky. Please do feel free to contact me directly https://twitter.com/girba.
I wonder if the benefits of GToolkit would go beyond using it to extend itself through Pharaoh. Would it be just as useful for writing C++ applications?
For example, there are connections to JS and Python out of the box for executing, inspecting and debugging. These are mere examples of what one can build with the environment.
In any case, the first target of our work is to help people discover and practice Moldable Development which is a generic approach to software engineering.
It has a C++ parser already, something could be built on top of that to help turn it into a proper C++ editor. Perhaps turn it into a structure editor. And it can start OS processes so you can use your existing build tools and such.
What I couldn't find is information about workshops or forums besides discord to talk and understand about its possibilities.
Specifically, I had trouble understanding how to apply it to other programming languages and their frameworks. I can see that for some of them (e.g. PHP) you have to export the project with a tool and then import it into GToolkit, but that converts such a system into just an static structure to be analyzed, but not a live system to experiment with. This would mean that live documentation would require permanently exporting and then importing the code from such system. To get a living system + its real time perspectives and embedded live documentation it seems you must program the system in Pharo.
As someone who gets distracted way too much I usually require that a project can demonstrate why it might be interesting at a glance and this one failed pretty hard.
Luckily it was on HN so I could come to the comments to see if it was worth looking into more deeply - but ideally it should be able to do that by itself.
My choices were either 37m video - or a bunch of text that seemed too abstract and didn't explain "what this does" in a concise, down-to-earth manner.
Also mentioning "Smalltalk" would have been a really useful thing. The fact it sounded Smalltalky and I vaguely remember reading about Pharo was my only clue. The minute I understood this was related to Smalltalk a lot of other things fell into place.
After two hours of trying to follow incomplete instructions, downloading special IDEs and plugins, hunting for alternatives to dead links, etc, I gave up on the process.
For me, the Mac (both ARM and Intel) binaries have consistently “just worked“ for the past 2+ years
A more pragmatic answer: - If a Smalltalk IDE is what you are looking for, give it a try. Right now. You won't regret it. - If static analysis of large code bases is what you are looking for, explore the current level of support for your language (best done by asking a question on Discord), and if it's good enough, give it a try. Otherwise, check again later. - If you are interested in new approaches to software and knowledge management, give it a try, right now, but be prepared to invest some time before you "get it".
It's those and more. It's also a programmable knowledge management system. It comes with playground snippets and debuggers for several languages, like JS and Python. More recently it is also a distributed Smalltalk that can be debugged remotely. It comes with a graphical stack that unifies editors with visualizations. All these in a single uniform (and not too large) environment that shows that programming, knowledge management, API management and data science can all be served in a single uniform environment.
These are just the large pieces. Yet the goal is to empower people to create their custom system-specific experiences. Actually, we go as far as to create object-specific experiences. The goal is to help people make the inside of their systems explainable through the practice of Moldable Development.
For what it's worth (which is likely very little) the main takeaway I get from the above (in true HN style, without having read the article) is the call-out to knowledge management.
Perhaps because the other bits sound like cool tech you must have built in order to pursue other goals. Who wouldn't want a distributed engine you can debug remotely! I suppose I have some sales hat on. Who could I sell what to?
And here we have the Glamorous toolkit. This is Tudor Gîrba and feenk's thing. They embrace this philosophy completely. They have built an enormous suite of visualizations that allow you to find out things about your program while it's running. We should all take inspiration from this. This is an ancient tradition, and they have kind of taken this old thing of Smalltalkers and Lispers building their own tools as they go to understand their own codebases, and they have sort of pushed it – they've pushed the pedal all the way to the floor, and they're rushing forward into the future and we should follow them.I think that software engineering should have moved on to this years ago. And maybe they tried but programmers are subconsciously afraid of being accused of being mere users and so want to have colorful complex text in front of them at all times. I a also subject to this.
It's all fixable with enough time and effort, no doubt. Unfortunately, I don't have that kind of time on my hands anymore. I'd love to see and use all the new shiny tools developed in and for Pharo, but - even if it started working again - I don't have the time to read all the code and piece the puzzle together on my own. Some kind of documentation would be nice. Hopefully, included in the distribution. No such luck as far as I can see.
So, even knowing that I'm missing out on some really cool things, I recently switched my Smalltalk development to Cincom® VisualWorks© Smalltalk (I hope I got these Rs and Cs right...) It's a version from 6 years ago at this point and partially closed-source, but it's rock-solid and stable, very well documented with thousands of up to date (easier to provide when you're working with a stable system) pages in PDFs, with guides and references; comes with a lot of goodies and working, well tested support for namespaces, inner classes, visibility modifiers for classes, extended streams (though they're closer to RxJava than classic streams, and I didn't like them very much), some other language extensions (no traits though), the GUI painter, and so on. And all of that works, even if some of it looks less glamorous then the screenshots presented here, which are all I'll ever see of this toolkit until Pharo starts treating users with a bit of basic respect.
I have a blog post about making VW IDE a bit prettier - just look at the screenshots: https://klibert.pl/posts/smalltalk-ide-quickfix.html - yeah, it looks so last-gen, right? I know. But it works. And it survived like 3 system upgrades, 1 reinstall and 1 fresh install on a new laptop without issues. If only Cincom was more flexible when it comes to licensing the commercial version!