Главная страница Visual 2000 · Общий список статей
Публикации в журнале BYTE/Россия · Публикации на тему MS .NET

А ты готов к Visual Basic.NET?
Советы тем, кто собирается работать с новой версией VB
Часть 1 (начало)

Андрей Колесов

© Андрей Колесов, 2001
Авторский вариант. Статья была опубликована c незначительной литературной правкой в журнале BYTE/Россия N 3/2001.
Внимание! Статья отражает знание автором предмета на момент ее публикации! Использовалась версия VB.NET beta 1!

В качестве введения в тему советую прочитать: "В ожидании Visual Studio .NET" и "Реализация объектно-ориентированной модели языка в Visual Basic .NET" Продолжение: Часть 2 Часть 3

Всем VB-разработчикам уже давно известно...

Всем VB-разработчикам уже давно известно, что в конце нынешнего года должна появится новая версия Visual Basic, которая должна иметь порядковый номер 7.0, но неожиданно получила имя собственное .NET. Такое изменение обозначения версий представляется весьма символичным — судя по всему, на этот раз произойдет самое решительное изменение этой популярной системы программирования за все 10 лет ее существования (VB 1.0 появился в 1991 году). Так что вполне вероятно, что ее очередная версия через пару лет будет уже называться VB.NET 2.0...

Как мы уже писали ранее, VB-программистов ожидает огромное число новшеств в будущем Visual Basic.NET. Сюрпризов будет много и, боюсь, что не все из них будут восприняты разработчиками с ликованием (см. об этом "В ожидании Visual Studio .NET" и "Реализация объектно-ориентированной модели языка в Visual Basic .NET " ). Один из неприятных "подарков" заключается в том, что впервые за десятилетнюю историю VB нарушается совместимость программного кода "снизу-вверх".

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

Хотелось бы особо подчеркнуть, что речь идет, в основном, об изменениях в синтаксисе языка, а не функциональности системы программирования. Рассмотрение новых функций и средств VB — это тема отдельного разговора.

Важно также отметить, что сейчас речь идет об информации, известной на основе знакомства с VB.NET Beta 1 и материалами Microsoft (т.е. с информацией на начало 2001 года). Мне кажется, что корпорация в настоящее время внимательно изучает реакцию сообщества разработчиков на предлагаемые новшества и к моменту появления окончательной версии могут произойти изменения в составе инноваций (правда, в обе стороны — что-то исчезнет, чтото добавится).

Надо сказать, что VB.NET уже вызвал у мирового сообщества VB-программистов довольно много эмоций, и среди них немало негативных. На эту тему идут многочисленные дискуссии в Интернете. В частности, один из критиков нововведений, Карл Петерсон, создал Web-страницу под красноречивым названием "VB.NOT", где привел "неполный" (!) перечень расхождений (около 80-ти позиций) между VB 6.0 и VB.NET. Во всех этих обсуждениях довольно много эмоций ("VB.NET — это уже не настоящий Basic", "нам не нужны ваши новшества"), но за ними скрывает серьезный прагматичный аспект — надежная миграция с одной версии на другую не будет обеспечена, код существующий приложений придется переписывать.

В свою очередь, Microsoft занимает пока твердую позицию, заявляя о том, что большинство VB-разработчиков одобряет изменения в VB.NET. И объясняет, что корпорация приняла трудное для себя решение по радикальной коррекции VB, понимая необходимость перехода от PC-ориентированной модели вычислений к Web-ориентированной.

Так или иначе, но сейчас мы наблюдаем самое сильное противостояние Basic-программистов с поставщиком инструментария за все десять лет существования VB, причем раньше разработчики требовали нововведений, а сейчас протестуют против них. (Нечто похожее было в начале 90-х годов при переходе от MS Basic for DOS к Visual Basic for Windows. Тогда Microsoft более двух лет была вынуждена поддерживать оба направления, выпустив даже мертворожденный Visual Basic for DOS.) Чем закончится нынешнее противостояние, сказать трудно. Скорее всего, Microsoft будет решительно "гнуть свою линию". Впрочем, стоит вспомнить историю пятилетней давности, когда, увидев негативную реакцию пользователей, корпорация решила продолжить выпуск Visual FoxPro. Его очередная версия должна появиться и в нынешнем году.)

Конечно, можно воспринять будущие изменения как данность ("солнце всходит и заходит") и просто начать готовить к ним. Но мне кажется, что эта тема вполне достойна для обсуждения профессиональными разработчиками. Вряд ли мы повлияем на позицию Microsoft, но для себя очень полезно понять некоторые аспекты физической реализации нововведений. Ведь вполне возможно, что для "смягчения" перехода на новую версию кому-то придется писать собственные VB Migration Tools, причем не только для себя, но и для их коммерческого распространения.

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

  1. Следует признать, что многие изменения синтаксиса в VB.NET очень полезны и их нужно было реализовать раньше (точнее не делать разные несуразности изначально). Это касается совершенно непонятного понятия Null, дубликатных функций типов String и Variant (например, Left$ и Left), дубликатных логических конструкций (Do и White), несоответствия свойств (элемент управления Label использует свойство Caption, которое по смыслу соответствует свойству Text все остальных компонентов) и т.д.

  2. Такое приведение синтаксиса языка в порядок, а также удаления явных рудиментов языка (Gosub/Return в случае VB), — это довольно обычное дело. Но вот как это делается, например, при модификации стандарта Fortran (раз в 7-10 лет): в очередном стандарте сразу публикуется список конструкций, которые, скорее всего, не попадут в следующую версию.

  3. Модификация внутренних механизмов реализации тех или иных функций вполне понятна. Но мне кажется, что это можно было сделать в рамках традиционного синтаксиса Basic, не нарушая преемственности кода (речь тут идет о переносе ряда функций из внутренних библиотек во внешние объекты). Ведь, по большому счету, и раньше основная часть функций VB была реализована через Win API и VB-операторы представляли собой просто удобный и безопасный (что очень важно) способ обращения к средствам Windows.

  4. Изменение смысловой нагрузки одной и той же конструкции представляется непонятным и нарушающим простые принципы совместимости кода.

  5. Самое "забавное" в нововведениях VB.NET — Microsoft отказывается от вольностей в VB-программировании, которые сама же ввела и за которые всегда подвергалась критике со стороны профессионалов. Речь идет о широком использовании универсальных переменных типа Variant и неявного преобразования типов данных, установке свойств объектов по умолчанию и пр. Тем, кто не попался на удочку подобного облегчения жизни (очевидные проблемы, вытекающие из таких "послабление", были всегда и могли не видеть только новички от программирования), будет переходить на VB.NET гораздо проще.

В начало статьи

Перенос проектов из VB 6.0 в VB.NET

Системы VB 6.0 и VB.NET могут быть установлены на одном компьютере и работать одновременно. Точно также как и приложения, разработанные с помощью этих инструментов. Компоненты, написанные с помощью VB.NET, могут взаимодействовать с СОМ-компонентами, созданными более ранними версиями VB. Например, можно подключить элемент управления ActiveX, реализованный в VB 6.0 к Windows-форме VB.NET, VB.NET-приложение может использовать VB 6.0 COM-объект. И, наоборот, — к проекту VB 6.0 можно добавить ссылке на библиотеку VB.NET.

VB.NET не будет напрямую поддерживать совместимость с проектами VB 6.0. Но он содержит Upgrade Wizard (мастер обновления), который по шагам будет выполнять преобразование программы старого формата в новый проект VB.NET (начальный проект остается без изменений). Этот процесс односторонний — проекты VB.NET нельзя открывать в VB 6.0.

В процессе обновления проектов выполняется модернизация синтаксический конструкций и замена VB 6.0 Forms на Windows Forms (Windows Forms имеют иную объектную модель, хотя и похожую во многом на VB 6.0 Forms).

Однако целый ряд возможностей и функций VB 6.0 в VB.NET в принципе не будет поддерживаться (например, некоторые виды проектов и элементов управления). Соответствующую модернизацию придется делать "руками".

В то же время, VB.NET содержит ряд встроенных средств, реализацию которых ранее приходилось выполнять с помощью прикладного кода. Например, это нужно делать для автоматической "привязки" положение кнопки к правому нижнему краю формы при изменении размеров последней. В VB.NET это можно сделать с помощью установки нового свойства Anchor.

В процессе обновления проекта VB 6.0 мастер VB.NET сам находит подобные места "потенциальной" модификации, помечает их комментариями (с текстом, начинающимся словами TO DO) и формирует специальный "отчет обновления". Кроме того, каждый такой фрагмент кода отражается в новом окне Task List (список заданий), с помощью которого разработчик может быстро перемещаться по нужным компонентам проекта.

Примечание. Конечно, было бы крайне желательно, чтобы протоколировались (комментарии, отчет) и все изменения, выполненные автоматически.

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

А теперь перейдем собственно к "Советам".

В начало статьи