Средства разработки

ext-ref.gif eclipse — версия 3.1

На фронте «.NET vs Java» — без перемен. 28 июня разработчики eclipse «ответили» на активное продвижение и тестирование второй бета-версии Visual Studio 2005 выпуском очередной версии своей замечательной «универсальной платформы». Объемистый документ, гордо озаглавленный Eclipse 3.1 — New and Noteworthy, очень подробно перечисляет нововведения и улучшения данной версии, сопровождая это почти мегабайтом иллюстраций — и этот список выглядит весьма внушительно:

  • значительное увеличение производительности;
  • поддержка двунаправленного текста (BIDI);
  • автоматический выбор соответствующего редактора по содержимому открываемого файла;
  • поддержка разных «типов» разделителей строк (Windows, MacOS, Unix) и их преобразование в рамках как одного файла, так и целого проекта;
  • поддержка плагинов, выполненных в виде единого JAR-архива;
  • поддержка гиперссылок и автозавершения слов в редактируемом тексте;
  • усовершенствованная справочная система;
  • …и многое-многое другое.

Хочется в очередной раз подчеркнуть, что eclipse, начинавшаяся как среда Java-разработки, благодаря своей исключительно гибкой архитектуре, отнюдь не замкнулась в рамках этого языка и может не менее эффективно использоваться, например, при создании Windows-приложений на C/C++. Проект CDT (C++ Development Toolkit) реализует «бесшовную» интеграцию среды с компилятором и отладчиком, входящими в состав MinGW — и здесь я не могу не сослаться на великолепное руководство Eclipse Project CDT (C/C++) Plugin Tutorial от Brian Lee. Исходя из личного опыта, могу с уверенностью сказать: даже если вы никогда не сталкивались ни с MinGW, ни с CDT, ни с самой eclipse, то аккуратно выполнив все описанные автором действия, вы получите полноценную и готовую к немедленому использованию «eclipse C/C++ IDE» — с менеджером проектов, «умным» редактором, отладчиком, etc. Кстати, в конце августа появилась на свет версия CDT 3.0 — не менее «новая и заслуживающая внимания», чем сама eclipse 3.1.

ext-ref.gif Debugging Tools for Windows — версия 6.5.3.8

Данный продукт представляет собой богатый набор утилит, предназначенных для отладки приложений, сервисов и драйверов под управлением всех версий Windows, базирующихся на ядре NT (в настоящее время поддерживаются NT 4.0, 2000, XP, 2003 Server и Longhorn, включая 64-битные реализации последних). Очередная версия, выпущенная 30 июня, в числе основных новшеств принесла с собой улучшенную совместимость с Longhorn, поддержку отладки драйверов USB 2.0, усовершенствования в пользовательском интерфейсе отладчика WinDbg, поддержку системы управления исходным кодом Subversion и многое другое — полный перечень изменений располагается по адресу What's New for Debugging Tools for Windows.

Использование отладочных символов Windows в VC++ 7.x

Даже если вы не занимаетесь разработкой драйверов, а возможностей встроенноего отладчика Visual Studio вполне хватает для ваших нужд при поиске ошибок в «обычных» приложениях, одна утилита из комплекта Debugging Tools for Windows способна изрядно облегчить ваш труд — речь идет о так называемом «синхронизаторе символов» (symchk.exe).

Как известно, Microsoft предоставляет для свободного доступа отладочную информацию (в виде .pdb-файлов), полученную при сборке системных исполняемых модулей. Эта информация позволяет видеть более «дружественную» трассировку стека вызовов при выполнении вашего приложения под отладчиком; кроме того, при базовых знаниях ассемблера x86 вы получаете возможность с определенным комфортом прогуляться по внутренностям системных функций в поисках причины возникновения той или иной ошибки.

Однако есть два обстоятельства, несколько омрачающих данную перспективу. Первое из них состоит в том, что «дистрибутив» отладочной информации, который предлагается скачивать с сайта Microsoft, имеет весьма существенный объем — например, для Windows XP SP2 он составляет около 200 мегабайт. Второе обстоятельство еще более печально: начаная с некоторого времени, в Microsoft перестали включать соответствующие .pdb-файлы в состав обновлений Windows, выпускаемых в промежутках между сервис-паками. Соответственно, после установки очередной «заплатки» отладчик может оказаться не в состоянии предоставить вам корректную трассировку стека.

Ниже я хочу предложить вам способ решения перечисленных проблем, основанный на личном опыте и показавшийся мне наиболее «дешевым» и рациональным; надеюсь, что эти рекомендации окажутся кому-нибудь полезны.

Итак, пусть у нас имеется регулярно обновляемая английская Windows XP Pro SP2 и Visual C++ 7.x (проверял на версии 7.0.9955 - то есть, 7.0 SP1). Последовательность действий, позволяющих получить необходимые отладочные символы и поддерживать их в актуальном состоянии по мере установки очередных «заплаток», выглядит следующим образом:

  1. Заходим на страницу Debugging Tools for Windows, скачиваем оттуда нужный дистрибутив (рармер текущей версии для x86 составляет около 13 мегабайт) и устанавливаем его.
  2. Создаем папку (у меня это %SystemDrive%\NTSymbolsCache), в которую утилита symchk.exe будет закачивать .pdb-файлы.
  3. В папке, созданной на шаге 2, создаем обычный текстовый файл, содержащий полные имена системных исполняемых модулей, отладочные символы для которых требуются нам в процессе разработки/отладки; имя каждого файла должно находиться на отдельной строке. Составить этот список «требуемых» модулей довольно просто — достаточно запустить приложение под отладчиком и в окне «Output» обратить внимание на строки вида «'имя_приложения.exe': Loaded 'диск:\путь\имя_файла.dll'...» У меня после запуска пары-тройки приложений получился файл, который я назвал SysDLLs.txt, следующего содержания:
    K:\WINDOWS\system32\advapi32.dll
    K:\WINDOWS\system32\comctl32.dll
    K:\WINDOWS\system32\comdlg32.dll
    K:\WINDOWS\system32\crypt32.dll
    K:\WINDOWS\system32\gdi32.dll
    K:\WINDOWS\system32\kernel32.dll
    K:\WINDOWS\system32\MicrosoftWindowsCommon-Controls-6.0.2600.2527-comctl32.dll
    K:\WINDOWS\system32\msasn1.dll
    K:\WINDOWS\system32\msimg32.dll
    K:\WINDOWS\system32\msvcrt.dll
    K:\WINDOWS\system32\ntdll.dll
    K:\WINDOWS\system32\odbc32.dll
    K:\WINDOWS\system32\ODBCCP32.dll
    K:\WINDOWS\system32\ole32.dll
    K:\WINDOWS\system32\oleaut32.dll
    K:\WINDOWS\system32\rpcrt4.dll
    K:\WINDOWS\system32\secur32.dll
    K:\WINDOWS\system32\shdocvw.dll
    K:\WINDOWS\system32\shell32.dll
    K:\WINDOWS\system32\shlwapi.dll
    K:\WINDOWS\system32\urlmon.dll
    K:\WINDOWS\system32\user32.dll
    K:\WINDOWS\system32\userenv.dll
    K:\WINDOWS\system32\uxtheme.dll
    K:\WINDOWS\system32\version.dll
    K:\WINDOWS\system32\winhttp.dll
    K:\WINDOWS\system32\wininet.dll
    K:\WINDOWS\system32\winmm.dll
    K:\WINDOWS\system32\winspool.drv
    K:\WINDOWS\system32\ws2_32.dll
    K:\WINDOWS\system32\ws2help.dll
    K:\WINDOWS\system32\wsock32.dll
  4. Дабы окончательно сберечь пальцы и клавиатуру, создаем все в той же папке NTSymbolsCache простенький «скрипт» (я назвал его symchk.cmd) следующего содержания:
    @echo off
    symchk.exe /it K:\NTSymbolsCache\SysDLLs.txt /s SRV*K:\NTSymbolsCache\*http://msdl.microsoft.com/download/symbols /oi /op /ov
  5. В командной строке переходим в папку, куда были установлены Debugging Tools for Windows («замусоривать» переменную окружения PATH в данном случае не стоит), и запускаем на выполнение файлик, созданный на шаге 4, любуясь появляющимися в консоли строками:
    K:\Debugging Tools for Windows>K:\NTSymbolsCache\symchk.cmd
    SYMCHK: advapi32.dll         [5.1.2600.2180] PASSED  - PDB: advapi32.pdb DBG: <N/A>
    SYMCHK: comctl32.dll         [5.82.2900.2527] PASSED  - PDB: comctl32.pdb DBG: <N/A>
    SYMCHK: comdlg32.dll         [6.0.2900.2180] PASSED  - PDB: comdlg32.pdb DBG: <N/A>
    SYMCHK: crypt32.dll          [5.131.2600.2180] PASSED  - PDB: crypt32.pdb DBG: <N/A>
    ...
    
    SYMCHK: FAILED files = 0
    SYMCHK: PASSED + IGNORED files = 31
  6. Содержимое папки NTSymbolsCache теперь имеет вот такой вид:
    advapi32.pdb\455D6C5F184D45BBB5C5F30F829751142\advapi32.pdb
    comctl32.pdb\56DD79C0C5864165AC725B8177E8CB332\comctl32.pdb
    comdlg32.pdb\4FCBEAD63D7345998C1F92D8DBB0DC272\comdlg32.pdb
    ...
    («магические числа», как я понимаю, связывают .pdb-файл с соответствующей версией DLL-библиотеки).
  7. Создаем папку, из которой отладчик будет загружать файлы с отладочными символами (у меня это традиционная %SystemRoot%\Symbols), копируем туда .pdb-файлы (без всяких вложенных папок, в «корень») и заводим системную переменную окружения _NT_SYMBOL_PATH, значением которой является полное имя папки, куда мы только что скопировали .pdb-файлы. Перезапускаем Visual Studio, если она была запущена при выполнении всех этих действий — и наслаждаемся полноценной трассировкой стека.
  8. По мере установки на Windows новых обновлений выполняем п.5 (symchk.exe будет закачивать только те файлы, которые соответствуют обновившимся или добавившимся DLL-библиотекам из списка) и «освежаем» папку, на которую указывает _NT_SYMBOL_PATH.

Ссылки «по теме»:

ext-ref.gif Doxygen — версия 1.4.4

Очередное обновление очень приятной утилиты, позволяющей создавать документацию к исходному коду на основании специального вида комментариев. В новой версии добавлены поддержка языка Python, XML-тэгов в комментариях (в стиле C#), а также устранено порядка трех десятков ошибок; полный список исправлений находится на странице ChangeLog. Вопреки популярному мнению о том, что подобное «автодокументирование» приводит к сильному замусориванию исходного кода, замечу — Doxygen позволяет очень гибко управлять соотношением «замусоренность кода» / «подробность документации». Рассмотрим простой пример:

// файл OptionsPage.h

//! Encapsulates the "Setting options" step of the UpdateIt! wizard.
class COptionsPage: public CBetterPropPage
{
...
   virtual void Dump(CDumpContext& dumpCtx) const;
...
};

// файл OptionsPage.cpp

//! This member function prints data members of this class (in the Debug version
//! of the application).
//! @brief dumps the contents of the object to a CDumpContext object
//! @param dumpCtx the diagnostic dump context for dumping, usually afxDump.
void COptionsPage::Dump(CDumpContext& dumpCtx) const
{
...
}

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

Создание дистрибутивов

Итак, исходный текст приложения набран и задокументирован, само оно откомпилировано и отлажено — настало время подготовить дистрибутив для будущих миллионов восторженных пользователей. И в этой области, помимо «изощренных» коммерческих систем, существует два стабильно развивающихся бесплатных пакета, очередные версии которых я и предлагаю вашему вниманию.

ext-ref.gif Inno Setup — версия 5.1.5

Первую версию «Инны» Jordan Russell выпустил еще в 1997 году; за восемь с лишним лет своего развития его детище приобрело огромную массу возможностей и поклонников, не утратив при этом своей «легкости» — дистрибутив последней версии Inno Setup «весит» немногим более мегабайта. Основной претензией поклонников NSIS, о которой речь пойдет ниже, долгое время был больший, чем у их фаворита, overhead — то есть, размер служебных данных в создаваемых инсталляционных пакетах. Несмотря на то, что данный факт никогда не был для меня критичен, могу с радостью отметить, что за последнее время разрыв по этому показателю сократился почти до нуля. Основным же плюсом Inno Setup, благодяря которому я и сделал свой выбор в ее пользу, является, на мой взгляд, использование диалекта Pascal в качестве скриптового языка. Можно долго и безрезультатно ломать копья в священных войнах «X vs Y», но факт остается фактом — на Pascal программировал практически каждый из нас и отсутствие необходимости осваивать еще один «самопальный» синтаксис позволяет взять старт значительно быстрее.

Версия 5.1.5 была выпущена в середине августа и является четвертой в линейке 5.x после 5.0.7, 5.0.8 и 5.1.4; если главным нововведением предыдущей версии стала поддержка создания инсталляционных пакетов для 64-битных приложений, то текущие изменения носят скорее косметический характер — самым существенным из них является, наверно, обновление zlib до версии 1.2.3. Помимо перечисленного, основные усилия авторов приложения направлены сейчас на исправление ошибок и совершенствование Pascal Scripting, а также на сокращение пресловутого оверхэда. Полный перечень изменений и улучшений содержится в документе Inno Setup 5 Revision History.

Для Inno Setup существует некоторое количество «сторонних» разработок, самыми заметными из которых являются Inno Setup Form Designer, представляющий собой визуальную среду разработки нестандартных форм, использующихся в процессе инсталлшяции, и ISTool — довольно комфортная IDE для создания и редактирования инсталляционных скриптов. С сожалением вынужден отметить, что последний из упомянутых проектов находится сейчас в каком-то полузаброшенном состоянии: если раньше автор выпускал новые версии практически синхронно с обновлением Inno Setup, то до недавнего времени последней доступной версией была 5.0.8, датированная 11-м марта этого года (к счастью, вскоре после выхода Inno Setup 5.1.5 автор все-таки обновил свое детище).

Помимо перечисленного нельзя не упомянуть и полуофициальный «QuickStart Pack», в состав которого входит, в частности, Inno Setup Preprocessor, разработанный нашим соотечественником и позволяющий использовать в инсталляционных скриптах директивы условной компиляции (определенную пикантность ситуации придает тот факт, что синтаксис этих директив чисто C-шный — #define, #ifdef и иже с ними). Ознакомиться с подробным списком «довесков» можно на странице Inno Setup Third-Party Files.

ext-ref.gif Nullsoft Scriptable Install System — версия 2.09

Если дистрибутивы, созданные версиями линейки 1.x этого инсталлятора, имели весьма посредственный внешний вид (вспомним установку Winamp 2.x), то начиная с версии 2.0 ситуация радикально изменилась — появился так называемый «modern interface», что позволило придать дистрибутивам действительно «современный» внешний вид (в качестве примера можно привести тот же самый Winamp, но уже версий 5.x, или «наш» RSDN@Home версии 1.1.4). Текущий релиз, как и восемь его «предков» из линейки 2.0x, содержит исправления ряда мелких погрешностей, обнаруженных со времени выхода второй версии инсталлятора; сколько-нибудь значимые новшества в нем отсутствуют.

На странице Development Environments вы сможете найти несколько ссылок на IDE, позволяющие редактировать инсталляционные формы и скрипты более комфортным образом — наличествуют как плагин для eclipse, так и «автономные приложения» типа HM NIS EDIT.

Исходники

ext-ref.gif Custom Tab Controls, Tabbed Frame and Tabbed MDI — версия от 14 July, 2005

[WTL] Очередное обновление набора классов от Daniel Bowen, предназначенных для реализации «закладочного» интерфейса, аналогичного MIcrosoft Visual Studio .NET; одно из прилагающихся демонстрационных приложений содержит также пример интеграции реализованных автором закладок с библиотекой WTL Docking windows нашего соотечественника Сергея Климова. Текущая версия поддерживает использование Visual C++ 8.0, WTL 7.5 и может применяться при построении 64-битных приложений; детальная информация об исправлениях и улучшениях содержится в исходных файлах.

ext-ref.gif VS .NET 2003 add-in that adds diff tools, an explore command, Subversion support and web project reporting — версия 2.1

[C#] Данное «расширение» дополняет и без того богатые возможности среды Visual Studio .NET 2003 целым набором полезных функций, к числу которых относятся:

  • сравнение содержимого файлов (так называемые diff tools) с возможностью гибко игнорировать пробелы, символы табуляции и регистр сравниваемых символов;
  • сравнение различных версий файла, находящегося «под контролем» Subversion;
  • сравнение содержимого папок;
  • тестирование преобразований, выполняемых на основе XSLT;
  • создание резервных копий файлов текущего проекта;
  • построение несложных отчетов для web-проектов.

Кроме предоставления перечисленных возможностей, этот проект может послужить в качестве примера исходного кода тем из разработчиков, которые интересуются созданием «расширений» для последних версий Visual Studio.

ext-ref.gif CM_ConfigBuilder: Code generator for Application Settings/Preferences graphic management — версия 1.1e

[ATL/MFC] Довольно любопытный, с моей точки зрения, проект, предлагающий программистам комплексное решение для работы с настройками приложения:

Вот как автор описывает дело собственных рук. Около двух лет назад мне надоело снова и снова слышать от моих заказчиков один и тот же вопрос: «Не могли бы вы сделать этот параметр настраиваемым?» Удовлетворяя эту просьбу, я каждый раз должен был писать код, выполняющий следующие действия: сохранение параметра в файл, получение параметра из файла, создание некоторого элемента управления, позволяющего пользователю изменять значение этого параметра, проверка корректности этого значения при изменении его пользователем. Поэтому я решил создать инструмент, который сможет выполнять все эти операции за меня. Первым шагом была разработка утилиты для описания структуры настроек моего приложения. Вторым шагом было добавление возможности описывать способ редактирования пользователем соответствующих данных. И наконец третьим шагом было создание библиотеки, содержащей весь необходимый код. Все это привело меня к написанию CM_ConfigBuilder, который генерирует весь код, требующийся для управления настройками приложения и хранения их в XML-файле.

Библиотеки

ext-ref.gif boost — версия 1.33

Долгожданное обновление «испытательного полигона» возможностей C++ принесло с собой весьма обширный перечень дополнений и улучшений. Появилось несколько новых библиотек: Iostreams Library (создание потоков и фильтров ввода-вывода), Parameter Library (написание функций, принимающих именованные аргументы), Pointer Container Library (контейнеры для динамических полиморфных объектов) и ряд других. Помимо этого, были внесены изменения в существующие библиотеки, такие как Bind, Graph, Regex, Serialization и Signals. К списку поддерживаемых компиляторов добавилась бета-версия Microsoft Visual C++ 8.0 (2005).

ext-ref.gif Qt (Open Source Edition) — версия 4.0.0

Выпуск фирмой Trolltech бесплатной Windows-версии своей знаменитой библиотеки был, скорее всего, одной из главных интриг последнего времени. Даже я, будучи хроническим MFC-шником, совершенно не знакомым с Qt, поддался всеобщему ажиотажу и по десять раз на дню проверял анонсы на официальном сайте. И 28 июня свершилось! — бездонная бочка меда была выставлена для всеобщего угощения. Радость разработчиков кроссплатформенных приложений была настолько велика, что они не сразу заметили скромно лежащую рядом ложечку дегтя: некоммерческая версия Qt не содержит средств интеграции с Visual Studio и предполагает использование в качестве компилятора MinGW. Впрочем, для тех, кто на самом деле интересуется этой библиотекой и хочет попробовать ее в разработке Windows-приложений, это вряд ли станет серьезным препятствием — связка eclipse + CDT + MinGW, о настройке которой я упоминал выше, по комфортности работы ничуть не уступает даже последним версиям продуктов от Microsoft, а в чем-то и превосходит их.

Впрочем, вернемся непосредственно к Qt. Признаюсь честно — впечатление, произведенное на меня этой библиотекой, было куда менее сильным, чем ожидание появления на свет ее бесплатной версии. Заглянув в исходные тексты библиотеки и прилагающихся к ней примеров, я обнаружил там еще больше «условностей», чем можно найти в реализации MFC, ATL или WTL; кроме того, для человека, твердо опирающегося на знание Win32 API, предлагаемый механизм работы с элементами управления является, по моим ощущениям, совершенно инородным. Мне всегда казалось, что подлинная «идеальная библиотека» на C++ должна использовать минимум вспомогательных средств в виде многострочных макросов, «колдунов», etc. MFC грешит первым, но позволяет, по крайней мере, воспользоваться для создания приложений обычным текстовым редактором и компилятором командной строки — а вот работа с Qt без использования прилагающихся «дизайнеров» и «препроцессоров» станет, как мне показалось на первый взгляд, абсолютно неэффективной; wxWidgets в этом плане выглядит куда более дружелюбно.

Но как бы там ни было, я искренне рад, что линейка «свободных» библиотек пополнилась еще одним экземпляром, имеющим огромное количество поклонников; может быть, читателю этих строк предстоит совершенно легально стать одним из них. В любом случае — обязательно попробуйте Qt на вкус и обратите особое внимание на жирный водяной знак «IMHO», проступающий из-под предыдущего абзаца.

ext-ref.gif zlib — версия 1.2.3

Данная кроссплатформенная библиотека уже давно является одним из стандартов де-факто в области сжатия данных. Вышедшая 18 июля версия 1.2.3 не содержит никаких новшеств, но исправляет несколько серьезных ошибок, две из которых приводили к потенциальной уязвимости программного обеспечения, использующего эту библиотеку, при декодировании сжатых данных. Авторы настоятельно рекомендуют немедленно перейти на использование этой версии, если сейчас вы используете 1.1.1 или 1.1.2; первыми этому совету последовали разработчики Subversion и TortoiseSVN, так что вы окажетесь в хорошей компании.

ext-ref.gif ZipArchive — версия 2.4.7

Самая удачная, на мой взгляд, объектно-ориентированная «надстройка» над упомянутой выше zlib. Я очень интенсивно использую эту библиотеку в своих проектах и ни разу не сталкивался с какими бы то ни было проблемами при сжатии данных. Код, предлагаемый автором, довольно универсален — в качестве целевой платформы может выступать как Windows, так и Linux; использование STL или MFC регулируется директивами условной компиляции; список поддерживаемых средств разработки включает в себя Visual C++ 6.0 и 7.0, а также Borland C++ Builder. В текущей версии библиотеки, увидевшей свет 5 августа, автором было исправлено несколько мелких ошибок; прилагающаяся документация в формате HTML Help является, помимо источника информации, еще и хорошим примером использования утилиты документирования кода Doxygen.

ext-ref.gif Prof-UIS — версия 2.40

Один из представителей семейства «расширителей MFC», носящий гордое имя «Professional User Interface Suite», 5 июля обновился до версии 2.40. Данная библиотека существует в двух вариантах — кммерческом и бесплатном; последний содержит более узкий набор классов, но отнюдь не теряет полезности при разработке MFC-приложений. Диапазон поддерживаемых разработчиками версий Visual Studio весьма широк: от 6.0 до 2005 Beta 2. Даже к бесплатному варианту библиотеки прилагается богатый набор примеров и подробная документация, содержащая помимо справчника по классам и их методам некоторое колчество статей, помогающих начать использование библиотеки, а также перечень часто задаваемых вопросов и ответов на них (FAQ). В текущей версии традиционно исправлены старые ошибки и добавлены новые (возможности); полная история версий библиотеки содержится на странице News about Prof-UIS and other GUI toolkits.

ext-ref.gif win32gui — версия 1.6.6

Любителям программистской «экзотики» и ввобще всем, кому «надоели карты сообщений а-ля MFC», без сомнения будет интересно познакомиться с этой библиотекой, использующей самые «горячие» возможности предпоследнего на данный момент стандарта C++ и соответствующих ему компиляторов. Автор предлагает весьма нетрадиционный взгляд на разработку GUI и, что немаловажно — подробную справку в формате HTML. Бибилотека развивается довольно динамично, как минимум один раз в квартал на SourceForge появляются ее новые версии, поэтому скука вам не грозит.

Одной строкой

ext-ref.gif Subversion — версия 1.2.3

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

ext-ref.gif TortoiseSVN — версия 1.2.2.4295

Закономерное следствие обновления zlib и Subversion — плюс несколько исправленных ошибок и ряд косметических нововведений, с полным списком которых можно ознакомиться по адресу http://tortoisesvn.tigris.org/ChangeLog.txt.

ext-ref.gif TortoiseCVS — версия 1.8.21

Исправлено несколько ошибок, CVSNT обновлена до версии 2.5.01.2025. Сборки 19, 20 и 21 выходили с интервалом в один день по причине отсутствия в них файлов, которые разработчики «забывали » поместить в дистрибутив.

ext-ref.gif MinGW — версия 4.1.1

Способ установки остался прежним — через Internet. Обновились сам инсталлятор, MinGW Runtime (до версии 3.8), а также набор заголовочных файлов и библиотек импорта Win32 API (до версии 3.3).

ext-ref.gif CVSNT — версия 2.5.02.2088

Очередное исправление нескольких мелких ошибок.

обновлено
11.10.2005
 
Проверка PR и ТИЦ