Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a production quality Google Protocol Buffers implementation in .NET

The title says it!

I know that Jon Skeet was working on an implementation and I heard an interview (Dot net Rocks?) where he implied it was w.i.p.

The latest page just shows a version number. So, is it now production ready?

thanks

like image 931
Fortyrunner Avatar asked Sep 03 '09 14:09

Fortyrunner


2 Answers

There are two main implementations of Protocol Buffers:

  • Mine (mostly a port of the Java code)
  • Marc Gravell's ProtoBuf-Net (more WCF friendly, ground-up reimplementation)

I know Marc was in the middle of a major refactoring a little while ago; I don't know if he still is.

My own port works as far as I'm aware (bar a bug in packed type sizing which was reported a couple of days ago) but lacks some polish around the generation side of things. Some users are interested in Silverlight compatibility which I've been working towards but haven't tried yet. (Basically there are a few methods missing in Silverlight which I was using; I think I may have migrated all of them now - I need to check.)

I don't know whether either implementation is in production use for any systems, but I'll be happy to try to fix any bugs you raise. Note that I'm not intending to implement the "lite" PBs which appeared in the main 2.2 code; they would make the already-complicated inheritance nastier. I will be introducing an extra option to allow the mode (speed/size optimization) to be specified separately for C# soon.

like image 116
Jon Skeet Avatar answered Sep 27 '22 22:09

Jon Skeet


Doh.... John Skeet beat me to it!

You need to look at the Other languages implementations page on the protobuf google code page...

There are 3 .net implementations.

dotnet-protobufs by Jon Skeets

protobuf-net by Marc Gravell

protosharp

The first one is a C# clone of the original protobuf which only supported C++, Java and Python.

The second has been greatly extended to fit in more with C# and can even be used in the place of the native remoting. I would use this if you are not doing cross platform work.

When I looked at the last one didn't see any good reason to use it over the first two.

like image 43
AnthonyLambert Avatar answered Sep 27 '22 22:09

AnthonyLambert