HISE Transformation to the new age
-
@Christoph-Hart said in HISE Transformation to the new age:
but have you tried using an AI agent with the latest models?
Na I played around with OpenCode and Big Pickle and got bored waiting for it to fail, so then I went back to work :)
I'm waiting for someone to show me something impressive enough to get me interested in it to the point where I'll put some money down.
-
@David-Healey Yes I also tried Big Pickle, it has nothing to do with what Opus 4.5 / 4.6 can crank out. I'll try to remember a few of the things that stood out to me in my progress of last week.
- oneshotting a HTTP RestServer for HISE that accepts HTTP requests with a correct threading model.
- finding a bug in a compiled network code that caused a voice to not be killed. It explored it's way through the DLL boundary to the internal class that handles modulation chains and found the one bool flag that I forgot to set
- iteratively increasing the robustness and approximation to what looks like flawless HiseScript code by feeding the conversation history back to itself and just tell it to "learn from your mistakes"
- don't get me started on web dev, it's game over there.
- let it crawl through the HISE source code, extract every single LAF method I define in the ScriptLAF class, analyse the function body, connect it to the correct hise component class (eg. "drawAhdsrGraph" will most likely affect a
hise::AhdsrGraph) and write a one-liner description to everyobjproperty that matches exactly what it does, then create a JSON object that I can use for the MCP server. Then let it write a guideline.md file that instructs it to repeat that process whenever I need. Bash script on steroids. - paste in long weird template compiler errors and get a 5 word sentence back what the problem is and how to solve it. It also wrote this beauty of a C++ template code that a human will never understand, but it works perfectly:
struct VoiceSetter : container::Helpers::sub_tuple<renderer<Oscillators, NumOutputs>...> { using GainModVS = typename core::extra_mod<NumVoices>::VoiceSetter; using GateVS = typename envelope::extra_mod_gate<NumVoices>::VoiceSetter; // Use empty tuple when addModToOutputs() is false, otherwise tuple of NumOutputs VoiceSetters using GainModTuple = std::conditional_t<addModToOutputs(), template_helpers::repeat_tuple_t<GainModVS, NumOutputs>, std::tuple<>>; using GateTuple = std::conditional_t<addModToOutputs(), template_helpers::repeat_tuple_t<GateVS, NumOutputs>, std::tuple<>>; // Delegating constructor for when we have outputs to manage template <size_t... Is> VoiceSetter(render_group& t, bool forceAll, std::index_sequence<Is...>) : container::Helpers::sub_tuple<renderer<Oscillators, NumOutputs>...>(t.oscillators, forceAll), gainModSetters{ GainModVS(t.outputGainMods[Is], forceAll)... }, gateSetters{ GateVS(t.outputGates[Is], forceAll)... } {} // Delegating constructor for when we have no outputs to manage VoiceSetter(render_group& t, bool forceAll, std::index_sequence<>) : container::Helpers::sub_tuple<renderer<Oscillators, NumOutputs>...>(t.oscillators, forceAll), gainModSetters{}, gateSetters{} {} // Public constructor - dispatches to appropriate delegating constructor VoiceSetter(render_group& t, bool forceAll) : VoiceSetter(t, forceAll, std::conditional_t<addModToOutputs(), std::make_index_sequence<NumOutputs>, std::index_sequence<>>{}) { } GainModTuple gainModSetters; GateTuple gateSetters; };compared to the complexity of these tasks, even a mid-tier HISE project should be trivial to implement as soon as the knowledge gap between C++ and HiseScript is solved (and that's my task now).
-
@Christoph-Hart said in HISE Transformation to the new age:
template code that a human will never understand
Is there a version that a human would be able to understand or is this the sort of thing that even if a human wrote it would still be gibberish?
How is it for adding features or fixing bugs in the HISE codebase? This is where I would be most interested.