Когда decode(encode(x)) == x недостаточно
Habr ·
Когда decode(encode(x)) == x недостаточно С сериализацией всё вроде бы просто: есть значение x , мы превращаем его в байты, передаём куда-то ещё, а потом восстанавливаем. decode(encode(x)) == x Если получилось — значит, сериализация работает. По крайней мере, так кажется. Но что именно означает == ? Если два указателя после декодирования указывают на независимые объекты с одинаковым содержимым — значение сохранилось или нет? Если два slice содержат те же байты, но больше не используют одну backing array? Если объект ссылался сам на себя, а после восстановления цикла уже нет? В какой-то момент оказывается, что сохранить данные — ещё не значит сохранить значение. А затем возникают следующие вопросы: что именно должно быть частью wire-представления, может ли одно значение иметь несколько корректных представлений и сколько ресурсов decoder вообще обязан потратить на восстановление недоверенного входа? Все эти проблемы известны давно. Интереснее другое: что произойдёт, если перестать рассматривать их как независимые компромиссы? И можно ли провести привычную границу немного дальше? Читать далее
Когда decode(encode(x)) == x недостаточно С сериализацией всё вроде бы просто: есть значение x , мы превращаем его в байты, передаём куда-то ещё, а потом восстанавливаем. decode(encode(x)) == x Если получилось — значит, сериализация работает. По крайней мере, так кажется. Но что именно означает == ? Если два указателя после декодирования указывают на независимые объекты с одинаковым содержимым — значение сохранилось или нет? Если два slice содержат те же байты, но больше не используют одну backing array? Если объект ссылался сам на себя, а после восстановления цикла уже нет? В какой-то момент оказывается, что сохранить данные — ещё не значит сохранить значение. А затем возникают следующие вопросы: что именно должно быть частью wire-представления, может ли одно значение иметь несколько корректных представлений и сколько ресурсов decoder вообще обязан потратить на восстановление недоверенного входа? Все эти проблемы известны давно. Интереснее другое: что произойдёт, если перестать рассматривать их как независимые компромиссы? И можно ли провести привычную границу немного дальше? Читать далее