Найти тему
Григорий Дядиченко

Не изобретайте свои форматы

Не изобретайте свои форматы

Хочется рассказать почему стандарты — это круто. Сразу оговорюсь, я не считаю все стандарты правильными и хорошими. Что их не нужно менять, обновлять и т.п. Просто это большая работа, которой нужно заниматься годами. И не придумывать формат под свою задачу, а именно создавать и продвигать новый стандарт)

Пример того, что мы "всё потеряли" — это SVG. Наиужаснейший стандарт и формат. Почему? На данный момент многие согласятся, что это формат стал форматом хранения векторных изображений. И думаю много кто сталкивался с тем, что у вас скажем при экспорте из иллюстратора в фигму что-то ломается или вроде того. Почему же так происходит? Чтобы ответить на этот вопрос достаточно прочитать стандарт SVG... И это не формат хранения картинки, это грёбанный фреймворк. Он даже локализацию поддерживает, анимации, трансформации и ещё в некоторых частях умеет делать кофе. Поэтому нигде нет его полной поддержки, и во многих местах стандарт поддерживается по разному, просто из-за реализации, оптимизаций и ошибок программистов + разных версий свг

Векторные форматы — это сложно, поэтому там столько всего? Да нет, пример другого простого векторного формата — это меш и obj. Это LDraw про который я писал статью https://habr.com/ru/post/433364/ Да в целом многие 3д форматы проще чем SVG. Формат хранения 2д векторных картинок ставший стандартом хранения векторных изображений) Мы храним легковесные иконки, ну нам нужен фреймворк! :)

Ладно. Вернёмся к изначальной теме. Почему свои форматы это плохо? И что важнее когда это плохо?

Простой ответ посмотрите на Web. Там столько мракобесия и дичи, так как при разработке браузеров добавляя фичи не так много лет назад все решили что "сами с усами" и ни о чём мы договариваться не будем. Ну точнее об этом сначала не подумали, потом подумали и сейчас веб писать в разы проще, чем во времена IE10, хрома, оперы и сафари имеющих довольно мало общего)

1. Много готового

Когда вы пользуетесь чем-то стандартизированным, велик шанс найти библиотеки работающие с этим. Допустим тот же PNG оптимизаторов масса, и по весу, и архиваторов. А ваш формат картинки, который вы придумали и у которого своё сжатие никто не знает и вы ограничены лишь своими инструментами. То же касается средств визуализации и подобного

2. Хорошие стандарты вытачивались годами и они обобщены специально

Я понимаю, что у новичков есть мнение "ща я придумаю лучше и всех порву". Сам такой был по крайней мере. И придумать лучше в контексте конкретной задачи. Просто это будет никому не нужно. Стандарты делаются не супер оптимальными, но зато общими, устойчивыми, оттестированными огромным комьюнити. И предоставляются с огромным набором инструментов в довесок. Вот реализовал я тот же парсер LDraw для Unity. Есть такой же для блендера и т.п. Ща с новыми знаниями может по оптимизирую даже его, и добавлю фич (хотя бы цвета в vertexColor шейдер писать для примера). Но помимо этого с другой стороны есть огромное креативное комьюнити, которое делает чертежи таких моделек из которых можно генерить 3д. Разукрашенное, с цветами, хоть персы марвел. И всё потому, что креативным людям дали стандарт

Но конечно же бывают крайности. Просто они бывают реже чем принято считать. Когда я в вузе занимался математическим моделированием, то там 5-10% оптимизации на своём кастомном формате могло превращаться в дни расчётов, и такое тоже есть. Но в геймдеве это супер редкость, когда вам вместо того же bson нужен свой бинарный формат. Вместо rudp свой кастомный протокол передачи данных по сети. Вместо png — свой формат картинок