HNHacker News
TopNewBestAskShowJobs

dctwin

77 karma · joined September 23, 2023

submissionscomments
dctwin··on Agent swarms and the new model economics
Am I reading this right? Opus + Composer did a comparable job to Fable, at ~1/19th the price, and half the LoC?
dctwin··on Sam Altman's home targeted in second attack
The layoffs haven't even really started yet... I'm very worried about the next two years
dctwin··on Compile-time JSON deserialization in C++
Oh I think I finally groked what you suggested! Something like

template <StringLiteral str> static constexpr Key<str> key

in the class namespace - I think this this would work, but if I understand this correctly, You would need to do like

User user {...}; user[User::key<"myKey">]

Which actually is not so bad...

dctwin··on Compile-time JSON deserialization in C++
Whether or not this is useful (I am also not sure), the JSON doesn't need to survive into runtime at all. If you include the JSON, do a bunch of `if constexpr`, and never touch the JSON outside of a constexpr context, it doesn't have to any footprint on your binary. (I'm not sure if #embed will force stuff to stay in your binary even if you never reference it at runtime)
dctwin··on Compile-time JSON deserialization in C++
Yes, very true. I noticed that even already at 3dp the floats start to compare unequal. The long double helped but it's not really.

I googled and found two examples of constexpr float parsing repositories, but from the sounds of things, you understand this problem better than I and will have seen them already

dctwin··on Compile-time JSON deserialization in C++
You're right to point out that this is really 'first class JSON', rather than the Pydantic/Jackson type thing where the json barely exists and is immediately transformed into your models and classes.

Thanks for reading the article though, that's cool. I am a daw_json_link fan

dctwin··on Compile-time JSON deserialization in C++
The opposite 'toString' problem seems harder - I didn't try, but it should be possible now that std::string is constexpr.

I don't think you could parse it with, say, a class that has a std::string member (because of the transience restriction), but perhaps you can use lambdas that capture that string by reference, and call each other as appropriate?

As for exporting that as some sort of compiler artefact for use elsewhere, I am not sure how you would do that...

dctwin··on Compile-time JSON deserialization in C++
You can do something similar, no? std::pow is not constexpr (most float stuff is not, presumably due to floating point state) but you can implement 10^x anyway
dctwin··on Compile-time JSON deserialization in C++
Despite my writing the article I agree
dctwin··on Compile-time JSON deserialization in C++
Thanks for the idea! Yes constexpr std::vector feels like cheating
dctwin··on Compile-time JSON deserialization in C++
Yes, the nonconstexpr version does just that, unless I misunderstood your question. See also boost::spirit for a 'big' version of this
dctwin··on Compile-time JSON deserialization in C++
Hm - so this would instantiate a variable for each key in the class namespace? I admit I haven't seen anything like this but sounds very interesting
dctwin··on Compile-time JSON deserialization in C++
I was able to do the primitive

long double result = 0.0;

while (...) {

  if (json[head] == '.') ...

  result *= 10; result += json[head] - '0';
}

in a constexpr function with no problem :)

dctwin··on Compile-time JSON deserialization in C++
Yes, I agree. I don't see much practical use in this. I was just surprised how (relatively) straightforwards this is to do, and thought it was more cool than useful
dctwin··on Compile-time JSON deserialization in C++
Thank you!
dctwin··on Compile-time JSON deserialization in C++
Hello! I wrote this short blog post about using pattern-matching-like template metaprogramming to deserialize JSON at build time - please let me know what you think (especially if you see improvements)