Можно ли использовать буферы протокола с F #? - PullRequest
3 голосов
/ 15 февраля 2011

Просто любопытно - можно ли использовать буферы протокола с F #? Любые предостережения и т.д.?

Ответы [ 3 ]

9 голосов
/ 05 июля 2011

Я просто пытаюсь ответить на этот вопрос сам.

Проект protobuf-net Марка Гравелла работал с F # "из коробки", потому что он использует стандартные .NET идиомы. Вы можете использовать атрибуты, чтобы получить сериализацию без необходимости писать файлы .proto, выполнять двухэтапную компиляцию или генерировать необходимый код из стандартных файлов .proto. Производительность хороша для .NET, но намного медленнее, чем у таких альтернатив, как встроенный модуль OCaml Marshal. Однако эта библиотека заставляет вас изменять каждое поле в каждом типе сообщения. Это действительно контрпродуктивно, потому что сообщения должны быть неизменными. Кроме того, документация оставляет желать лучшего, но тогда это бесплатное программное обеспечение.

Мне не удалось заставить библиотеку Jon Skeet protobuf-csharp-port работать вообще.

В идеале вы должны иметь возможность сериализовать все встроенные типы F # (кортежи, записи, объединения, списки, наборы, карты и т. Д.) В этот формат проводов без дополнительных настроек, но не из существующих решений с открытым исходным кодом способны на это. Я также обеспокоен сложностью этих решений: у Джона Скита 88 000 строк кода на C # и комментариев (!).

Кроме того, я разочарован тем, что буферы протокола Google не задают стандартные форматы для чисел DateTime или decimal.

Я еще не смотрел Proto # и даже не могу найти загрузку для Froto. Существует также ProtoParser , но он просто анализирует файлы .proto и не может ничего сериализовать.

4 голосов
/ 15 февраля 2011

Не указан F # , перечисленный здесь , но есть OCaml или .NET "общего" ( protobuf-net) ).

Честно говоря, я просто не удосужился попробовать protobuf-net с объектами F #, отчасти потому, что я просто недостаточно знаю F #, но если вы можете создавать POCO, они должны работать. Однако для работы с protobuf-net им понадобится некоторая разновидность изменчивости (возможно, даже просто частная изменчивость).

Если вы счастливы сгенерировать DTO C # и просто потребляете этого из F #, то protobuf-net или порт Джона должны работать нормально.

3 голосов
/ 15 февраля 2011

Я ожидаю, что и мой собственный порт и Марка Гравелла будут отлично работать с F #, так же, как любая другая библиотека .NET.Другими словами, ни один порт не написан таким образом, который может генерировать идиоматический код F #, но он должен работать.

Мой порт будет генерировать код C #, поэтому вам нужно будет построить его как отдельный проектдля вашей модели сериализации - но это должно без проблем взаимодействовать с F #.Сгенерированные типы являются неизменяемыми (с изменяемыми компоновщиками), так что это должно помочь в контексте F #.

Конечно, вы всегда можете взять основные части любого проекта и также придумать идиоматическое решение F # - будь выперенести весь проект на F # или использовать существующие библиотеки с генератором кода F # и вспомогательными функциями, или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...