Наконец-то зарелизил спеку VaryPack - новый, простой, гибкий, шустрый и компактный формат бинарной сериализации произвольных данных.

TS библиотека в MAM - $mol_vary, в NPM - mol_vary. Это всего 600 строчек кода, которые легко портировать на любой другой язык.

⚖️ Комплексный бенчмарк

? Киллер фичи

Дедупликация. Строки, числа, шейпы объектов (упорядоченные списки имён полей) не дублируются, благодаря встроенной поддержке ссылок. Другие форматы этого достигают только через расширения, ломающие совместимость между библиотеками.

Расширяемость поддержимаемых типов. Из коробки VaryPack уже поддерживает огромные целые, ссылки, бинарники, а $mol_vary ещё и словари, и множества, и таймштампы, и даже DOM! Но довольно легко добавить поддержку и своих типов данных, ни с кем это не согласовывая - маппинг происходит по совпадению шейпов, которые сериализуются вместе с объектами. Другие форматы вынуждены вести централизованные реестры расширений и диапазоны идентификаторов, где творится дикий запад.

Прямая и обратная совместимости. Любой VaryPack декодер сможет распаковать данные, даже если не поддерживает те или иные кастомные типы данных (будет их представление через поддеживаемые типы). Расширения других форматов таким похвастаться не могут.

⁉️ Внимание, вопрос

Пока на VaryPack ещё никто не завязался есть возможность безболезненно его менять. Так что гляньте спеку, попробуйте поиграться со своими данными. Если будет не хватать какой-то фичи - дайте знать. Подумаем, можно ли поддержать и её.

Например, VaryPack сохраняет ссылочную структуру, если она не образует циклов. Можно было бы поддержать и произвольные графы связей между объектами. Но стоит ли это делать ценой усложнения и замедления кода?

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


  1. artptr86
    14.11.2025 06:54

    Не совсем понял, откуда бенчмарк берёт размер библиотеки 3,70 кБ, когда web.js весит 29 кБ, а сжато передаётся порядка 6 кБ. Аналогичная картина и для конкурентов.


    1. nin-jin Автор
      14.11.2025 06:54

  1. a-tk
    14.11.2025 06:54

    А где в опросе yaml?


    1. baldr
      14.11.2025 06:54

      Да вы что! Задавать такие вопросы в этом посте! Автор его на дух не переносит, поэтому и придумывает свои форматы. Этот не первый уже.


    1. nin-jin Автор
      14.11.2025 06:54

      Не слышал, чтобы его кто-то использовал для бинаризации данных.


  1. ColdPhoenix
    14.11.2025 06:54

    Забавно, что на хабре вы размер округлили вниз, а на NPM/Github округлили вверх.

    Ну и сравнивать совместимость пока у вашего стандарта ровно одна реализация это кощунство ИМХО.