При всех достоинствах VB .Net, VB 6 пока остается более зрелым и широко известным
Недавно добавленные в Visual Basic 6, ориентированные на Web, функции DHTML или WebClasses нельзя использовать в его новой версии Visual Basic .Net

В течение многих лет корпорация Microsoft совершенствует Visual Basic (VB) с тем, чтобы его функции соответствовали возможностям Windows. Но даже при том, что VB обретает новые функции, программное обеспечение для Windows становится проще создавать с каждой новой версией интегрированной среды разработки (IDE). В случае с VB .Net корпорация решилась на рискованный шаг: изменила состав языка таким образом, чтобы он был совместим с .Net Common Language Runtime. По иронии судьбы, сделав VB .Net более солидным с точки зрения структуры и его объектно-ориентированных возможностей, Microsoft вынудила отказаться от него наиболее лояльных его разработчиков.

Корпорация стремится пробудить интерес разработчиков к .Net к моменту грандиозного дебюта ОС .Net Server, запланированному на конец года. К примеру, последнее квартальное обновление MSDN (Microsoft Developers Network) Library — набора интерактивной документации для программистов Windows — больше не поддерживает поиск и просмотр с помощью Visual Studio 6. Создатели ориентированных на VB форумов, учебных курсов, книг и конференций теперь направили все свои усилия на .Net. Каждый, кто занимается VB, теперь вынужден изучать VB .Net.

Исторически сложилось так, что основополагающие навыки программирования, требующие знания таких языков, как Си и Java, теперь необязательны для тех, кто начинает изучать VB. Аскетичный синтаксис VB позволяет описывать бизнес-процессы и логику, не используя языки программирования. Огромные, сложные службы, такие как COM+ и 32-разрядные Windows API, инкапсулируются в язык и в компоненты, которые можно просто добавлять в свой проект. Больше нет необходимости разбираться, как сообщения размещаются в очередях или как работают ниспадающие меню, чтобы их можно было использовать в VB.

Некоторые разработчики с большим одобрением относятся к изменениям, внесенным Microsoft в VB .Net. Специалисты по объектно-ориентированному проектированию рассматривают VB .Net как долгожданную революцию в пользующемся дурной славой, неряшливом языке.

Предшественник VB .Net, VB 6, представляет собой некую компиляцию языков, создававшуюся как интерпретатор, поэтому в нем простительны некоторые небрежности, неприемлемые в других языках. Разработчики могут использовать переменную без первоначального объявления ее типа данных. Неявное преобразование типов данных в VB «втихомолку» приводит несовместимые по типам переменные к одному и тому же типу данных таким образом, чтобы данная операция (например, сложение строки и числа) не породило ошибку.

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

Допустимая инертность

Многие программисты, использующие VB, выбирают этот язык исключительно для дела — чтобы выполнить определенную работу, а не потому, что им нравится процесс написания программ. Это особый класс корпоративных разработчиков. Они выбирают минимальные технические навыки, требуемые для каждого проекта. Чтобы перейти на VB .Net, им придется сначала изучить структуры данных, принцип объектно-ориентированного проектирования и познакомиться с другими базовыми концепциями, которые им пока не известны, поскольку таких знаний работа с VB не требовала. Разработчики этой категории, скорее всего, будут по-прежнему пользоваться VB 6, потому что VB .Net устанавливает планку на высоту, большую, чем им хочется преодолевать.

Еще одна группа, которая без энтузиазма воспримет VB .Net, — это основная масса программистов. Они обретаются на форумах, участвуют во всех конференциях, им нравится писать интеллектуальное программное обеспечение и обмениваться фрагментами кода друг с другом. В VB .Net они видят довольно ограниченный язык и среду разработки, которая не в состоянии поддерживать то, чем они занимаются долгие годы. Здесь нельзя просто нарисовать линии или внешний вид форм, а возможности проектирования форм в целом весьма ограничены по сравнению с теми, которые предлагает VB 6.

В VB .Net нельзя использовать DHTML или WebClasses, интересные, ориентированные на Web функции, которые недавно были добавлены в VB. Нельзя определить контейнер OLE или присоединить страницы свойств к настраиваемым объектам. Отладчик Visual Studio .Net не позволит редактировать приложения в момент их выполнения, что делается с помощью VB 6. Эти разработчики недовольны медлительностью Visual Studio .Net IDE и падением производительности их приложений VB 6, при использовании Migration Wizard для преобразования их в VB .Net.

Луч надежды

Версии Visual C++ и JScript для .Net позволяют разработчикам объединять старое с новым. Разработчики могут по-прежнему генерировать неуправляемые (предназначенные не для .Net) исполняемые модули с помощью Visual C++; компилятор JScript .Net смягчит свои новые правила .Net таким образом, чтобы программисты могли выполнять имеющиеся программы JScript с минимальными изменениями.

Тем не менее переход на VB .Net гладким не будет. Конструкции, которые разработчик всегда считал само собой разумеющимися, оказываются некорректными или не поддерживаются; известные задачи, однажды уже встроенные в язык, приходится оформлять странным, похожим на Java образом. Программы, которые разработчики VB привыкли писать не задумываясь, теперь требуют дополнительного времени на проектирование и изучение документации .Net Framework. К чести своей, руководство Microsoft прекрасно отдает себе отчет в том, что вызовет недовольство разработчиков VB. На конкурсе по корпоративному программированию, приуроченном к последней конференции реселлеров Fusion, было представлено множество работ, написанных на VB 6. Сотрудники Microsoft при обсуждении проблем в Intermet-форумах сменили свои высказывания с «Вы не можете сделать это в VB .Net — и зачем вам это вообще нужно?» на «Я передам ваши замечания нашим разработчикам». Разработчики VB рассчитывают на то, что некоторые функции, изъятые из первой версии VB .Net, будут восстановлены в последующих вариантах. До тех пор компании, которые используют в своей работе VB, намерены придерживаться VB 6.

Переход через бездну

В ближайшие годы разработчики Windows будут вынуждены метаться между управляемым кодом, который работает в .Net Common Language Runtime, и неуправляемым кодом 32-разрядной Windows и COM, который в этой среде не выполняется. Даже если бы приложения VB и C++ волшебным образом были преобразованы в VB .Net и Managed Extensions for C++, остались бы тысячи неуправляемых библиотек и компонентов, с которыми пришлось бы мучиться. Последнее исследование, проведенное ComponentSource.com, к примеру, показало, что компонентов ActiveX существует 670, а компонентов .Net — всего 64, причем далеко не все из них относятся к самым популярным.

В Visual Basic .Net нельзя просто нарисовать линии или внешний вид форм, а возможности проектирования форм в целом весьма ограниченны по сравнению с теми, которые предлагает Visual Basic 6

Что касается производителей компонентов, основным препятствием является не преобразование от C++ к C#. Новое поколение компонентов .Net необходимо переделать таким образом, чтобы они могли использовать возможности .Net Framework, в частности WinForms и ADO.Net. В то же время разработчики будут по-прежнему использовать унаследованные компоненты и библиотеки, которые способны «залатать дыры» в еще только развивающейся оболочке.

Специалисты Microsoft осознают, что переход на .Net потребует продолжительного времени, и стремятся по возможности облегчить программирование в смешанном режиме. Между управляемым и неуправляемым мирами существуют две основные связующие нити. COM Interop позволяет использовать унаследованное программное обеспечение COM из языков .Net (VB .Net, C#) и наоборот. Точно так же P/Invoke (Platform Invoke) разрешает использовать унаследованный код Win32 из языков .Net.

Все это означает, что в ближайшее время жизнь разработчиков не станет проще. Все старые навыки работы с COM и Win32 по-прежнему необходимы, а теперь требуются и навыки работы с .Net. Более того, при объединении этих двух технологий возникают особые сложности.

Что касается производителей инструментальных средств, то для них эти сложности открывают новые перспективы. Одним из производителей, вышедших на этот рынок, стала компания Compuware. Ее пакет инструментальных средств анализа и отладки DevPartner Studio (ранее называвшийся серией NuMega) в новой версии будет предоставлен разработчикам в расчете на длительный этап перехода к VB .Net. Одна из основных возможностей пакета — мониторинг вызовов между управляемыми и неуправляемыми компонентами. Такой мониторинг требует значительных вычислительных ресурсов. Понимая это, специалисты Microsoft рекомендуют разработчикам отдавать предпочтение архитектурам, поддерживающим «короткие» передачи, а не постоянный обмен. Но Visual Studio .Net такой поддержки не предлагает. Монитор Compuware, отслеживающий «пересечение границы» и составляющий список вызванных функций, как подчеркнул Питер Вархол, менеджер по продуктам DevPartner компании Compuware, «...позволит принимать важные архитектурные решения, в частности поддерживать ли режим краткосрочного обмена, или лучше оформить все как управляемый код, или даже переписать как управляемый код».

Несмотря на то что сама по себе платформа .Net имеет современную, надежную архитектуру, обрабатывающую исключения, все еще остается задача, как ввести неуправляемые исключения компонентов COM в управляемый код. Новый анализатор Compuware будет «отлавливать» эти исключения на границе и выводить на экран окно с предупреждением. Точно так же, несмотря на то, что сама по себе .Net будет использовать компоненты COM в обычном порядке, эти компоненты могут вызывать другие, которые затем могут некорректно освобождать затребованные ресурсы. Анализатор также позволит обнаружить эти трудноуловимые ошибки.

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