"Если в лагере VB переполох, то Delphi это только на пользу!"
Майкл Суинделл (Michael Swindell), директор Borland по инструментам RAD
Введение
Не так давно Microsoft в очередной раз заставила вздрогнуть программистов во всем мире, объявив о начале новой эры развития языков программирования. .NET Framework - вот то, что мы еще долго будем изучать, то, что станет фундаментом для наших новых программ, то, что будет волновать умы лучших программистов в следующие годы. Учитывая это, Microsoft решила пойти на вторую в своей истории авантюру после создания Visual Basic и представила новый язык программирования VB.NET. Что же такое VB.NET? Что будет с огромной армией программистов, которые писали свои программы на языке Visual Basic, выдержавшем шесть версий? Вот об этом мы и поговорим в этой статье.
История создания Visual Basic
Язык программирования Basic был создан в 1964 году двумя профессорами из Dartmouth College - Джоном Кенеми и Томасом Куртцом для обучения студентов навыкам программирования. Язык получился настолько простым и понятным, что через некоторое время его начали применять и в других учебных заведениях. В 1975 году, с приходом первых микрокомпьютеров, эстафету Basic приняли Билл Гейтс и Пол Аллен, основатели Microsoft. Именно они создали новую версию Basic для первых компьютеров "Альтаир" (MITS Altairs), способную работать в 4КБ оперативной памяти. Со временем именно эта версия и превратилась в один из самых популярных языков программирования в мире.
На пути к вершине славы у Basic было множество трудностей, которые он всегда с честью преодолевал, и когда появились первые персональные компьютеры IBM PC, именно он стал стандартом в программировании, но уже в виде GW-Basic. Потом был Turbo Basic, QuickBasic, Basic PDS, но всегда при разработке новой версии языка сохранялась совместимость с прежними версиями и программа, написанная для практически первого Basic, вполне (с незначительными изменениями) могла бы работать и в последующих версиях этого языка.
Но наступили новые времена, и в начале 90-х появляется операционная система Microsoft Windows с новым графическим интерфейсом пользователя (GUI). Жизнь программистов превратилась в ад. Чтобы создать простую программу, приходилось писать несколько страниц кода: создавать меню и окна, менять шрифты, очищать память, "рисовать" кнопки и т.д. Однако преимущества нового интерфейса были настолько неоспоримы, что уже третья версия этой операционной системы стала фактическим стандартом для персонального компьютера.
В это время в недрах Microsoft велось несколько параллельных проектов по созданию нового языка программирования для Windows.
И вот в мае 1991 года мир увидел один из таких проектов - новый язык, названный Visual Basic. Система программирования, созданная разработчиками Visual Basic, позволяла "отстраниться" от сложнейшей внутренней структуры Windows и создавать программы из "кубиков", как в детском конструкторе. Меню, окна, списки, кнопки, поля ввода текста и другие элементы интерфейса Windows добавлялись в программу с помощью простейших операций drag&drop. Свою первую программу VB-программисты создавали уже через несколько минут после начала изучения этого языка! Более того, Visual Basic позволял разработчикам создавать новые объекты-"кубики", которые также могли использоваться в программах наравне со стандартными.
И хотя многие С-программисты тихо посмеивались над попытками Microsoft сделать простой и понятный инструмент разработки Windows-программ, Visual Basic начал свое победное шествие по миру, и ничто не могло остановить этот процесс. Последние барьеры упали в 1994 году с выпуском Visual Basic for Applications. Именно в это время, после включения VBA в состав Microsoft Office, Basic начинает превращаться в один из основных стандартов программирования для
Windows.
Потом были новые версии, которые неизменно улучшали и расширяли язык, принося с собой новые возможности: OLE, DAO, JET, 32-битная архитектура и т.д. Последние версии языка были настолько удачными, что с их помощью можно было создавать приложения практически любой сложности: поддержка callback-функций, настоящий компилятор
1, превосходные средства отладки, поддержка библиотеки
DirectX 2 - все это создавало впечатление непоколебимости позиций Visual Basic на рынке малых программных продуктов.
Но настал 2000 год. Именно в этом году Microsoft впервые объявила о планах по созданию программной платформы .NET, которая, в конечном счете, и привела к кончине Visual Basic, а с ним и духа Basic, созданного 10 лет назад.
Дух Basic - событийно-управляемое программирование
Когда создавался Visual Basic, его разработчики выбрали схему работы программ, основанную на событиях
3. Именно эта схема позволяет не знать о том, что происходит за рамками вашей программы, и как она взаимодействует с операционной системой. Именно эта схема и стала итоге проводником к всеобщей популярности
VB.
Основа этой системы - отсутствие взаимодействия программиста непосредственно с операционной системой. Готовые кубики-"компоненты" Visual Basic генерируют события в ответ на действия пользователя. Эта простая и понятная система привела к тому, что практически любой пользователь мог за считанные часы ее изучить и начать создавать прикладные программы. Но, увы, это был не объектно-ориентированный язык, и уже тогда было понятно, что грядет время перемен.
.NET Framework
13 февраля 2002 года, уверен, войдет в историю современного программирования как день создания новой технологии программирования, день переворота в мире разработки Windows-приложений. Именно в этот день на конференции VSLive в Сан-Франциско компания Microsoft представила платформу .NET Framework и новую версию Visual
Studio.
Важность произошедшего нельзя недооценивать. Visual Studio.NET - это не просто очередная версия популярного пакета разработки приложений для Windows. "Visual Studio.NET и .NET Framework относятся к числу важнейших продуктов, когда-либо выпускавшихся Microsoft, - заявил Гейтс в своем выступлении, - это самые развитые средства разработки за всю историю существования
Microsoft".
По своей сути .NET Framework - это среда выполнения для приложений нового поколения, которая может быть установлена в любые версии Windows, начиная с Windows 98 (Windows 95 официально больше не поддерживается), и обеспечивает виртуальную систему исполнения (Virtual Execution System) для приложений, созданных, например, с помощью Visual Studio.NET. Особенность приложений для .NET Framework заключается в том, что это не инструкции процессоров Intel, а инструкции для виртуальной машины на языке Microsoft Intermediate Language
(MSIL).
Но это мы уже, кажется, проходили и в Visual Basic, и в виртуальной машине Java, поэтому .NET Framework вместо интерпретатора MSIL содержит его JIT-компилятор. Интересно, что JIT-компилятор не выполняет компиляцию всего MSIL-кода при первом обращении к программе. Вместо этого каждый метод компилируется при первом обращении к нему, и, таким образом, неиспользуемый код не компилируется. Откомпилированный код хранится в памяти, и последующие обращения к программе выполняют уже откомпилированный код. Поэтому, при первом запуске .NET-программы заметна некоторая задержка, достигающая 3-4 секунд; это, пожалуй, один из наиболее существенных недостатков платформы .NET. Однако Microsoft также предоставляет специальный компилятор CLR Native Image Generator (NGEN), который выполняет компиляцию всего MSIL-кода и сохраняет результат на диске.
Формат исполняемых файлов .NET Framework расширяет спецификацию PE (Portable Executable), так что на новой платформе будут уже другие exe- и dll-файлы. Microsoft также обещает, что среда разработки Visual Studio.NET всегда будет открыта для сторонних производителей инструментальных средств с помощью технологии Open Tools
Platform 4.
Если вы уже видели .NET Framework, то наверняка заметили, что это очень обширная библиотека, с помощью которой можно создавать серьезные приложения. Структура .NET Framework понятна и проста и, самое главное, это действительно полностью объектно-ориентированная библиотека. .NET Framework легка в изучении, самое главное - понять ее принципы и структуру. По замыслу Microsoft, через несколько лет архитектура .NET ляжет в основу большинства программ для Windows, и в конечном счете должна заменить собой интерфейс API, который, вероятно, уйдет в прошлое.
Поскольку .NET Framework - полностью объектно-ориентированная платформа, а Visual Basic никогда не был таковым, то переход на новое "мышление" потребовал кардинальных изменений языка, которые, в конечном итоге, привели к отказу от глобальной совместимости
5 с прежними его версиями. Эти изменения настолько существенны, что перед нами предстает совершенно новый язык программирования Visual Basic
.NET.
Изменения в Visual Basic.NET
Среда разработки. Обзор изменений Basic начнем, пожалуй, со среды разработки. Если честно, то мне больше нравилась IDE 6-й версии Visual Studio, но это, конечно, субъективная точка зрения. Во-первых, сразу хочу обрадовать всех поклонников унификации и стандартизации, так как все языки программирования из Visual Studio.NET, имеют одну общую среду разработки
6. Эта среда, в принципе, имеет неплохие средства отладки программ, хотя и непривычные для VB-программистов.
Основная трудность - в том, что теперь проекты компилируются сразу при их запуске, а не специальной командой, как раньше, и для отладки запускается созданный exe-файл. Конечно, средства отладки позволяют свободно переключаться между кодом и непосредственно программой, но время, требуемое для запуска проекта, неприлично большое для VB-программистов, привыкших к мгновенному запуску. Но это все ерунда по сравнению с основными изменениями, произошедшими в синтаксисе языка и его концепции.
Типы данных и переменные. Пожалуй, со времен перехода на Visual Basic не было таких глобальных изменений в типах данных и работе переменных. VB.NET больше не поддерживает ключевое слово Deftype в проектах, нет типов данных Variant и Currency, появились новые типы Char, Short и Object (не смейтесь, это действительно новый тип). Более того, тип данных Integer теперь 4-х байтный (как был Long), а тип данных Long имеет размер 8 байт. На практике это означает, что если раньше при объявлении функций API вы использовали тип Long, то теперь нужно использовать Integer. Зачем это сделано? Существуют планы (уже и проекты) по созданию 64-х битной операционной системы (только не говорите, что вы ничего об этом не слышали), так вот там очень даже пригодится новый Long. Аналогом старого Integer становится новый тип данных Short, а вместо Variant нам предлагают использовать тип Object, который теперь полностью перенимает свойства старого Variant. И последнее, в новом языке также отсутствует ключевое слово Any, которое использовалось при объявлении типов данных и предназначалось для отключения контроля типов. Честно говоря, я понимаю Microsoft и поддерживаю эти изменения, которые в будущем помогут нам при переходе к 64-х битной архитектуре.
Кроме уже вышеописанных различий, в VB.NET появилось несколько других незначительных изменений. Например, если раньше при операциях с данными типа Variant результат был больше, чем мог содержать исходный тип данных, то результат преобразовывался к Double; теперь при работе с похожим типом Object такой результат преобразуется к 64-bit
Long.
Другие существенные изменения при работе с данными связаны с изменениями их объявления. Если раньше вы, объявляя переменную так:
получали I - Variant, а J - Integer, то теперь обе переменные будут иметь тип данных Integer. Ну и, конечно, если вы не указываете тип переменной, то она будет иметь тип данных Object. Более того, теперь при объявлении строки вы не можете указать ее длину, т.е. все строки в VB.NET имеют переменную длину. В принципе, к этому все и шло, так как даже в старом VB все строковые функции работали только со строками переменной длины и VB, незаметно для нас, сам производил соответствующие преобразования, естественно жертвуя при этом скоростью.
Ну и на закуску, вот еще несколько существенных различий в объявлении и работе переменных:
-
переменные в функции и процедуры по-умолчанию передаются по значению (ByVal), а не по ссылке (ByRef), как раньше;
-
изменена область видимости переменных при объявлении по тексту программы. Если раньше, объявив переменную в теле цикла For, вы могли использовать ее и дальше, то теперь эта переменная будет недоступна вне этого цикла;
-
индексация массивов изменена и теперь начинается только с 0, объявление Dim(10) инициализирует массив с 11 элементами
7;
-
при объявлении переменной можно указать не только Public, Private, Static и Friend, но и Protected, Protected Friend, а в качестве дополнительного параметра - Shared, Shadows и ReadOnly (подробности читайте в документации);
-
отсутствие функции IsMissing вынуждает при объявлении необязательных (Optional) параметров сразу указывать их значение по умолчанию... а как же UDT!? Кстати, теперь пользовательский тип данных (UDT) объявляется с помощью конструкции Structure struct_name ... End Structure (раньше такие типы объявлялись с помощью Type type_name ... End
Type).
Функции, операторы - новая стратегия.
Взглянув на список функций и операторов нового языка, можно сделать один приятный вывод: они практически те же. Т.е. более 90% средств языка VB 6 были перенесены в новую версию. Однако отличия все же есть. Например, вы больше не найдете функций, заканчивающихся на $ и B, которые возвращали соответственно строковые и двоичные данные. Нет функций Date, Time. Вы также не сможете больше использовать операторы Circle, Line и Pset, как нет и On ... GoSub, On ... GoTo, Initialize, отменены за ненадобностью IsEmpty, Let, Set и семейство инструкций Option и Property [Get][Let][Set]. Изменений много, но на первый взгляд это все равно Basic с его операторами, функциями и инструкциями, так что если вы хорошо знаете синтаксис VB 6, считайте, что и синтаксис VB.NET вам также хорошо знаком, и незначительные изменения в нем никак не портят общее впечатление.
Формы? Нет, Windows Forms! Visual Basic.NET использует совершенно новые формы - Windows Forms. Windows Forms практически совместимы с формами Visual Basic 6, однако имеются некоторые ключевые различия:
-
Windows Forms не поддерживают элемент управления OLE container
control;
-
Отсутствуют элементы управления Shape и
Line;
-
В Windows Forms имеется два элемента управления, представляющих меню - MainMenu и
ContextMenu;
-
Windows Forms не поддерживает динамический обмен данными
(DDE);
-
Нет метода Form.PrintForm;
-
В иерархии .NET существует улучшенный объект Clipboard (System.WinForms.Clipboard), это предполагает больше функциональных возможностей и большее количество поддерживаемых форматов, чем объект Clipboard в Visual Basic 6.0;
-
В Windows Forms нет свойства Name у форм и контролов, перебор всех контролов (форм) для поиска элемента с нужным именем работать не будет;
-
Теперь нужно использовать pixel-и вместо twip-ов;
-
Windows Forms поддерживает только шрифты truetype и
opentype.
Как видите, различия очень существенны, и я привел только основные из них. Вообще же, Windows Forms дает гораздо больше возможностей для программиста. Например, раньше простейшая операция по добавлению значка в systray требовала огромных усилий, теперь это такой же пустяк, как и для С++ программиста, а может быть это даже на VB.NET сделать и легче. Прогнозируемое расширение возможностей .NET делает Windows Forms очень привлекательными. Хотя и выбора нам тоже не предоставили.
Я не хочу делать подробный обзор всех изменений, введенных в Windows Forms, да это и не нужно, однако, хочу вас сразу предупредить, что автоматическое преобразование старых форм (Form) не пройдет.
Преобразование проектов VB 6
Microsoft, понимая что процесс перехода к VB.NET будет сложным, создала специальный мастер, облегчающий преобразование проектов. Я не буду описывать, как происходит процесс конвертации проекта, так как по этой теме изданы многотомные книги, написано множество статей и, наверняка, вы уже в курсе событий. Хочу только сказать, что на практике качественно преобразовать можно только классы, т.е. только непосредственно код VB. Говоря другими словами, вы не сможете с помощью мастера преобразовать 90% своих проектов, содержащих формы (Form). Нет, конечно, если вы написали приложение с одной формой, двумя кнопками на ней и пятью строками кода, то мастер преобразования с большим удовольствием, "похрюкав" минут пять диском, выдаст вам новый проект, который скорее всего, будет работоспособен, но есть ли у вас такие программы? Кстати, предупреждаю, что результат такого преобразования, скорее всего, приведет вас в состояние глубокого шока, так что если вы хотели таким образом попутно изучить VB.NET, то хочу вас огорчить - этого не произойдет, учиться придется по книгам и читая документацию. Все, что выживает при подобной конвертации, так это классы.
Почему же мастер так плохо работает? Дело в том, что преобразование невозможно сделать по причине глобального изменения структуры форм (Form), точнее говоря, переносу их в Windows Forms из библиотеки .NET Framework. Таким образом, если у вас есть программы, написанные на VB 6, то качественный перенос их в VB.NET, с помощью мастера невозможен. Однако, вы можете сделать это вручную, и тогда ваша программа сможет использовать всю мощь платформы .NET
Framework.
Заключение
Microsoft в курсе споров, возникших вокруг VB.NET в сообществе разработчиков на Visual Basic. Стараясь успокоить пользователей Visual Basic 6.0, озабоченных тем, что с выпуском Visual Studio их привычной среде разработки пришел конец, Microsoft, совсем недавно, объявила о намерении поддерживать VB 6.0 до 2008 года. Однако после 2005 года эта поддержка будет ограниченной, и VB 6.0 никогда не станет инструментом для работы в 64-битных средах.
"В VB.NET мы кое-что изменили, так что это, скорее, разные языки, - говорит менеджер Visual Studio Роберт Грин (Robert Green), - Но мы уверены, что различия в синтаксисе вполне преодолимы". По его словам, при переходе от вычислительной модели, ориентированной на ПК, к веб-центрической модели .NET Microsoft оказалась перед сложным выбором. Этот выбор уже сделан, и нам остается только принять его. Однако Грин также отмечает, что разработчики должны сами решать, стоит ли пытаться перенести существующие приложения Visual Basic на VB.NET. "Можно ли перенести приложение, написанное на VB 6.0? - спрашивает Грин. - Если оно работает, я бы не стал".
Что я могу сказать? Лично я бы хотел, чтобы VB не менялся, а расширялся. Microsoft, на мой взгляд, сильно погорячилась, качнув VB в сторону ООП: полиморфизм, наследование и инкапсуляция, конечно хорошо, но у Visual Basic была своя концепция, которая была не так уж и плоха, как кажется. Visual Basic изначально был самым простым языком программирования, единственным, пожалуй, недостатком которого была более низкая скорость выполнения программ, чем в настоящих компилируемых языках, например
C++.
Мне всегда казалось, что у Microsoft насчет языков программирования есть целая концепция, по которой во власть Visual Basic отдавались создание пользовательских интерфейсов и простых программ создания программ и легкость их отладки, а для C++ - системное программирование, графика, а также все, где недопустимы компромиссы по скорости выполнения. Но я был неправ... Я верил, что если глава империи Microsoft Билл Гейтс (Bill Gates) называл Basic своим любимым языком программирования, то нас не тронут, они не посмеют... но я ошибался... ах как бы я хотел, чтобы все это был сон... страшный сон.
Но время идет, и поезд под названием .NET отправился в путь и он уже подъезжает к вашей станции. Но еще есть время запрыгнуть в вагон VB.Net - дверь открыта, билеты никто не требует и проводник еще пока протянет вам руку,... спешите, поезд ждать не будет и он уже в пути.
1 Хотя в Visual Basic, начиная с версии 5, имеется компилятор кода, программы, написанные на нем, не являются самодостаточными и требуют для выполнения специальную runtime-библиотеку.
2 DirectX, начиная с версии 6, имеет в своем составе специальную объектную библиотеку, позволяющую Visual Basic без проблем работать с мультимедиа. Кроме того, некоторые функции DirectX были специально оптимизированы для использования в Visual
Basic.
3 Подробнее о событиях и Visual Basic читайте в статье "Сообщения Windows в Visual Basic" в этом номере "Программиста".
4 Уже сейчас многие компании приступили к интеграции своих инструментов разработки в Visual Studio.NET; это Crystal Decisions, Rational Software и многие другие. Более того, Microsoft проводит специальную программу Visual Studio.NET Integration Program по привлечению новых разработчиков.
5 Не все так плохо, как утверждают некоторые эксперты. На самом деле, вы можете продолжать использовать свои ActiveX-компоненты в VB.NET, кроме того, новые версии этих компонентов, написанные уже на VB.NET, будут полностью совместимы с прежними их версиями, более того, классы, написанные на VB 6, практически без изменений могут быть перенесены в
VB.NET.
6 Специально для того, чтобы сократить время адаптации к новой среде программирования, ее разработчики предусмотрели возможность использования "старых" клавиатурных сокращений из VB 6, чего я бы вам не рекомендовал использовать, ее могут в следующей версии и убрать.
7 Первая beta версия VB.NET в данном случае создавала массив с 10 элементами, имеющими индексы от 0 до 9, что приводило в состояние легкого шока не только "VB ветеранов", но и вообще всех здравомыслящих программистов, но, к счастью, здравый смысл взял верх и все встало на свои места.
Статья опубликована в журнале "Программист"
№5 за 2002 год.