@Kragen: while shelling out to the system is always a possibility, I’m really trying to stay within portable C99, and not make assumptions about the environment. A good model for what I’m going for is zlib: I think zlib is ubiquitous in large part because it makes absolutely no assumptions about your system. It even lets you swap in your own implementations of malloc and free
For example, I want pbstream to be usable in embedded system. Here’s an example of a guy who’s in a situation I want to accommodate: GPB on non-Linux, non-Windows OS?.
I hear what you’re saying wrt. just using Python’s dict. Although accommodating languages like Python, Ruby, Lua, etc. is one of my goals, I also want this library to perform well standalone, in cases where there is no other hashtable implementation available. Also, of my two hashtable use cases, the int->void* lookup that happens in the critical path of parsing is the more important one to me by far, and this happens at a layer below where you’d interface something like Python or Ruby.
It makes me really happy that you’re independently interested in Gazelle! pbstream and Gazelle are actually soon to be intertwined: Gazelle needs a bytecode format and an AST serialization format (I mean to switch to protobufs from LLVM bitcode), and pbstream needs a way to parse .proto files. pbstream->Gazelle won’t be a hard dependency though — you’ll be able to load .proto definitions in binary form if you want.
I’m afraid I’m drawing a complete blank on your friend Matthew O’Connor though, and I’ve never been associated with Pivotal. Is there something I’m forgetting?