FlatBuffers was definitely the majority of the improvements here!
On 64-bit systems, pointers themselves can really start to take up a lot of memory (especially if you multiply them across 100k+ adblock filters). Switching to array indices instead of pointers saves a lot of memory that's otherwise wasted when you don't need to address the entire possible memory space.
The biggest improvement for us was deduplication by using generators an referencing already emitted objects. Don't run flatc on a JSON, it doesn't do that.
I guess code bloat is proportional to schema complexity, and performance improvement is proportional to volume, so in ad blocker with many large block lists the latter dominates.
Balancing developer satisfaction with raw productivity is a critical trade-off. While the 'joy of coding' maintains long-term engagement, LLMs provide a necessary lift in throughput. I prefer a surgical approach: disabling LLMs for core logic to avoid 'auto-pilot' bias, while utilizing them for the high-friction work of documentation and unit testing.
Yes, but you have to cast it explicitly. If you have two different arrays each with its own enum, the compiler would throw an error if you used the wrong one.
I’ve been using Go Expr for a while because it’s zero-dependency and fast, but I kept hitting walls that weren't obvious in the docs—like the fact that map keys in the script are treated as literals, or the "strict vs forgiving" difference between structs and maps.
I put together this deep dive into 10 specific gotchas to help others avoid the same debugging loops I got stuck in.
reply