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.
This is one of the few well written and enjoyable tutorials on the topic. There is a lot of older texts out there with inaccurate and inconsistent language, ascii-diagrams etc… but this a joy to read and follow
I second this. I also wish the algorithm would throw a real curveball once in a while too, something completely different to what I have been caught in.
I can vouch for this. I recently had a wonderful experience spanning a few months cultivating Psylocybe cubensis by salvaging spores from a bag of dried shrooms (spore prints are as illegal as the shrooms themselves here and really hard to come by). Coming from a physics background and never really having done work on living things it was almost magical watching the spores germinate on agar plates, transfering healthy mycelium away from contamination onto new clean plates, colonizing grain with the resulting mycelium and in the end fruiting several healthy flushes in a small plastic container in my cupboard. You really just need a kitchen and some commonly available groceries. I'm now cloning store-bought edible mushrooms and planning to grow enough for my own dinners throughout the warmer season. It's a very rewarding hobby.