Показать HN: Zeekstd – реализация формата ZSTD Seekable на Rust ( github.com/rorosen ) Здравствуйте,
Я хотел бы поделиться реализацией на Rust формата поиска Zstandard, над которым я работаю.
Обычные сжатые файлы zstd состоят из одного кадра, что означает, что вам нужно начать распаковку с самого начала. Формат seekable разбивает сжатые данные на ряд независимых кадров, каждый из которых сжимается по отдельности, так что для распаковки раздела в середине архива zstd требуется распаковать максимум один кадр дополнительных данных, а не весь архив.
Я начал работать с seekable-форматом, потому что хотел возобновить загрузку больших сжатых файлов zstd, которые распаковываются и записываются на диск на лету. Сначала я создал и использовал привязки к функциям C, которые доступны в upstream[1], однако, я довольно быстро наткнулся на первую ошибку сегментации (сейчас она исправлена) и обнаружил, что функции позволяют только базовые вещи. Присмотревшись к реализации upstream, я заметил, что она использует функции основного API, которые теперь устарели, и не позволяет получить доступ к низкоуровневым контекстам (де)компрессии. Мне это кажется реализацией PoC/demo, которая не поддерживается так же, как основной API zstd, возможно, поэтому она находится в каталоге contrib.
Мой вариант использования, по-видимому, требовал полной переписывания формата seekable, поэтому я решил реализовать его с нуля на Rust, используя привязки к расширенному API сжатия zstd, доступному с zstd 1.4.0.
Результатом является единый контейнер библиотеки зависимостей[2] и контейнер CLI[3] для формата seekable, который похож на обычный инструмент zstd.
Любые отзывы будут высоко оценены!
[1]: https://github.com/facebook/zstd/tree/dev/contrib/seekable_f… [2]: https://crates.io/crates/zeekstd [3]: https://github.com/rorosen/zeekstd/tree/main/cli
Правильно ли я понимаю, что “обновленная версия спецификации” – это ваше собственное обновление спецификации, а не официальная редакция? Не удалось найти соответствующую официальную редакцию спецификации, по крайней мере, ни с таким номером версии, ни с какой-либо другой. Немного запутанно.
Source: news.ycombinator.com