It might not look very impressive to you, but this is pure joy to me. It is the first evidence I’ve seen that the revised rewritten protobuf-net can work in MonoTouch for use on the iPhone – and presumably MonoDroid in the future.
A big thanks here to Christian Weyer and Andrew Rimmer who both offered some help here (since I don’t actually own a mac, an iPhone or MonoTouch!). The grab is from Andrew (he assures me it works fine on the actual device too).
This piece of work has been a slog, and I kept putting it off (because frankly, re-writing the entire stack is a huge job). The goals have not been trivial:
- Continue to support all the existing runtime-only usage…
- ..while also making it support fully static / AOT compatible
- Allow it to write serialization dlls in advance (like sgen)
- Fix the stability issues on Compact Framework (caused by overuse of generics)
- Remove some performance bottlenecks on Compact Framework
- Support POCO (or more accurately, work without requiring special [attributes]) so you can use it with types outside your influence, or for inheritance that isn’t known at compile-time
- Make it work on iPhone etc
- Make it even faster
- Make it more extensible (for example, what if I want to write a proxy that writes a DataTable to a protobuf stream?)
- Make it support mutable structs (yes I know that they are usually evil, but people simply keep asking for this, in particular for XNA)
- Remove a heap of code-debt caused by an evolving project that grew without a 100% clear direction
- Throw in some other feature-requests and bug-fixes for good measure
- And as a side-benefit, it even compiles and runs on .NET 1.1 or via mcs on Mono (with minimal #if usage)
I should stress that it is not yet complete – but the core of the engine is there and working, demonstrating most of the key points above (albeit in a very raw state). There’s still a way to go, but it is getting there.