Depository of News

Когда decode(encode(x)) == x недостаточно

newsdepo.com · world

<p><strong>Когда <code>decode(encode(x)) == x</code> недостаточно</strong></p><p>С сериализацией всё вроде бы просто: есть значение <code>x</code>, мы превращаем его в байты, передаём куда-то ещё, а потом восстанавливаем.</p><p><code>decode(encode(x)) == x</code></p><p>Если получилось — значит, сериализация работает. По крайней мере, так кажется. Но что именно означает <code>==</code>?</p><p>Если два указателя после декодирования указывают на независимые объекты с одинаковым содержимым — значение сохранилось или нет? Если два slice содержат те же байты, но больше не используют одну backing array? Если объект ссылался сам на себя, а после восстановления цикла уже нет? В какой-то момент оказывается, что сохранить данные — ещё не значит сохранить значение.</p><p>А затем возникают следующие вопросы: что именно должно быть частью wire-представления, может ли одно значение иметь несколько корректных представлений и сколько ресурсов decoder вообще обязан потратить на восстановление недоверенного входа?</p><p>Все эти проблемы известны давно. Интереснее другое: что произойдёт, если перестать рассматривать их как независимые компромиссы? И можно ли провести привычную границу немного дальше?</p> <a href="https://habr.com/ru/articles/1081156/?utm_source=habrahabr&amp;utm_medium=rss&amp;utm_campaign=1081156#habracut">Читать далее</a>

Read full article →