А вы еще не стерли свой arj?
АрхивОкончание. Начало в #31-32 [309-310], 33 [311]
Окончание. Начало в #31-32 [309-310], 33 [311]
А что же у корифеев?
В 1999 году признанные лидеры, видимо, почувствовали, что начинают отставать, и предприняли некоторые шаги.
У PkWare после почти шестилетнего перерыва (во время которого компания развивала оболочку WINZIP) вышла версия PKZIP для DOS (2.50). В ней предприняты некоторые усилия по увеличению плотности сжатия (появился режим "Extreme") и, особенно, по ускорению (за счет лучшего использования DPMI и EMS). Выигрыш в скорости (особенно в режиме "Extra") может составлять до 40 процентов по сравнению с PKZIP 2.04g. Появление этой версии позволило PKZIP вернуться в призеры по тестам Гилхриста. В этом же году появилась и новая, так называемая Sponsored, версия PKZIP for Windows 2.70. "Sponsored" означает, что в главном окне программы будет подцеплен ярлык, отправляющий ваш браузер на соответствующий сайт. При этом еще и подцепляется какой-то background процесс, запускающийся при выходе в Internet. Мне все это показалось слишком жестким, и я ее даже тестировать не стал.
ARJ SoftWare в нынешнем году выпустила несколько beta-версий ARJ 2.62 (последняя - 2.62d), а также несколько alpha-версий ARJ32 (или ARJ 3.0x). Как всегда, добавлено еще несколько опций, число их, по-моему, уже давно превысило всякие разумные пределы. Вышла, наконец, версия для OS/2, причем сделали ее в ARJ Software Russia. Ни в скорости, ни в плотности никаких серьезных улучшений не произошло. Кое-где даже наблюдаются ухудшения. ARJ32 существенно медленнее ARJ для DOS (о чем честно написано в документации). Честно говоря, я не понимаю, зачем Юнгу затрачивать усилия на заведомо устаревшую программу, тем более что он сам уже с 1997 года выпускает куда более совершенный архиватор JAR, в котором значительно улучшены скорость и сжатие. Имеются версии для DOS и Windows, а опций в нем почти столько же. JAR всегда лучше ARJ и часто выигрывает гонки у RAR. Например, на Calgary Corpus Test он выиграл у RAR 35K при включенном у RAR мультимедиа-сжатии и более 50K при выключенном, затратив при этом 17 секунд против, соответственно, 80 и 28.
Евгений Рошаль в 1999 году выпустил новые (2.50) версии RAR для всех поддерживаемых платформ. В DOS- и OS/2-версиях ничего нового (с точки зрения рассматриваемых тестов) нет, а в версии для Windows скорость и плотность несколько улучшены. С точки зрения удобства пользования RAR по-прежнему лидирует, а новая оболочка WINRAR с полной поддержкой формата ZIP и ограниченной - некоторых других вообще производит сильное впечатление. Но по результатам тестов RAR постепенно съезжает вниз, что тревожит. Хотелось бы, чтобы автор не забывал о детище, принесшем ему мировую известность.
Некогда популярный LHA практически заглох, последняя версия (2.67) вышла еще в 1995 году. Я думаю, что сейчас уже никаких причин использовать его не осталось.
Не солидно как-то, или умеете ли вы пользоваться архиваторами
По моим наблюдениям, подчас архиваторные программы используются довольно неэффективно. Как правило, выбираются опции по умолчанию, которые обычно весьма усреднены. Между тем, дав себе труд почитать help и запомнив опции любимого архиватора, можно получить немалый выигрыш. Все зависит только от того, чего же именно вы хотите. Например, PKZIP 2.50 в режиме Super Fast сжал игрушку "Worms" на 30 процентов быстрее, чем в нормальном, но проиграл при этом 500K. Так что - выбирайте.
Еще одной особенностью современных архиваторов стала возможность выбора размера словаря. Если вы готовы пожертвовать некоей толикой времени, то результатом может быть приличный выигрыш в размере архива. Например, на наборе фонтов (1,5М) при одинаковой степени сжатия WINRAR с умолчательным словарем размером 64K проиграл себе же, но со словарем 1024K, более 65K.
Некоторые архиваторы теперь позволяют выбрать и объем рабочей памяти. Так, на том же наборе BOA с моделью памяти 7M выиграл у себя же с моделью 1М более 60K.
Хорошо, если вы четко знаете, что именно собираетесь ужимать. Тогда зачастую можно сэкономить время и место, указав архиватору соответствующий режим. Например, уже целый ряд архиваторов специализирован для мультимедиа-сжатия (например, если в архивируемом каталоге есть картинки, звуки и прочие радости). Архиватор 777 имеет специальный режим сжатия EXE-файлов под Win32. Ну, и так далее. Как вы уже поняли из результатов тестов, применение специализированного архиватора иногда может оказаться очень выгодным.
Ну, а самый большой и, к сожалению, часто неиспользуемый резерв заключается в "солидности" [1] (от "solid"). Идея заключается в том, чтобы собрать всю мелочь в кучу, а уж потом это все ужать. Некоторые архиваторы (ACB, YAC) всегда создают "солидные" архивы. Некоторые архиваторы (RAR, ACE, 777, BOA и др.) предоставляют возможность их создания. А вот PKZIP, ARJ, JAR этого делать не умеют. Что же, они такие глупые? Нет, просто не хотят делать не свою работу. Еще в ранних Unix существовала программа TAR, которая как раз этим и занималась. Есть ряд реализаций TAR для DOS/Windows. В тестах Гилхриста и в моих (для единообразия) использовался TAR от Тима Шапорева (tim@cronyx.ru). Если же вас не очень заботит вопрос межплатформной передачи и совместимости форматов, я рекомендовал бы программу аналогичного назначения QFC от упомянутого ранее Георгия Ляпко. Размер заголовков там сведен до минимума. Отмечу еще неплохую программу CRUSH (автор J. Rollason), которая автоматизирует создание непрерывных архивов для форматов ZIP, ARJ, ZOO, HA, LHA, UC2. Справедливости ради, надо сказать, что упомянутые "глупые" PKZIP, ARJ и некоторые другие имеют опцию "архивировать без сжатия". Эту возможность тоже можно использовать как своего рода TAR, хотя обычно в документации написано, что эта опция применяется, когда жать бесполезно ("Using no compression with the zero option is useful when archiving files which will either not compress or compress very little", - цитата из документации к PKZIP). Насколько люди не подозревают о преимуществах непрерывных архивов, показывает даже интервью с Рошалем (прочитать можно на www.chat.ru/~arctest), где уважаемый автор честно признался, что в момент написания RAR не знал о существовании программы TAR и выдумывал велосипед, чтобы возможно было создавать "солидные" архивы. Ну, что ж, тем лучше, очень многие узнали об этом как раз из RAR. А выигрыш от "солидности" может быть очень даже солидным. Например, мою коллекцию из 200 иконок PKZIP самостоятельно ужал до 72K, а с помощью TAR - до 42K, причем времени на это ушло аж на полсекунды больше. На коллекциях крупных файлов выигрыш меньше, но он есть практически всегда. Кроме того, хорошо бы обратить внимание на конфигурационные файлы, поставляемые с некоторыми архиваторами. Например, для RAR это RARFILES.LST, для BIX - BIXSORT.TXT. В них указывается порядок, в котором склеиваются файлы в непрерывный архив. К примеру, в RARFILES.LST не указаны xBase-файлы, и, следовательно, сжиматься они будут в предпоследнюю очередь, "опережая" только заведомо несжимаемые форматы. Если указать, что ваши DBF и FPT - по сути тексты: записать их где-нибудь сразу после "*.TXT", - в ряде случаев можно получить очень даже существенный выигрыш.
Разжимаем на лету
Хочется рассказать еще об одной не слишком-то популярной разновидности архиваторов: это упаковщики исполняемых модулей (будем называть их EXE-пакерами, хотя это и не совсем точно). Идея заключается в том, чтобы упаковать ваш COM, EXE- или DLL-файл таким образом, чтобы при запуске он сам себя распаковал в памяти, а уж дальше начал работать обычным порядком. Пользователи о такой возможности, как правило, даже не подозревают, а в среде программистов существует определенное недоверие к такому способу экономии дискового пространства. Недоверие базируется на двух соображениях: 1) "а вдруг что-то все-таки будет работать неправильно?" и 2) "а зачем мне это замедление?" Со вторым соображением все просто - это не более чем предрассудок. В памяти все распаковывается очень быстро, а благодаря тому, что сокращается количество дисковых операций чтения, можно даже иногда получить и выигрыш, особенно на сильно фрагментированных дисках или при запуске с сети. Что же касается первого соображения, то тут все не так просто. Действительно, ряд программ после упаковки не работает вовсе или работает "не так". Это может происходить по ряду причин. Во-первых, некоторые программы защищают себя от изменения, подсчитывая всевозможные контрольные суммы. Во-вторых, бывает, что программисты "насильно" вписывают в некоторые участки своих исполняемых модулей некие дополнительные данные, которые, естественно, не восстанавливаются при разжатии (я сам так иногда делаю). В-третьих, некоторые EXE-пакеры не умеют грамотно сжимать оверлеи. Возможно, существуют и другие причины. Поэтому путь тут один: сохранить оригинал и хорошо протестировать сжатый файл. Посвоему опыту могу сказать, что удачно упаковываются процентов 90 всех исполняемых модулей, надо только грамотно выбрать упаковщик. А выбрать есть из чего. Хотя положение здесь практически такое же, как с архиваторами общего пользования, программисты, как правило, знают только давно устаревшие PKLITE, LZEXE да DIET.
В тестах Гилхриста EXE-пакеры соревнуются в двух категориях: программы для DOS и Win32. Не буду утомлять читателей длинными рядами цифр, расскажу только о лучших на нынешний день продуктах.
Безусловный лидер в этой категории программ - программа UPX. Ее создали автор LZOP Markus F. X. J. Oberhumer и Laszlo Molnar. Программа заняла первое место в тестах Гилхриста в обеих категориях. Впечатляют результаты: оригинальный файл размером 2934336 байт (Netscape.exe) был сжат до 1136223 байт (ближайший конкурент добился результата 1242624). Еще больше впечатляет список форматов, поддерживаемых UPX: dos/exe, dos/com, dos/sys, djgpp2/coff, watcom/le, win32/pe, rtm32/pe, tmt/adam, atari/tos, linux/i386. Имеются версии для DOS и Win32. Ко всему прочему, программа бесплатна! В общем, не могу не высказать своего восхищения авторами. Между прочим, SFX модули RAR упакованы именно c помощью UPX.
Второе место по сжатию в категории Win32 программ занял ASPACK тайваньчанина Алексея Солодовникова (www.entechtaiwan.com/aspack.htm, devutils@entechtaiwan.com). Программа имеет очень приятный интерфейс и может паковать файлы прямо из командной строки. Поддерживается компрессия форматов EXE (PE), DLL, OCX, DPL, BPL.
Программа NeoLite фирмы NeoWorx Inc. (www.neoworx.com, litesupport@neoworx.com) выполнила быстрейшее сжатие, хотя, с моей точки зрения, 430K, которые сэкономил UPX в режиме "Fastest", затратив всего на 0,7 секунды больше, куда важнее. Программа поддерживает форматы EXE (PE), DLL, OCX, VBX. Командной строки нет.
Очень неплохие результаты показывает программа Petite (автор - Ian Luck, www.icl.ndirect.co.uk/petite, petite@icl.ndirect.co.uk). Программа поддерживает форматы EXE (PE), DLL, DRV.
Появившаяся в этом году 32-разрядная версия Pklite от PkWare конкурентам существенно проигрывает.
В категории DOS-программ у UPX есть сильный конкурент - программа APACK датского автора Joergen Ibsen (apack.cjb.net, jibz@hotmail.com). По моим тестам, APACK чаще всего даже выигрывает у UPX в плотности упаковки. По скорости APACK быстрее, чем UPX в режиме максимального сжатия, но медленнее, чем в умолчательном. К сожалению, APACK поддерживает только стандартные EXE и COM. Автор распространяет исходники своих библиотек, так что можете поинтересоваться.
Программа XE за авторством группы Sergey Belyakov & :Jibz: & JauMing Tseng (members.tripod.com/~xpa32/index.htm, jauming@yahoo.com) поддерживает форматы watcom/le, tmt/adam, dos/exe, dos/sys, dos/com, а в тестах обычно занимает третье место.
Программа Pack от NoddegamrA SoftwarE показала быстрейшее сжатие, но более ничем не выделяется.
Рекомендую обратить внимание еще на следующие программы:
- WWPACK (авторы Piotr Warezak and Rafal Wierzbicki awarezak@krysia.uni.lodz.pl) - есть отдельные версии для DOS и Win32;
- LGLZ (автора - Георгий Ляпко);
- PkSmart (авторство - Puchkov Sergey and Alex).
В дистрибутивах UC2 и AIN есть также очень неплохие EXE-пакеры, соответственно UCEXE и AINEXE.
Для OS/2 явный лидер - программа LxLite Андрея Заболотного (bit@freya.etu.ru), пакующая почти все EXE, DLL, PDR, QPR, DRV, FON, SYS, некоторые NE-файлы и даже OS2KRNL.
А чем это все посмотреть?
Итак, вы уже поняли, что архивных форматов существует множество, и, следовательно, у вас есть шанс столкнуться с неизвестным. Я надеюсь, что после этой статьи такая вероятность увеличится. Как же понять, с чем вы столкнулись? Конечно, современные файловые оболочки (FAR, DN, VC5.0 и др.) умеют самостоятельно различать ряд популярных архивных форматов и работать с ними, как с каталогами. Особенно удобно (на мой взгляд) возможность подключения новых форматов реализована в FAR. Но изначально число распознаваемых форматов невелико, а прописывать их "ручками" - задача не из самых легких. Поэтому немудрено, что существуют специальные программы, ориентированные на распознавание различных форматов и работу с ними. Таких программ уже довольно много, поэтому расскажу только о наиболее заметных.
Программа LGAVIEW (как вы уже, наверное, догадались по первым двум буквам - Георгия Ляпко), поддерживает (просмотр, проверка, распаковка) 14 архивных форматов и при этом не требует наличия самих архиваторов.
LGFV того же автора поддерживает просмотр 90 архивных форматов, опять же без наличия самих архиваторов.
IDARC, автор Juergen Peters (home.nikocity.de/Gray.Beast Gray, Beast@nikocity.de), удерживает первое место по числу распознаваемых форматов. В последней на момент написания статьи версии их число достигло 156. Номер формата возвращается как ERRORLEVEL, что можно использовать в BAT-файлах. Программа распространяется с исходниками (сам детектор определен как Unit Pascal), так что можете встраивать поддержку различных форматов и в свои приложения. Это самый оперативный автор: новая версия IDARC обычно появляется не позднее двух недель с момента появления нового формата.
UU (Universal Unpacker) того же автора может распаковать все эти форматы, при этом вы не обязаны помнить опции используемых архиваторов, но сами архиваторы должны быть где-то в пути.
Программа Archid фирмы SH SoftWare (ameba.lpt.fi/~eerheino/shs) построена по тому же принципу, что и IDARC, несколько уступает ей по числу форматов, но поставляется уже с написанным BAT-файлом, упрощающим взаимное конвертирование.
Программа GetTyp (автор Philip Helger, surf.to/phax) распознает "только" 84 архивных формата, но кроме них еще: 15 image formats, 242 EXE modifier, 157 COM modifier, 28 EXE/COM compiler, 44 PE EXE modifier, 14 PE EXE compiler. В 68 архивных форматах могут быть получены листинги.
Программа MUFI (Multi File Identificator, автор - Szalai Laszos, sun30.efe.hu/~wyx/muf, wyx@sun30.efe.hu) узнает 155 архивных форматов (включая EXE-пакеры), 81 графический формат, 80 аудио, 14 форматов анимации и 79 других, включая 18 форматов 3D-объектов.
Программа MSCiC от фирмы Mercury Soft Technology (www.netfront.net/~mercury, mercurysoft@uinet.or) распознает 178 архивных, графических и музыкальных форматов.
А что еще интересного?
Вокруг архиваторов "прижилось" множество других утилит, призванных облегчить жизнь пользователя. Это и всевозможные оболочки, компенсирующие отсутствие таковых в самих архиваторах, различные BAT-файлы (особенно для 4DOS), библиотеки архивации и деархивации под многие языки программирования, подбиратели паролей (ну, забывают люди, что поделаешь), конверторы различных форматов, утилиты поиска в архивах, утилиты восстановления поврежденных архивов и многое другое. Смотрите и выбирайте, тем более что очень многие утилиты бесплатны.
Так где же это все найти?
Вы, конечно, можете воспользоваться указанными выше адресами и посетить странички авторов. Но проще всего воспользоваться специализированным архивом в Словакии ftp.elf.stuba.sk/pc/pack и его многочисленными зеркалами по всему миру. На нем есть 99 процентов здесь перечисленного и многое, многое другое. Адреса некоторых зеркал можно посмотреть хотя бы в документации на RAR. Кроме того, неплохие коллекции есть на известном Simtel-архиве ftp.simtel.net/pub/simtelnet/вашаОС/arcutils//arcers.
Загляните, попробуйте, может быть, вопрос, вынесенный в заглавие, уже не покажется таким странным.
1 (обратно к тексту) - Или, в другом значении этого слова, "непрерывный, без пустот". Выигрыш, видимо, получается из за того, что пустоты, или неполные кластеры, заполнены остатками других файлов, с совершенно другой статистикой. Что и приводит к ненужному расширению словаря и ухудшению коэффициента сжатия. - Г.Б.