In general I’ve found it’s much better in C++ to be verbose and plain rather than succinct and elegant.
Javascript and python lack typing so being pithy&clever in those languages has entirely different implications than in C++.
“How can I express this in the most basic, unsurprising and plainspoken C++” is usually the right question to ask. “How can I make this more elegant” is a question better suited for other languages imho.
While you will need C++26 for real reflection, you could use some of the libraries that make do with what is already possible via concepts, if constexpr and type traits.
The json library 'glaze' has working compile time reflection for MSVC, Clang and GCC using some tricks with aggregate initializable structs. In addition to being a performant json library, it comes with the functions glz::apply and glz::to_tie which I used for general tool calling straight from deserialized json.
Very nice! I might get inspire for my own Qt C++ LLM client[1]. Do you plan to add streaming Markdown parsing? It's a challenging problem that was very fun implementing for Vox -> it allows parsing code blocks and other such advance/custom blocks (I created a custom 'tool' block) without re-rendering. My implementation is currently tied to Qt's C++ but I might make it more generic and open source it.
“mapping plain functions → JSON schemas”
In general I’ve found it’s much better in C++ to be verbose and plain rather than succinct and elegant.
Javascript and python lack typing so being pithy&clever in those languages has entirely different implications than in C++.
“How can I express this in the most basic, unsurprising and plainspoken C++” is usually the right question to ask. “How can I make this more elegant” is a question better suited for other languages imho.
The best C++ API when in doubt is a C style API.
Agreed! C++ is a powerful language but full of footguns.
While you will need C++26 for real reflection, you could use some of the libraries that make do with what is already possible via concepts, if constexpr and type traits.
For example,
- https://www.boost.org/doc/libs/latest/doc/html/boost_pfr.htm...
- https://github.com/getml/reflect-cpp
And kudos for using modern C++.
The json library 'glaze' has working compile time reflection for MSVC, Clang and GCC using some tricks with aggregate initializable structs. In addition to being a performant json library, it comes with the functions glz::apply and glz::to_tie which I used for general tool calling straight from deserialized json.
Very nice! I might get inspire for my own Qt C++ LLM client[1]. Do you plan to add streaming Markdown parsing? It's a challenging problem that was very fun implementing for Vox -> it allows parsing code blocks and other such advance/custom blocks (I created a custom 'tool' block) without re-rendering. My implementation is currently tied to Qt's C++ but I might make it more generic and open source it.
[1] https://www.get-vox.com/
I was wondering, has anybody tried to use AI to port c++ to C?