Stripping down protobufs to their essence is *exactly* what I am doing with pbstream:
http://github.com/haberman/pbstream If you can hang tight for just another few weeks, I think you're going to like what you see. The streaming decoder is more or less finished: it's just over 500 lines of C99 and compiles to a ~6k object file. I'm working now on an in-memory representation, which should be also quite small. And while I don't have any benchmarks yet, I think it's going to be extremely fast, despite not doing any code generation. In the case where you're not actually copying the data into a separate structure (eg. pure streaming) I think it will likely beat the main implementation (malloc is more expensive than people realize). Josh On Feb 27, 1:55 pm, Tim <timbla...@gmail.com> wrote: > That sounds like an excellent idea! > > On Feb 27, 11:51 am, Kenton Varda <ken...@google.com> wrote: > > > Stripping out the use of file descriptors and iostreams should be easy. All > > you have to do is remove the relevant classes from > > zero_copy_stream_impl.{h,cc} and the corresponding methods from > > message.{h,cc}. The rest of the library doesn't depend on these. Note that > > protoc needs them, but presumably you will only run protoc on your build > > machines, not on the target platform itself. > > I had an idea yesterday: We could define a new superclass of > > protobuf::Message called protobuf::LeanMessage. It would only have basic > > serialization methods -- no descriptors or reflection. It could then live > > in a separate libprotobuf-lean library that contains only the I/O stuff and > > the LeanMessage interface. Then we could add an option to protoc which > > outputs code that only implements this new "lean" interface. Hopefully this > > new library would be far smaller than the current 870k libprotobuf.so. > > > On Fri, Feb 27, 2009 at 10:58 AM, Tim <timbla...@gmail.com> wrote: > > > > That's precisely the case I've been hoping to make in my current work. > > > Since it's a static library to us, the point of stripping down isn't > > > so much for reduced footprint (our linker should eliminate the unused > > > modules anyway), but instead to simplify the porting effort. > > > > One of the first things I did was to get libprotobuf 2.0.3 to "build" > > > in our environment (Freescale Codewarrior for PPC). But I did this in > > > a very incomplete way - just pulling in the missing headers from > > > Cygwin - hoping to get a feel for what the problem areas were. These > > > were the missing headers: > > > > include/ > > > _ansi.h > > > fcntl.h > > > newlib.h > > > machine/ > > > _types.h > > > ieeefp.h > > > types.h > > > sys/ > > > _types.h > > > config.h > > > fcntl.h > > > features.h > > > lock.h > > > stat.h > > > types.h > > > unistd.h > > > > We would of course have to port most of the dependencies to our OS. > > > But some of these dependencies are things our system may never > > > support. For example, we don't currently support files and streams, or > > > exceptions. Our application really only needs the data object > > > serialization functionality, and the buffer/string interface is > > > sufficient. I thought that, like protobuf-c, there might there a past > > > release that would be a better starting point for stripping down > > > libprotobuf. But from what I can tell, it looks like even the initial > > > release supports files and streams. Pretty basic stuff in most > > > environments. I realize we are an exception here. > > > > After briefly evaluating protobuf and protobuf-c, I can see that we > > > would have to heavily modify either one to achieve our goal. Given > > > this, I would like to lean towards stripping/modifying the c++ > > > version, since our app is largely in c++ and this language might > > > facilitate our design modifications/extensions. Might you have any > > > recommendations or comments on an approach for stripping protobuf of > > > file and stream support? > > > > Given our simple requirements and the perceived work involved with > > > stripping libprotobuf, however, my instinct tells me that protobuf- > > > c-0.7 would be a better starting point. It already is "stripped". I'm > > > guessing we could add the functionality we need there quicker than we > > > could strip down from protobuf. Maybe even rewrite it in c++. It's > > > only 3 files! > > > > Comments, anyone? > > > > On Feb 26, 5:41 pm, Kenton Varda <ken...@google.com> wrote: > > > > I've tested in on OSX, FreeBSD, and Solaris, but those are not terribly > > > > different from Linux. The Google implementations of protobufs > > > > definitely > > > > weren't designed for embedded systems, but there might be a case for > > > taking > > > > the Google C++ implementation and ripping out all the "advanced" > > > > features > > > to > > > > make something extremely stripped-down. > > > > > On Thu, Feb 26, 2009 at 5:27 PM, Tim <timbla...@gmail.com> wrote: > > > > > > Anyone out there using GPB on an OS other than Linux or Windows? I've > > > > > been evaluating GPB for use in an embedded OS and at the moment am a > > > > > bit stuck between protobuf and protobuf-c. We would be using GPB for > > > > > simple data storage and serialization, and don't need RPC or even > > > > > Reflection. I checked out protobuf-c (0.7 is easiest to port, bc it's > > > > > before RPC was added) and this is definitely at the opposite end of > > > > > the spectrum. We would need to add quite a bit of functionality to it. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to protobuf@googlegroups.com To unsubscribe from this group, send email to protobuf+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/protobuf?hl=en -~----------~----~----~----~------~----~------~--~---