TGViewer
Rust Rust @rust_code · 8.92K subscribers
Post #372 2.62K
®️Rust: безопасный парсинг с нулевым копированием

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

Учитывая это, легко понять важность подобных алгоритмов, а также значение их эффективности для общей производительности системы. Одним из способов оптимизации таких программ является использование технологии, называемой zero-copy (нулевое копирование).

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

В качестве примера простейшего парсера с нулевым копированием я создал программу на языке C, которая выполняет парсинг массива байтов в заранее определенный struct. Программа предполагает, что полученные данные будут содержать заголовочный байт, за которым следует строка.

struct ParsedData {
uint8_t header;
char *payload;
};

void parse_buffer(uint8_t *buffer, struct ParsedData *parsed_data) {
parsed_data->header = buffer[0];
parsed_data->payload = (char *)&buffer[1];
};

Код достаточно прост: в struct перемещается значение примитива (header — заголовок) и указатель на массив символов (payload — полезная нагрузка). Заметим, что хотя некоторые могут назвать эту процедуру копированием, она не выделяет новую память, а лишь выполняет простые инструкции перемещения значений и указателей:

Читать
  • ❤ 10
  • 👍 3
  • ❤‍🔥 1
  • ☃ 1
More from @rust_code
  1. Oct 4, 2026Это не строка
  2. Oct 3, 2026Выпуск Rust 1.99.0. Microsoft перевёл Rust в число первичных языков Опубликован релиз язык…
  3. Oct 2, 2026🦀 Rust 1.99 научился определять C-совместимые variadic-функции Теперь в стабильном Rust м…
  4. Sep 30, 2026ИИ-агенты могут разгонять Rust-код быстрее SOTA-библиотек Макс Вулф провёл серию экспериме…
  5. Sep 28, 2026🦀 Qt открывает Rust полноценный путь к кроссплатформенному UI Qt представила Qt Bridge fo…
  6. Sep 26, 2026Как создать пустой vector по-гениальному
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →