Hacker News Digest

Тег: #flatbuffers

Постов: 2

Protobuffers Are Wrong (2018) (reasonablypolymorphic.com) 💬 Длинная дискуссия

Почему Protobuf плохи

Protobuf — это любительская, непродуманная технология, созданная для задачи, которую в действительности имеет только Google. Их главная беда — убогая типовая система: нет композиции, куча произвольных запретов (oneof нельзя повторять, map нельзя параметризовать, ключ map не может быть bytes или enum и т.д.). Всё это — следствие донавешивания фич «как получится» вместо проектирования.

Достаточно трёх простых конструкций: обязательные поля (произведение типов), oneof как отдельная копроизводная и параметрические типы. На них можно выразить optional, repeated, map без всяких хаков.

Ещё protobuf разделяет «скаляры» и «сообщения». Скалярные поля всегда «есть»: даже если ты их не заполнял, они инициализируются нулём/пустой строкой. Отличить «поле не прислали» от «прислали 0» невозможно — источник багов и лишних костылей.

by b-man • 05 сентября 2025 г. в 15:25 • 185 points

ОригиналHN

#protobuf#avro#flatbuffers#capnproto#google#serialization#data-modeling#binary-protocols

Комментарии (231)

  • Критика protobuf сводится к «плохо, но альтернатив ещё хуже»: ни одна другая схема не даёт таких же гарантий обратной совместимости + встроенный линтер.
  • Главные боли: нулевые значения неотличимы от «не установлено», нет композиции/алгебраических типов, oneof и repeated ограничены, инструментарий (protoc) громоздок.
  • Часть проблем — культурное наследие Google: «не давать пользователю обобщений, зато добавить 100 специальных случаев».
  • Реальный совет: использовать protobuf только как быстрый бинарный wire-формат, а внутри приложения держать свою доменную модель и писать явные конвертеры.
  • Живые альтернативы обсуждаются (Avro, FlatBuffers, Cap’n Proto, JSON+схема), но у каждой свои компромиссы; серебряной пули пока нет.

MapLibre Tile: A next generation geospatial format optimized for rendering (arxiv.org)

MapLibre Tile — новый формат векторных тайлов, призванный заменить Mapbox Vector Tile (MVT).
Основные цели:

  • меньше размер (до 50 % экономии);
  • быстрее парсинг (до 2× ускорения);
  • простота реализации без внешних зависимостей.

Ключевые улучшения

  • FlatBuffers вместо Protocol Buffers → компактнее и без распаковки.
  • структурированные слои: геометрия, атрибуты, индексы — отдельные буферы, что ускоряет выборку.
  • delta-кодирование координат и ID → ещё меньше байт.
  • встроенный R-tree для быстрого поиска объектов в тайле.

Совместимость

  • Поддержка JS, C++, Swift, Kotlin.
  • Рендерится в MapLibre GL JS ≥ 5.0 без изменений API.
  • Обратная совместимость: конвертер MVT → MLT доступен.

Roadmap
Q4 2024 — стабильная спецификация, конвертеры, примеры.

by mtremmel • 18 августа 2025 г. в 11:28 • 129 points

ОригиналHN

#maplibre#flatbuffers#protocol-buffers#mvt#geospatial#javascript#c++#swift#kotlin#arxiv

Комментарии (11)

  • Участники рады ускорению декодирования и уменьшению размера тайлов, но опасаются сложности внедрения вне MapLibre.
  • Некоторые считают, что узкое место не в загрузке/декодировании, а в памяти и рантайме при множестве слоёв.
  • Уже ведётся работа над MapLibre GL JS/Native (Java, JS, Rust, TS); CLI-кодировщик почти готов.
  • Ожидается интеграция с Planetiler и, возможно, форк tippecanoe; документация и анонсы через новостную рассылку MapLibre.