Thanks for having a look. On Wed, 12 Jun 2024 at 00:08, Melih Mutlu <m.melihmu...@gmail.com> wrote: > In 0001 patch, I see that there are some escape_json() calls with > NUL-terminated strings and gets the length by calling strlen(), like below: > >> - escape_json(&buf, "timestamp"); >> + escape_json(&buf, "timestamp", strlen("timestamp")); > > Wouldn't using escape_json_cstring() be better instead? IIUC there isn't > much difference between escape_json() and escape_json_cstring(), right? We > would avoid strlen() with escape_json_cstring().
It maybe would be better, but not for this reason. Most compilers will be able to perform constant folding to transform the strlen("timestamp") into 9. You can see that's being done by both gcc and clang in [1]. It might be better to use escape_json_cstring() regardless of that as the SIMD only kicks in when there are >= 16 chars, so there might be a few more instructions calling the SIMD version for such a short string. Probably, if we're worried about performance here we could just not bother passing the string through the escape function to search for something we know isn't there and just appendBinaryStringInfo \""timestamp\":" directly. I don't really have a preference as to which of these we use. I doubt the JSON escaping rules would ever change sufficiently that the latter of these methods would be a bad idea. I just doubt it's worth the debate as I imagine the performance won't matter that much. David [1] https://godbolt.org/z/xqj4rKara