Microsoft Visual Studio .NET 2003: обошлось без революций

3 июнь, 2003 - 23:00Богдан Вакулюк
22 мая в Украине состоялась официальная презентация последней версии популярнейшей интегрированной среды для разработчиков ПО -- Microsoft Visual Studio .NET 2003. Подобное событие традиционно вызывает значительный интерес в "программистском" сообществе, поскольку для большинства его членов Visual Studio -- основной рабочий инструмент, и каждое его обновление предоставляет шанс сделать свой труд более эффективным, а его результаты -- более привлекательными для конечных пользователей. А для того чтобы читатель мог оценить целесообразность перехода на эту платформу, предлагаем небольшой обзор новых возможностей VS .NET 2003.
Основные изменения, коснувшиеся пакета, прочно связаны с продвижением компанией Microsoft сразу нескольких свежих продуктов. Важнейшие из них -- новая версия программной среды .NET Framework 1.1, ориентированной на настольные и серверные приложения, и усеченный вариант той же среды, рассчитанной на применение с мобильными платформами Pocket PC и Win CE .NET, -- он получил название .NET Compact Framework. На состав их библиотек классов ощутимо повлияли новые возможности ОС Windows Server 2003, также недавно представленной широкой публике.

Microsoft Visual Studio .NET 2003 обошлось без революций
Visual Studio 2003 включает в себя полный набор инструментов разработки .NET-приложений для мобильных платформ, включая эмулятор Pocket PC от компании Connectix
Microsoft Visual Studio .NET 2003 обошлось без революций
Обновленный инструмент Intellisense обеспечивает программисту дополнительный комфорт, например теперь его можно использовать во время отладки в окне Command Window
Microsoft Visual Studio .NET 2003 обошлось без революций
Среда .NET Framework 1.1 пополнилась целым рядом новых классов, среди них -- обновленный диалог Browse For Folder
Microsoft Visual Studio .NET 2003 обошлось без революций
В разработке приложений на Visual C++ в VS 2003 теперь можно использовать Windows Form Designer
То, что VS .NET 2003 обеспечивает полную поддержку последних вариантов программного окружения .NET Framework, -- это, безусловно, главное достоинство данного ПО, хотя оно содержит и множество других модернизаций, способных значительно облегчить труд программиста.

Особое внимание в пакете уделяется разработке мобильных приложений, исполняемых на платформах с установленным .NET Compact Framework (Pocket PC 2002 и выше, Win CE .NET). В процессе их создания доступны большинство средств и инструментов Visual Studio (исключение составляют лишь те, что не поддерживаются классами .NET CF): языки программирования C# или Visual Basic .NET, большой набор первичных генераторов проектов (Wizards), конструктор Windows Forms и т. п. Для удобства программистов в среду VS интегрирован эмулятор Pocket PC (производства компании Connectix), с помощью которого производится немедленное тестирование приложений. Кроме того, встроенные средства отладки позволяют загружать сборки (assemblies) в PDA и осуществлять этот процесс в условиях, максимально приближенных к реальности.

Набор классов ASP.NET Mobile Controls, поддерживаемый Visual Studio и .NET Framework 1.1, предоставляет средства для быстрого создания Web-приложений для отображения на экранах PDA и WAP-телефонов. Специальный механизм, обеспечиваемый Mobile Controls, позволяет определять более 200 различных устройств и соответственно формировать внешний вид ASP .NET-страниц.

В качестве доказательства того, насколько легко создаются мобильные приложения с помощью VS .NET 2003, маркетологи Microsoft обычно демонстрируют сюжет, в котором пользователь портирует клиентскую настольную программу на PDA простым копированием визуальных элементов формы и фрагментов кода, отвечающих за обработку событий. После этого, без каких-либо изменений, проект компилируется в полнофункциональное приложение. Конечно, данный пример является определенным упрощением, но то, что VS .NET 2003 переводит процесс программирования для PDA на качественно новый уровень, -- факт несомненный.

Немалую роль при создании мобильных бизнес-приложений и тонких клиентов в архитектуре, предлагаемой Microsoft, играют Web-службы (Web Services) -- наборы компонентов и процедур, инкапсулирующих основную логику на стороне сервера и обеспечивающих гибкий и прозрачный механизм вызовов на основе протокола SOAP. В новой версии Visual Studio усовершенствовано использование Web-служб за счет интеграции в пакет набора WSE (Web Service Enhancements). В его состав входят классы, реализующие поддержку прогрессивных (но пока еще не стандартизированных!) спецификаций WS-Security, WS-Routing, WS-Attachments и DIME (Direct Internet Message Encapsulation) -- компактный бинарный формат для обмена данными между приложениями. Внешне все модернизации кристаллизовались в обновленном диалоге Add Web Reference -- теперь он позволяет вести локальный или удаленный поиск Web-служб с помощью каталогов UDDI (Universal Description, Discovery and Integration) и в доступной форме отображать их описание, представленное на языке WSDL (Web Services Description Language).

Усовершенствования коснулись и менее глобальных, но крайне важных составляющих пакета Visual Studio, в частности средств отладки и модуля Intellisense, отвечающего за контекстные меню с различного рода "подсказками" разработчику. Первые обогатились возможностью использовать каналы (pipes) при тестировании удаленных компонентов вместо механизмов TCP/IP, что существенно повышает уровень безопасности этого процесса. Также во время пошаговой отладки, при просмотре значений, хранящихся в коллекционных классах (таких, как Array или Hashtable), окно Locals отображает сначала поля с пользовательскими данными и лишь затем все прочие.

Новые возможности Intellisense обеспечивают более рациональную организацию пространства редактора кода -- начало и конец отдельных функций разграничиваются горизонтальными линейками, так что визуально намного проще отслеживать составляющие программы. При создании классов, наследующих интерфейсы или родительские классы, содержащие абстрактные методы, можно автоматически генерировать "заглушки" для последующей реализации таких методов. При этом они объединяются в скрываемые фрагменты (regions), названия которых соответствуют именам породивших их классов. Кроме того, Intellisense облегчает применение объектов типа delegate -- в среде .NET Framework данные объекты аналогичны указателям на функции. При их взаимодействии (например, в случае присваивания одной переменной этого типа другой) "автоматический помощник" фиксирует все объекты-делегаты, отвечающие контексту операции, и предлагает их на выбор в ниспадающем меню. Подобным образом действует и контекстная подсказка при указании обработчиков событий.

Для перегрузки метода родительского класса теперь достаточно набрать соответствующую конструкцию (например, для C# -- это public override), и Intellisense сам предложит доступные варианты.

Еще несколько удобных новшеств. Поля и методы в контекстном меню Intellisense теперь сортируются не по алфавиту, а по частоте их использования, функции этого модуля в VS .NET 2003 доступны даже в окне непосредственной выдачи команд во время отладки (Immediate). В режиме редактирования VB .NET-кода автоматически заполняются конструкции типа try...catch (правда, в качестве объекта исключения служит экземпляр класса Exception, а не ApplicationException, что было бы более логично).

Пользовательский интерфейс интегрированной среды не претерпел сколько-нибудь значительных изменений. Основное внимание разработчики Visual Studio уделили повышению его быстродействия, что им вполне удалось. Подвергся модернизации и инсталляционный процесс -- сократилось время установки пакета по сравнению с Visual Studio 2002 (кстати, почти в два раза!), уменьшилась степень интеграции с библиотекой MSDN, что позволило увеличить скорость отклика справочной системы.

После рассмотрения общих для VS .NET 2003 изменений вкратце остановимся на нововведениях, коснувшихся отдельных языков и инструментов, поддерживаемых пакетом.

Visual Basic .NET. Семантика языка обогатилась лишь двумя средствами -- появились оператор побитного сдвига и поддержка декларации переменных в операторе конструирования цикла. Кардинально переработан модуль Visual Basic Upgrade Wizard -- теперь он обеспечивает безошибочную конвертацию проектов, использующих Visual Basic 6.0, с очень высокой вероятностью. С помощью диалога Code Snippet Upgrade Wizard можно преобразовывать только выделенные участки кода.

Visual C# .NET. Несмотря на то, что уже сейчас на сайте Microsoft доступен документ, описывающий радикальные изменения в семантике языка (подробнее во врезке), компания не поспела с их стандартизацией к выходу VS .NET 2003, поэтому здесь -- без перемен. Единственное, чем обзавелась среда разработки приложений на C#, -- возможностью запуска макросов до начала процесса компиляции/сборки и после нее (prebuild- и postbuild-команды). Помимо этого, усовершенствован модуль JLCA (Java Language Conversion Assistant), отвечающий за преобразование проектов Visual J++ в C#.

Visual J# .NET. Впрочем, созданные на Java приложения совсем не обязательно переводить на C#, хотя Microsoft настоятельно рекомендует поступать именно так. Для программистов, привыкших к синтаксису и семантике Java, в Visual Studio включена поддержка Visual J# -- языка, почти аналогичного разработке Sun, с той разницей, что программный код компилируется не в байт-код, а в MSIL (Microsoft Intermediate Language). Безусловно, в качестве базиса J# применяет набор классов .NET Framework, однако в его состав входит библиотека, эмулирующая пространство имен JDK 1.1.4, -- поэтому проекты, использующие Java Development Kit, конвертируются. Хотя делается это и не совсем корректно, но все же доработка их требует значительно меньше усилий, чем C#-код, образованный JLCA.

В последней версии Visual Studio возможности J# пополнились поддержкой классов Web Form и Web Control, что позволяет задействовать его при создании страниц ASP .NET.

Visual C++ .NET. Основное направление усовершенствования VC++, над которым трудились авторы Visual Studio, -- это максимальное приведение его спецификации к новейшим ISO-стандартам. В данный момент Microsoft декларирует 98%-ную совместимость, а это означает поддержку таких спецификаций, как раздельные шаблоны (Partial Template и Partial Ordering of Function Templates) и некоторых универсальных современных библиотек, например Boost, Loki и др. Основательно модифицирован и сам компилятор -- улучшен оптимизирующий алгоритм, ориентированный на последние версии процессоров Intel и AMD и использование SIMD-инструкций (SSE и SSE2), увеличена скорость работы.

Однако самая заметная, в буквальном смысле слова, модернизация заключается в том, что теперь программистам на VC++ доступен Windows Form Designer -- интерактивный конструктор пользовательского интерфейса с автоматической генерацией шаблонов обработчиков событий, редактором свойств контрольных элементов и т. п.

Dotfuscator. Известно, что программы, компилированные в MSIL (универсальный исполняемый стек-ориентированный язык для платформы .NET), из-за его простой и прозрачной архитектуры крайне легко дезассемблировать и проникнуть во внутреннюю логику приложения. Зачастую это крайне нежелательно, особенно когда речь идет о коммерческих продуктах. Для предотвращения взломов служат утилиты, реализующие алгоритмы сокрытия (obfuscation) MSIL-кода. Принцип их действия состоит в том, что из текста дезассемблированного MSIL-кода удаляются метаданные, переменным и функциям присваиваются бессмысленные имена, строковые ресурсы перемешиваются с фрагментами управляемого (managed) и неуправляемого кодов и т. п. Preemptive Solution Dotfuscator -- одна из лучших утилит такого рода, а ее применение перед распространением программы должно стать правилом хорошего тона для любого разработчика.

.NET Framework 1.1

Новая версия программной платформы Microsoft отличается расширенным набором классов, большинство из которых расположены в следующих пространствах имен: System, System.Data, System.Enterpriseservices, System.Windows.Forms, System.Web и System.XML.

System.Data пополнилось рядом классов для низкоуровневого доступа к данным через драйверы ODBC и непосредственного обмена с серверами Oracle. В System.Windows.Forms обновился класс, реализующий вызов диалога FolderBrowser, предложен новый простой способ создавать окна произвольной формы с помощью растровой маски. Целая серия классов отвечает за появившуюся в Framework 1.1 поддержку протокола IPv6 и новых функций Windows Server 2003.

В процессе инсталляции .NET Framework 1.1 предусмотрена возможность сохранения предыдущих версий библиотек классов -- это означает, что приложения, ориентированные на .NET Framework 1.0, будут использовать старые классы и лишь при их отсутствии -- новые. Действие этого механизма не распространяется на страницы ASP .NET -- здесь всегда подставляется самый последний набор.

.NET Compact Framework

Облегченная версия среды для установки на мобильные платформы -- устройства Win CE и Pocket PC, смартфоны и т. п. С ее помощью обеспечивается единая программная модель Microsoft и существенно упрощается создание унифицированных бизнес-приложений. JIT-компилятор из Compact Framework выполняет все функции своего "старшего брата" -- имеет эффективные средства управления памятью ("сборка мусора") и отладки кода, поддерживает мультиязычные программы. Ограничения среды проявляются в виде отсутствия некоторых системных классов и графических компонентов, например Group Box, DataGrid, RichTextBox и Print Controls.


К сожалению, в состав VS .NET 2003 входит лишь Community-версия программы, за регистрацию до версии Professional придется выложить $1495, зато она имеет более совершенные алгоритмы сокрытия и дополнительные возможности, например функцию оптимизации и уменьшения размера MSIL-программ.

Безусловно, есть и недостатки. Тем, кто использует VS преимущественно для создания Web-приложений на основе ASP .NET, наверняка известны проблемы, присущие интегрированной среде от Microsoft. Например, при редактировании кода, встроенного прямо в html-страницу (без привлечения технологии Code Behind), недоступно средство Intellisense, в интерактивном конструкторе Web-форм не отображаются пользовательские элементы интерфейса. При малейшем отклонении от стандартного применения компонентов перестает открываться окно Design, и тогда получить доступ к невизуальным объектам страницы (например, классам доступа к базе данных) попросту невозможно. И этот список далеко не полный. Увы, но ни один из указанных дефектов так и не был устранен создателями пакета.

Однако даже несмотря на это, Visual Studio по-прежнему остается лучшим инструментом для быстрой разработки приложений под платформу .NET. И хотя никаких революционных решений его очередное обновление не содержит, все же тем, кто собирается серьезно заниматься написанием программ, рассчитанных на стремительно приобретающую популярность технологию, стоит взять на вооружение VS .NET 2003.

Visual Studio .NET 2003 поставляется в трех различных наборах -- Professional, Enterprise Developer и Enterprise Architect. Они отличаются количеством дополнительных инструментов (все перечисленные в данном обзоре средства являются базовыми и присутствуют в каждом из вариантов) и, конечно, ценой. Расширенную информацию о них, а также о других модернизациях, не попавших в обзор, можно получить по адресу msdn.microsoft.com/vstudio/.

C#: перемены грядут

В следующей версии Visual Studio программные архитекторы Microsoft обещают обогатить синтаксис C# несколькими новыми конструкциями. Среди них наиболее примечательны четыре.

Generics. Подобное средство уже давно знакомо опытным программистам на VC++ и, по сути, представляет собой аналог шаблона функции, когда тип ее параметров становится известен только на этапе компиляции. Generics в C# будут иметь ряд усовершенствований, например механизм constraints -- в описании функции с неопределенными типами указывается, что тип (класс) параметра должен реализовывать определенный интерфейс. Таким образом, можно создавать код, использующий вызовы методов параметров еще не определенного типа.

Iterators. Идею простой реализации функций-итераторов разработчики Microsoft, скорее всего, подсмотрели в спецификациях таких языков, как CLU или Icon. Эти методы чаще всего присутствуют в классах, призванных хранить и структурировать большие массивы данных, которые затем необходимо циклически обрабатывать (например, с помощью оператора foreach). Механизм создания итераторов, построенный на объектах типа Enumerator, существовал и раньше, но его применение было нетривиальной процедурой. В новой версии C# достаточно задекларировать в теле класса метод foreach() и реализовать в нем перебор данных.

Анонимные методы. Авторы C# намерены включить механизм поддержки безымянных блоков кода. Такое средство удобно в том случае, когда предполагается создание и присвоение объектов-делегатов, например при описании обработчика пользовательских событий -- не нужно декларировать отдельную функцию, весь код можно поместить прямо в нужное место.

Классы с разделяемым описанием (Partial Types). Также в описание класса планируется ввести новую директиву partial, которая указывает компилятору, что декларация и реализация его методов и полей находятся в разных файлах.