Well, I’ve been beavering away in secret on a new project, and thought it was time to share it with the world - since the app’s not ready for a release yet, I’ve made a little demo video to give you a feel for what it’ll be able to do:
(Apologies for the blurriness - my machine’s CPU was struggling to run the screen-recording software at the same time as the Projucer, and medium-quality was the best it could do!)
The TL;DR is: When I watched the Bret Victor video a few months ago, my reaction was “Wow, I’d love to have a tool like that, but it’d be impossible to get real-time feedback of code changes in a compiled language like C++”… Then I pondered a bit more, did some research on what was going on in the LLVM/Clang projects, and thought “Damn it, let’s have a go…”
What I’ve done is to extend the Introjucer so that it can build your project using Clang, and whatever component classes it finds can be displayed in a preview window by creating instances of them inside the LLVM JIT engine. As you edit the code, any changes get recompiled, and the previews magically update to show the changes. Changes to simple literal values can be injected instantly into the running program, but even when a file needs to be recompiled, it has a turn-around time of less than a couple of seconds to build and relaunch the JIT engine - so the result is pretty-much realtime feedback as you’re editing your code.
As well as just showing a preview of a component, it also provides a GUI-editor with the same kind of functionality than was there in the old Jucer. But unlike the Jucer (and all the other GUI editors that I’m aware of), it can work with any valid component class, not just one that has been carefully set-up to allow editing. It doesn’t need any metadata or specially-formatted comments to work with a component: because there’s a full C++ compiler under the hood, it can dig right into any class and manipulate the code directly, so there’s no longer a dividing line between tool-generated code and user-written code. Operations like creating child components, moving them around, changing their properties, etc, are treated as refactoring operations.
I’ve already found it to be incredibly useful in writing code: when you’re nudging colours or pixel positions around to make something look just right, it can save hours of tedious compiling and relaunching. So I’m pretty excited about how useful this will be in my own day-to-day coding, and hopefully that means a lot of other people will want to get their hands on it too!
This news forum is locked, but please feel free to shoot any questions at me on the main boards!