Releases: confeden/Nova-Prism
Release list
Nova Prism v0.9.5 — бета
Бета. Формат ещё может измениться — не кладите в архив единственную копию чего-то важного.
Исполняемые файлы сжимаются заметно плотнее. Все преобразователи машинного кода, какие есть — BCJ2 в 7-Zip, BCJ, xz --x86, E8E9 в zpaq, EXECodec в kanzi — трогают ровно три команды: E8, E9 и 0F 8x, то есть относительный адрес перехода. А на 64-битном x86 через второй вид 32-битных смещений идёт каждое обращение к глобальной переменной и каждый вызов через таблицу импорта, и его не выносит в отдельный поток никто. Перепись 10,4 ГБ установленных программ объясняет, почему это стало важно только сейчас: 96,9 % байт исполняемых файлов — 64-битные. Новый фильтр забирает и эти адреса: .NET −9,8 %, Firefox −6,2 %, opencode −5,1 %, Wireshark −3,3 %, Go −2,3 %.
Отсюда и таблица в README: девять настоящих установленных программ (2,74 ГБ) теперь на 5,2 % меньше, чем 7z -mx9 — было 0,2 %; установленный Firefox на 3,9 % меньше — было +2,0 %; дерево исходного кода впервые ушло в минус.
Упаковка быстрее в 1,4–2,9 раза при том же архиве до байта. Очередь блоков почти никогда не разрасталась: порог, при котором ей разрешалось расти, был долей общей памяти машины, а не бюджета программы. На .NET по умолчанию 103,8 → 35,9 с, на Silesia 27,7 → 19,4 с.
Память считается по тому, сколько кодек занимает на самом деле, а не по общей мерке на поток. Маленький бюджет больше не срезает число потоков: Firefox при --memory 1G — пик 1364 → 1045 МБ и время 83,3 → 76,6 с, то есть лучше сразу по обеим осям.
Исправлено: архив из миллионов файлов мог получиться нечитаемым (запись не проверяла потолок, который проверяет чтение; стена измерена — 1,68–2,03 млн файлов); испорченный хвост архива мог заставить программу запросить сотни гигабайт памяти и упасть без сообщения.
Скорость против 7z -mx9, оба прогнаны подряд в одну сессию: enwik8 15,7 с против 47,2, Silesia 15,0 против 43,0, enwik9 61,5 против 169,2 — и архив меньше на 13,3 %, 14,7 % и 10,1 % соответственно.
Совместимость. 0.9.5 читает все прежние архивы — проверено на архивах 0.9.4 объёмом 566 МБ и 5,4 ГБ, распаковка сверена побайтово. Обратно нет: архив 0.9.5 с .exe или .dll на максимальном уровне старая версия не откроет и скажет об этом прямо.
Проверено: 210 автотестов, clippy без замечаний, распаковка сверена diff -r с исходным деревом, -j 1 и -j 8 дают побайтово одинаковый архив. Отдельно прогнан тяжёлый случай, которого раньше не пробовали: 19,5 ГБ и 43 868 файлов в одном архиве.
Пока не сохраняются символические ссылки, потоки NTFS и права доступа. Содержимое файлов не теряется никогда.
Отзывы и новости — t.me/nova_txt
Nova Prism v0.9.4 — бета
Установленные программы теперь сжимаются плотнее, чем у 7-Zip на максимуме.
Что изменилось
- Девять настоящих установленных программ (2,74 ГБ) — отставание было 1,8%, стало опережение на 0,2%. Одним архивом на всё дерево — 593 862 888 байт против 621 756 049 у
7z -mx9(на 4,5% меньше) и на 13% быстрее, чем в 0.9.3. Разбор начался с вопроса «какой ТИП файлов проигрывает», а не «какая установка», и ответ оказался узким: у.exeотставание было 15,1%, при том что по одному файлу мы на 0,10% МЕНЬШЕ 7-Zip. Весь проигрыш давали девять программ инструментария Go, в каждую из которых влинкована одна и та же среда исполнения — один и тот же код лежал в наборе девять раз, а увидеть это можно, только если он попадает в одно окно сжатия. Теперь блок с машинным кодом растёт до 64 МБ. Это предел, который формат допускал всегда, поэтому архивы 0.9.4 читает и распаковывает версия 0.9.3 — проверено. - Ресурсы браузерных приложений (
.pakу Discord, opencode и подобных) — на 20,9% меньше. Два таких приложения несут два почти одинаковых набора языковых файлов, но по алфавиту путей они оказывались в 56 МБ друг от друга. Механизм, который кладёт одноимённые файлы рядом, включался только от мегабайта, а языковой файл меньше; теперь порог 96 КБ, и вместе с ним ужесточена проверка размера. Это не подгонка, а измеренная граница: у.pak98,3% одноимённых пар совпадают по размеру в пределах 2%, у установленного Python — только 13%. - Уровень по умолчанию тоже стал плотнее — на 1,8% на дереве программ, за то же время.
- Уже сжатые данные упаковываются в полтора раза быстрее при том же архиве до байта: 405 МБ музыки — 21 секунда вместо 35.
- В окне теперь открываются и распаковываются чужие архивы:
.zipи всё, что на нём построено (.jar,.apk,.docx,.fb2.zip), а также.7z. Раньше это умела только командная строка, а окно отвечало «не архив NOVA». Изменять чужой архив нельзя — только читать;.rarпрограмма узнаёт и говорит об этом прямо. - Даты файлов больше не теряются при работе с чужими архивами. Распакованный из
.zipили.7zфайл получал текущее время вместо своего, а.zip, созданный самой программой, помечал всё моментом упаковки. Причина не в мелочи: в zip время хранится в формате MS-DOS, а оно местное и без указания пояса, поэтому прочитать его как UTC — значит сдвинуть каждый файл на смещение машины. Теперь правильный ответ спрашивается у Windows вместе с правилами перехода на летнее время для конкретной даты, а если в архиве есть более точная метка (поле 0x5455), берётся она. Проверено на четырёх случаях против 7-Zip — везде совпадает до секунды.
Silesia, enwik8, PDF, фотографии, звук и набор для пережатия не изменились ни на байт на всех трёх уровнях: новые правила касаются только машинного кода и одноимённых файлов.
Старые архивы читаются как читались.
Полный список изменений — в CHANGELOG.
Nova Prism v0.9.3 — бета
Упаковка стала заметно быстрее.
Что изменилось
- Обычный уровень — тот, что стоит по умолчанию, — быстрее в полтора-два раза. Раньше каждый блок сжимался двумя способами, и меньший результат шёл в архив. Теперь второй способ не запускается там, где короткая проба заранее говорит, что он проиграет. Silesia — 5,8 секунды вместо 7,6, enwik8 — 3,4 вместо 6,0, установленный Firefox — 8,4 вместо 9,7.
- Архивы с контейнерами внутри (
.tar,.jar,.apkи подобные) — 4,8 секунды вместо 6,8 на 51-мегабайтном.tar. В 0.9.2 разбор по вложенным файлам дал много в размере, но стоил времени; лишняя работа убрана. - Размер не изменился ни на байт. Проверено на девяти наборах данных: Silesia на обоих уровнях, дерево исходников, enwik8, 495 МБ музыки, фотографии, PDF, звук, набор для пережатия и
omni.jaиз Firefox.
Где это ставит средний уровень (одна машина, замеры подряд, Silesia): 7z -mx9 — 48 688 268 байт за 40,4 секунды; Nova Prism по умолчанию — 44 765 421 байт за 5,7 секунды, то есть на 8,1% меньше и всемеро быстрее. Максимальный уровень — 41 527 885 байт за 14,4 секунды.
Старые архивы читаются как читались.
Полный список изменений — в CHANGELOG.
Что скачивать
| Файл | Что это |
|---|---|
Nova-Prism-0.9.3-x64-setup.exe |
Приложение и меню в проводнике. |
nova.exe |
Командная строка. Отдельный файл, установка не нужна. |
Nova-Prism-0.9.3-kak-polzovatsya.txt |
Короткая справка: установка, проводник, приложение, командная строка, что делать, если что-то не так. |
Библиотека Visual C++ вшита внутрь; WebView2 установщик поставит сам, если его нет.
Nova Prism v0.9.2 — бета
Установленные программы теперь сжимаются почти как у 7-Zip. На девяти настоящих установках — Firefox, .NET, Wireshark, Go, Python, два приложения на Electron, Notepad++ и сам 7-Zip, 2,74 ГБ — отставание от 7z -mx9 сократилось с 5,91% до 1,77%, а на четырёх деревьях из девяти мы теперь впереди.
Что изменилось
- Машинный код. Переходы x86 обрабатываются так же, как это делает 7-Zip: окно преобразования — весь файл, а не отдельный блок сжатия, и решение по каждому переходу кодируется адаптивной моделью, а не честным битом. На
xul.dllиз установленного Firefox: 51 580 740 → 48 851 765 байт, отставание от 7-Zip с +7,8% до +2,1%. - Контейнеры разбираются по элементам —
.tar, а также.jar,.apkи мозилловскийomni.ja, то есть любой архив, чьи файлы лежат внутри несжатыми. Silesia −3,44%,omni.ja−4,9%. Собирается всё обратно байт в байт. - Одноимённые файлы кладутся рядом, поэтому две версии одной библиотеки попадают в один блок сжатия и видят друг друга. На 185 парах DLL из установленной .NET — −13,8%.
- Видно, что происходит при упаковке. Сразу после сканирования в окне появляется каталог будущего архива, и каждый файл подсвечивается по мере обработкив зависимости от статуса.
Полный список изменений — в CHANGELOG.
Что скачивать
| Файл | Что это |
|---|---|
Nova-Prism-0.9.2-x64-setup.exe |
Приложение и меню в проводнике. |
nova.exe |
Командная строка. Отдельный файл, установка не нужна. |
Nova-Prism-0.9.2-kak-polzovatsya.txt |
Короткая справка: установка, проводник, приложение, командная строка, что делать, если что-то не так. |
Windows 10 или 11, 64 бита. Библиотека Visual C++ вшита внутрь; WebView2 установщик поставит сам, если его нет.
Nova Prism v0.9.1 — бета
Первая публичная бета. Архиватор, который разбирает уже сжатые файлы и сжимает их заново: JPEG, PDF, zip, PNG, gzip, MP3, WAV — и собирает обратно бит в бит.
Бета нужна ровно для одного: чтобы упаковку и распаковку проверили на настоящих файлах, а не на эталонных корпусах.
Что скачивать
| Файл | Что это |
|---|---|
Nova-Prism-0.9.1-x64-setup.exe |
Приложение и меню в проводнике. |
nova.exe |
Командная строка. Отдельный файл, установка не нужна |
Nova-Prism-0.9.1-kak-polzovatsya.txt |
Короткая справка: установка, проводник, приложение, командная строка, что делать, если что-то не так |
Windows 10 или 11, 64 бита. Библиотека Visual C++ вшита внутрь; WebView2 установщик поставит сам, если его нет.
Windows покажет предупреждение — так и задумано
«Windows защитила ваш компьютер» → Подробнее → Выполнить в любом случае.
Файлы подписаны, и в окне контроля учётных записей видно издателя — «Brent, Nova Prism»; подпись ломается от изменения хотя бы одного байта, так что подмену она ловит. Но само предупреждение это не убирает: оно про репутацию, а её набирают сертификатом коммерческого центра сертификации плюс объёмом скачиваний. Обещать обратное в бете нельзя, поэтому сказано прямо.
Что исправлено в 0.9.1
- Приложение больше не закрывается при открытии архива. Архив с папками внутри — то есть почти любой — открывался и через пару секунд ронял окно. Виноваты оказались сами папки: хранить их программа научилась только что, а проверка «делит ли этот файл блок сжатия с другими» по-прежнему заглядывала в список кусков, которого у папки нет и быть не может.
- Меню в проводнике снова каскадное. Пункт «Nova Prism» показывался одной строкой без подменю, а щелчок по нему давал «Не найдено приложение, сопоставленное с этим файлом». Заодно в меню архива появился пункт «Сжать в Nova Prism» — архив тоже можно положить в архив.
Главное в этой версии
- Максимальный уровень стал быстрее в 2–5 раз, не потеряв ни байта. Перед турниром кодеков идёт отбор на небольшой пробе самой единицы сжатия, прошедшие считаются одновременно на простаивающих ядрах, а LZMA2 кодирует теперь C-библиотека самого 7-Zip — она же на 0,1–0,2% сильнее прежней.
- Появилась проверка архива —
nova testи кнопка «Проверить». Читает каждый блок и сверяет с контрольной суммой, ничего не записывая. Не останавливается на первой ошибке: показывает, какие именно файлы пострадали. - Распаковка переживает повреждённый блок. Раньше одна испорченная единица отменяла всё; теперь непрочитанные файлы пропускаются и перечисляются в конце.
- Восстановленное дерево снова становится тем же деревом: пустые папки, атрибуты Windows и доли секунды во времени изменения.
- Своё каскадное меню в проводнике — сжать, открыть, распаковать, проверить; работает и на zip, 7z, rar, не забирая у них ассоциацию.
- Лицензия: GPL-3.0. Проверены все 571 пакет, от которых зависит сборка.
Полный список — в CHANGELOG.
Цифры
Одна машина, 8 логических ядер, Windows 11; максимальный уровень против 7-Zip, xz, brotli, kanzi и zpaqfranz. Справа — лучший результат из всей пятёрки.
| Данные | Nova Prism | Лучший из остальных | |
|---|---|---|---|
| Zip, PNG, gzip, jar, epub, apk | 57,8 МиБ | 82,7 МиБ · zpaqfranz | −30,1% |
| PDF-документы | 4,8 МиБ | 6,2 МиБ · brotli | −22,5% |
| Несжатый звук (WAV) | 192,9 МиБ | 237,8 МиБ · zpaqfranz | −18,9% |
| Фотографии JPEG | 13,3 МиБ | 16,1 МиБ · zpaqfranz | −16,9% |
На обычном тексте контекстные модели по-прежнему сжимают сильнее — это честно расписано в README. Зато по времени: enwik9 — 94,4 секунды против 253,4 у 7z -mx9 при архиве на 10,1% меньше, а распаковка того же гигабайта заняла 12,6 секунды против 143,3 у kanzi.
Обещание про формат — и его границы
Формат ещё меняется. Правило на время беты простое:
Архив всегда открывается той версией, которая его создала. Что его откроет будущая версия — не обещано.
Программа не станет угадывать: если формат когда-нибудь придётся сломать, новая версия откажется открывать старый архив с внятным сообщением, а не расшифрует мусор. Поэтому не складывайте в бета-архив единственную копию чего-либо важного.
Что пока НЕ сохраняется
Символические ссылки (о них программа сообщает), альтернативные потоки NTFS и списки доступа. Содержимое файлов не теряется никогда. Пустые папки, атрибуты и время с долями секунды — сохраняются.
Известные ограничения
- На Windows 11 пункт меню живёт в «Показать дополнительные параметры» (Shift+F10). Короткое меню требует отдельного системного обработчика — он в планах.
- При выделении нескольких файлов проводник запускает команду на каждый отдельно — получится несколько архивов. Выделяйте папку.
--memoryсоблюдается не полностью: при пережатии крупных вложенных архивов пик может выйти примерно вдвое за указанный предел. На распаковку это не распространяется.--ecoи--fullсобраны, но под настоящей нагрузкой не измерялись.- Интерфейс приложения только на русском; установщик — на русском и английском.
- Автообновления нет. И телеметрии нет: программа ничего никуда не отправляет, поэтому о проблемах она сама не сообщит — только вы.
Куда писать
t.me/nova_txt — там же новости о разработке. Полезно приложить: версию (nova --version), что делали, что ожидали, что получилось. Если архив ведёт себя странно — вывод nova test по нему.