Protobuffers Are Wrong (2018)
Почему Protobuf плохи
Protobuf — это любительская, непродуманная технология, созданная для задачи, которую в действительности имеет только Google. Их главная беда — убогая типовая система: нет композиции, куча произвольных запретов (oneof
нельзя повторять, map
нельзя параметризовать, ключ map
не может быть bytes
или enum
и т.д.). Всё это — следствие донавешивания фич «как получится» вместо проектирования.
Достаточно трёх простых конструкций: обязательные поля (произведение типов), oneof
как отдельная копроизводная и параметрические типы. На них можно выразить optional
, repeated
, map
без всяких хаков.
Ещё protobuf разделяет «скаляры» и «сообщения». Скалярные поля всегда «есть»: даже если ты их не заполнял, они инициализируются нулём/пустой строкой. Отличить «поле не прислали» от «прислали 0» невозможно — источник багов и лишних костылей.