АО Microsoft (Москва, Центральный регион), дочерняя фирма компании Microsoft (Редмонд, шт. Вашингтон), любезно предоставила редакции PC Week/RE для обзора продукт Visual C++ 4.1. Было решено протестировать его не совсем обычным способом, проверив возможности данного продукта “в боевых условиях” (или максимально приближенных к оным). Для тестирования был взят довольно большой и сложный проект объемом в несколько человеко-лет и пару мегабайт кода, разрабатывавшийся достаточно давно еще для Windows NT 3.5 с помощью Visual C++ 2.0 for NT и MS SQL Server 5.0. Интересно было выяснить, насколько сложно перейти со старого компилятора на новый, насколько удобнее стало с ним работать и каков выигрыш во времени компиляции и быстродействии полученного кода.

 

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

 

Режим отладки в Developer Studio

Начать полагается, как обычно, с инсталляции, которая прошла без сучка без задоринки сначала в русской версии Windows 95, а потом в Windows NT 3.51 Workstation. Затем последовал пробный пуск в Windows 95, где был оттранслирован пример из Microsoft System Journal с использованием библиотеки DirectX (GameSDK). До этого данный пример использовался для тестирования связки DirectX и компилятора VC++ 2.0, предназначенного исключительно для NT, но прекрасно работающего и в считающейся 32-разрядной Windows 95 (если не учитывать очевидной невозможности работы в отладчике, к которому, впрочем, ряд известных программистов относится с презрением). Теперь же программа прекрасно выполнялась по шагам, и относительно совместимости с Windows 95 вроде бы можно было не волноваться.

 

Далее подошла очередь NT. Старый project-файл с расширением .mak прочитался без проблем, программа предупредила о преобразовании его в новый формат .mdp, и проект успешно загрузился. Оставив пока в стороне настройку оболочки Developer Studio, мы приступили к непосредственной сборке проекта. Раньше компилятор версии 2.0 выдавал на всю программу три предупреждения относительно излишней, по его мнению, инициализации некоторых объектов, предлагая в соответствующих местах исходного текста объединить описание объекта (вызов конструктора) с его инициализацией, хотя между этими операторами находился еще программный код, косвенно влияющий на инициализируемое значение. Причем компилятор выдавал не просто предупреждение, а еще и комментарий типа “такой код неэффективен” и что-то про невысокую квалификацию программиста. Теперь ситуация изменилась принципиально. Эти предупреждения исчезли, но появилось несколько десятков других, правда, совсем безобидных  -  в отношении ключевого слова bool и констант true и false, которые должны были войти в новый стандарт Си++ уже после выпуска VC++ 2.0. Эти константы в программе для удобства были описаны “вручную”, что новому компилятору не понравилось. Он заявил, что bool зарезервировано для использования в “недалеком, но светлом” будущем. Ничего конкретного насчет этого будущего выяснить не удалось. Однако исчезли три старых предупреждения, следовательно, новый компилятор немного поумнел.

 

Программа, работающая с MS SQL Server через ODBC-драйвер, запустилась сразу, и никаких проблем с ее функционированием и отладкой замечено не было. Скорость компиляции ощутимо возросла, хотя и не на сотни процентов. Удобной оказалась настройка процесса сборки программы (linking)  -  можно было отказаться от генерации не используемого в ряде случаев browse-файла, на создание которого подчас уходит значительно больше времени, чем на сам процесс “инкрементал”-сборки.

 

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

 

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

 

Интересной оказалась проверка программы в Windows 95. Имелась тестовая база в Access-формате (.mdb), имитирующая структуру базы SQL Server, к которой был организован ODBC-доступ. Главное окно программы выглядело примерно как в NT, однако при выполнении некоторых операций, в частности при создании плавающих окон, отображающих процесс выполнения длительных операций, программа стала “падать”. Кроме того, при отрисовке самодельных графиков скорость ее работы оказалась ужасающе низкой.

 

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

 

Wnd->CreateEx( WS_EX_DLGMODALFRAME,

 

          _T(“AfxWnd”), “Information”,

 

          WS_VISIBLE | WS_POPUP | WS_CAPTION,

 

          wrc.left + (wrc.Width()-INFOWND_WIDTH)/2,

 

          wrc.top + (wrc.Height()-INFOWND_HEIGHT)/2,

 

          INFOWND_WIDTH, INFOWND_HEIGHT,

 

          View->m_hWnd, (HMENU)NULL);

 

Тратить время на выяснение причины, честно говоря, было лень, хотя максимальное подозрение падает на нестандартное сочетание флажков. Подобный “баг”, кстати, наглядно подтверждает известный закон, гласящий, что “программу надо разрабатывать и тестировать на той платформе, на которой она будет работать”, вне зависимости от рекламных заявлений создателей операционных систем и многоплатформных компиляторов. Но главное, что программа без проблем работает и в NT 3.5, и в NT 3.51.

 

Отладка стала более удобной. Помещение курсора на переменную сразу же показывает ее текущее значение, что существенно экономит время в сравнении со старой версией, когда название переменной приходилось вводить вручную в отдельное окно. И сам процесс отладки заметно ускорился, теперь нет невыносимых пауз между двумя шагами. Тем, кто переходит на VC++ 4.1 с других аналогичных продуктов, покажется превосходной давно существующая в серии Visual C++ возможность автоматического вызова исходного кода MFC при входе “внутрь” соответствующих функций, естественно, интегрированная в debug-режим работы.

 

Некоторые вещи, однако, остались на уровне двухлетней давности. Если разработчики компилятора считают, что реализованное ими несколько лет назад можно считать идеальным, то достаточно посмотреть продукты конкурентов, чтобы убедиться, что это не так. В частности, если ClassWizard “оброс” такими возможностями, как поддержка нескольких проектов, более гибкий процесс создания новых классов, интеграция с OLE, то ApplicationWizard, позволяющий создавать проект на визуальном уровне, практически не изменился. Точнее всего можно сказать, что VC++ 4.1  -  это не кардинально переработанный продукт, а, скорее, значительно расширенный и сохранивший как большинство плюсов, так и большинство минусов старых версий.

 

Что касается самой оболочки, то тут, конечно, VC++ 4.1 заслуживает самых высоких похвал. Теперь интегрированная оболочка Developer Studio одинакова для большинства средств разработки, выпускаемых Microsoft. Очень привлекательна возможность общения с проектом на уровне классов, а не файлов, когда надо не запоминать, что где находится, а работать непосредственно с иерархией объектов.

 

Добавлен ряд новых возможностей, а интерфейс пользователя стал значительно более дружелюбным. Число настроек оболочки на конкретного пользователя заметно увеличилось, хотя некоторые весьма полезные нюансы по-прежнему так и не были реализованы. Например, при выборе шрифта для различных синтаксических элементов невозможно сделать его стиль Bold или Italic, что для многих программистов, привыкших к такой возможности продуктов фирмы Borland, весьма странно и некомфортно. Кроме того, определенная перегруженность рабочей области окна различными подокнами практически не позволяет работать с VC++ 4.1 в разрешении 640х480. Минимально удовлетворительным следует считать разрешение 800х600, что для продолжительной работы за компьютером требует по крайней мере 15-дюймового монитора.

 

Справочная система стандартного Help’a значительно улучшена и сделана в едином для продуктов Microsoft стиле, берущем свое начало, если не ошибаюсь, еще с дисков библиотеки для разработчиков MSDN. Кстати, в этом же стиле выполнена, собственно, и вся оболочка Developer Studio. Что касается помощи, то наглядная система иерархического оглавления, контекстный поиск нужных тем и интеграция всех примеров в Help-файле сделаны очень удобно. Хотя, по последним слухам, Microsoft сейчас переделывает справочные системы ко всем своим продуктам на основе единого наиболее популярного в Internet стандарта HTML. Это, по идее, позволит существенно оживить статические страницы подсказок.

 

Что касается дополнений, внесенных в новую версию библиотеки MFC 4.1, то только перечисление всех возможностей может занять не один абзац. Попробую отметить наиболее актуальные нововведения (по сравнению с MFC времен VC++ 2.0). Прежде всего, это поддержка новых элементов управления, специфичных для Windows 95. Добавлен набор объектов, полностью охватывающих API Web-сервера Microsoft Internet Server. В создаваемые программы теперь можно включать трехмерные изображения в формате VRML 1.0 с помощью специальной ActiveX-библиотеки TGS 3D Graphic Tools, которая, к сожалению, не является собственностью Microsoft. Пока не будет произведена регистрация соответствующего управляющего элемента, окошко с трехмерной картинкой будет выдавать предупреждающее сообщение о необходимости регистрации, что, очевидно, не позволяет без дополнительной оплаты создавать VRML-приложения.

 

В число отдельно прилагаемых к VC++ 4.1 библиотек входит MFC Migration Kit для переноса Си-приложений в MFC-окружение и соответственно язык Си++. DAO SDK позволяет создавать эффективные приложения, работающие с базами данных с помощью “мотора” Jet, созданного фирмой Microsoft для доступа к БД без использования ODBC, что резко увеличивает скорость работы программ. В частности, это увеличение оказалось весьма существенным при работе напрямую с базами формата .mdb СУБД Access.

 

Для формирования отчетов используется генератор Crystal Reports. Вообще, как на мировом, так и на отечественном рынках отмечается стремительно возрастающий спрос на продукты фирмы Seagate Crystal, становящиеся в ряде компьютерных областей фактическим стандартом.

 

Наиболее удобен VC++ 4.1 для проектов, создаваемых группами программистов для средних корпоративных заказчиков. При этом обеспечивается поддержка двух продуктов, предназначенных для сопровождения коллективной разработки. Это оригинальное ПО от Microsoft под названием Visual SourceSafe, используемое для интеграции Visual C++ и Visual Basic, а также становящийся неформальным стандартом продукт PVCS фирмы Intersolv.

 

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

 

В целом VC++ 4.1 можно оценить как пакет, ориентированный в значительной степени на профессиональных разработчиков. Фирма Microsoft, принеся в жертву ряд мелких интерфейсных удобств, сделала акцент на повышение скорости разработки, что достигается быстрой настройкой VC++ на конкретные нужды программиста, тесной интеграцией пакета с другими продуктами Microsoft, с ее операционными системами. Пакет GameSDK позволяет создавать различные мультимедиа-приложения, обеспечивая быструю графику, звуковое и музыкальное сопровождение в форматах WAV и MIDI, общение через сеть по разным протоколам, будь то простое модемное соединение или TCP/IP. При этом поддерживается система команд нового мультимедийного процессора Intel MMX, резко ускоряющего обработку звука, трехмерных изображений и т. д. А библиотека MFC обладает на сегодня, пожалуй, самой мощной функциональностью, и не случайно ее лицензировали практически все ведущие фирмы, занимающиеся разработкой компиляторов для Windows.

 

Конечно, конкуренты у Microsoft на рынке Си-компиляторов останутся, однако в случае устранения ряда интерфейсных недоработок и дальнейшего расширения возможностей MFC в сторону ее большей “высокоуровневости” компания из Редмонда вполне способна прочно занять в этой нише первое место.

 

Было бы не менее интересно провести аналогичную оценку главного конкурента VC++  -  компилятора Borland C++ хорошо известной в России фирмы. Благо, имеется для тестирования другой продукт, разрабатывавшийся еще на Turbo C 1.0 (последняя версия  -  на Borland C++ 4.5), трудоемкостью около 10 человеко-лет, не столь масштабный, как программа для VC++, но с очень сложной логикой и объемной экспертной системой. Этот “тестовый пример” реализован как для DOS, так и для Windows на основе одного кода и в значительной степени “заточен” под компилятор фирмы Borland. Поэтому будем надеяться, что PC Week/RE удастся провести аналогичное тестирование BC++ 5.0 в самое ближайшее время.

 

Сергей Бобровский

 

К Сергею Бобровскому можно обратиться по адресу: sergei95@glas.apc.org.

 

Очень привлекательна возможность Developer Studio общаться с проектом на уровне классов, а не файлов, и работать непосредственно с иерархией объектов

Версия для печати