Вы находитесь на страницах старой версии сайта.
Переходите на новую версию Interface.Ru

СТАТЬЯ
11.04.03


Basic форева?

© Андрей Драница
© Статья была опубликована на сайте "Компьютерра”

Сразу отмечу некую провокационность подобных обзоров. С одной стороны, рассмотрение Visual Basic .NET напоминает тестирование новенькой автомашины при полном отсутствии конкурентов. С другой - сравнение нескольких (хотя бы двух) продуктов чревато религиозными войнами, место которым, скорее, в онлайновых форумах. К тому же ближайший конкурент - Delphi - уж больно популярен на просторах СНГовщины, так что тема «VB.NET против Delphi» вызовет слишком жаркие споры. А посему я попытаюсь ограничиться констатацией фактов, перемежая ее своими субъективными оценками.

Другой язык

За время погружения в VB.NET я испытал два противоречивых чувства - разочарование и удовлетворение. Начнем с разочарования. Вооружившись томами документации и справочников и засев за новинку, я обнаружил совершенно другой язык. То, о чем так много говорили, все же произошло: старый язык разнесен в пух и прах, а пепел его развеян по ветру. Что представлял собой VB до седьмой версии? Можно было сравнить его с чем-то вроде мощного калькулятора. Производительностью и широтой возможностей он, разумеется, уступал Delphi и VC++, как уступает самый продвинутый калькулятор самой примитивной персоналке. Да и цели обогнать их не ставилось - VB позиционировался как легкий в освоении и работе инструмент программирования простейших задач. Бейсик был чрезвычайным простым языком, так что примитивные приложения, даже по работе с базами данных, можно было сделать буквально не касаясь клавиатуры, одной лишь мышкой. Программа могла состоять из пары строк - никакой предварительной подготовки, код ложился так, как «шла мысль». В этом-то и заключалась сила VB: по скорости создания приложений он был абсолютным лидером. К сожалению, VB.NET в этом смысле переметнулся в стан противника, он теперь гораздо ближе к VC, нежели к старому доброму VB.

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

Более того, объектная модель была расширена таким образом, что в некоторых аспектах VB.NET стал даже «объектнее» C++. Например, в нем есть множество функций для работы со строками, и даже с обычной строкой можно работать как с объектом:

Dim str As String =

“hello world”, st As String

st = Str.Substring(0, 5)

Debug.WriteLine(st)

Ни в С++, ни в Delphi подобные фокусы не пройдут (впрочем, нужны ли такие выкрутасы - тоже еще вопрос).

Почти всё, за что критиковали VB, устранено. Появились конструкции для работы с исключениями, статические свойства, поля и методы, запрещение наследования, перегрузка (overload) и переопределение (overriding) методов, абстрактные классы, расширенные интерфейсы, указатели на функции или методы (delegate), весьма полезные механизмы работы с регулярными выражениями. Появились новые классы: например, FileSystemWatcher позволяет осуществлять мониторинг файловой системы - задача, решение которой ранее было доступно лишь специалистам, или класс Thread, позволяющий манипулировать потоками.

Серьезным изменениям подверглись и графические библиотеки. Если в VB 6 были доступны лишь базовые примитивы, то VB.NET предоставляет уникальные инструменты. Помимо банальных графических примитивов, которые есть в арсенале всех RAD, VB.NET предоставляет ряд высокоуровневых функций: кривые Безье, сплайны, графические пути, сложная градиентная заливка, буферизация отображения, аффинные преобразования. Все это хозяйство обрамлено в весьма привлекательную оболочку, так что, например, создать форму в виде текста можно буквально в несколько строк. Естественно, поддержка СОМ, которая была чуть ли не самой элегантной в VB, в новой версии тоже на высоте.

Все вышесказанное означает, что VB стал нормальным языком, использующим все современные технологии - не больше, но и не меньше.

Апгрейд приложений

Впрочем, с перекомпиляцией программ дела в VB.NET обстоят хуже, чем раньше. Так как язык претерпел серьезные изменения, при попытке открытия старых программ автоматически запускается мастер обновления (рис. 1), который по идее должен помочь в переводе исходного текста (а в идеале - вообще все сделать самостоятельно). Если в программе присутствуют какие-либо изыски, как то: обращение к драйверам баз данных или нестандартные интерфейсные возможности (реализованные как сторонние ActiveX), то сложностей не избежать (рис. 2). Но даже если конвертация прошла успешно, не спешите запускать программу, а прежде обратите внимание на исходный код - вполне возможно, что мастер разукрасит его множеством предупреждений, так что будет весьма кстати обратиться к специально созданному файлу UpgradeReport.htm с информацией о проблемах. По своему опыту, который подтверждается многочисленными воплями в форумах и списках рассылки, могу сказать, что полностью обновить более или менее сложную программу «на автомате» удается очень редко.

IDE

Теперь поговорим о том, с чем сталкивается любой программист, - о среде разработки. Изменения, которые претерпела IDE по сравнению с предыдущей версией, тоже существенны. Теперь для Visual Basic, Visual C++, Visual C# существует единая среда разработки, включающая в себя веб-браузер для просмотра документации и прочей справочной информации и множество инструментальных панелей, которые поддерживают три режима: auto-hide, когда панелька прячется за край экрана и разворачивается при щелчке (что очень экономит место), а также обычный и плавающий (floating) режимы (рис. 3). Чрезвычайно удобна функция Clipboard Ring (рис. 4) - специальная панель, хранящая двадцать последних элементов из буфера. Конечно же, полностью поддерживается code competition, что позволяет просматривать поля и методы класса, их определение, а также выбирать нужный класс щелчком мыши. Нововведением среди RAD является механизм макросов, так что теперь можно автоматизировать многие операции.

В редакторе самым полезным новшеством я бы назвал «свертывание» исходного текста, когда целый блок кода можно свернуть до одной строки, вводя иерархическую структуру прямо в окне ввода. Возможности контекстно-зависимой обработки тоже на высоте: например, по правому щелчку мыши на служебном слове можно получить список членов класса (List Members), информацию о слове (Quick info) и автоматически перейти в точку его определения (definition).

В целом изменения носят скорее косметический характер: система стала удобнее, материалов - еще больше, но это как раз тот случай, когда больше означает лучше.

Визуальные и невизуальные компоненты

Бросается в глаза, что этих компонентов (рис. 5) гораздо меньше, чем, например, в Delphi 6. Но среда существует совсем недолго, так что постепенно компоненты появятся, а на первое время можно обойтись старыми OCX, доставшимися в наследство от VB 6. Не все они успешно интегрируются в VB.NET, но проблемы в основном возникают с «самоделками», а компоненты от известных команд разработчиков импортируются легко. Те же немногие компоненты, что в среде присутствуют, работают идеально и по своим возможностям нередко обходят собратьев из Delphi. Из приятных новшеств можно отметить ErrorProvider - компонент, служащий для проверки и индикации ошибок пользователя. Если пользователь вводит в поле даты нечто, отличающееся от принятых форматов, обычная программа выведет окошко с предупреждением, ErrorProvider же отобразит рядом с окошком ввода мигающий восклицательный знак (рис. 6). Казалось бы, мелочь, но чертовски удобно.

Куда идем мы с Пятачком…

По мнению Microsoft, вопроса, куда двигаться дальше, у программистов на VB быть не должно, - что тут думать, переходите на VB.NET. Но не все так просто. Как выглядела ситуация до сего времени? Были настоящие (читай VC++) Программисты с большой буквы - «волосатые и небритые». Небритые потому, что пока набиваешь всякие там «AmbientShowHatching» и «CreateComponentCategory», жизнь проходит и побриться просто не успеваешь. Были программисты нормальные (читай дельфисты) - чисто выбритые, так как пока их коллеги выписывают кренделя на С++, на Delphi можно то же самое сделать раза в два быстрее. И были программеры (почитатели VB), которые, пока их коллеги мучаются, успеют в отпуск съездить, жениться и развестись. А все потому, что на VB можно было либо решить задачу еще быстрее, либо не решить вообще, ибо «Ну нельзя же такое на Бейсике сделать». Сейчас программеры вымирают: VB.NET уже не позволяет не думать - придется сначала подучить новый язык, потом привыкнуть к новой среде и изобрести способ перетащить весь багаж накопленных материалов. И вот тут возникает перепутье, о котором в Microsoft молчат. Переучиваться на VB.NET особого смысла нет, так как тот же C# отличается от VB.NET незначительно, порой вся разница заключается в мелочах типа точки с запятой вместо двоеточия в конце операнда или двойного знака равно (= =) при проверке на равенство. И это при том, что для C# уже сейчас существует база наработанных алгоритмов, которая пополняется гораздо быстрее, чем база для VB.NET. А значит, очень многих VB.NET толкает в объятия либо C#, либо в Delphi, ибо основное преимущество VB - простота - утрачена безвозвратно, а из продвинутых средств не все ли равно, что выбирать?

Попытаемся заглянуть в будущее. Оба ведущих поставщика RAD, компании Microsoft и Borland, при выходе новых продуктов объявили об кроссплатформной поддержке либо открыто, либо в завуалированной форме. Таким образом, мэйнстрим софтостроения на будущую пятилетку вроде бы ясен: обе компании попытаются создать инструмент для разработки приложений под Linux, причем такой, чтобы существующий код переносился максимально безболезненно. Как возможный итог - взрывной рост числа приложений под Linux, и тот, кто первым займет место под солнцем, получит карт-бланш на этом весьма перспективном рынке. Может показаться, что Borland сильно опережает Microsoft - ведь Kylix уже существует, тогда как портирование .NET еще вопрос. Но большинство программ на ObjectPascal для Windows созданы с использованием старой библиотеки визуальных компонентов - VCL, и поэтому не переносимы в Kylix. Код неминуемо придется переписать с использованием CLX - новой кроссплатформной библиотеки, а затем еще перекомпилировать. К тому же уже сейчас виден подводный камень (или даже мина замедленного действия): графическая библиотека Qt, на базе которой строится CLX, принадлежит сторонней компании - TrollTech. Учитывая манеру MS поедать конкурентов, можно предположить, что если вдруг Kylix достигнет потрясающих результатов, Microsoft просто купит TrollTech, поставив крест на Qt и CLX.

Пока .NET существует лишь для Windows, ситуация стабильна - программы будут работать только под Win98, Me, NT, 2000 и XP при условии установки .NET CLR. Со временем будет неминуемо наработан парк .NET-приложений. А теперь представим, что Microsoft (или какая-то другая компания) портирует .NET на Linux. А значит, все .NET-приложения будут автоматически доступны и на Linux. И тогда эта широко распространенная в узких кругах ОС сможет наконец обзавестись парком современного прикладного ПО.

Есть и еще один любопытный момент. Сколько ни думай о причинах неудач многих ОС, первое, что приходит в голову, - это отсутствие приложений. Так вот, если создание .NET-приложений пойдет нормальными темпами, у многих, казалось бы уже мертвых, ОС появится шанс на воскрешение: достаточно портировать .NET на свою платформу, и пользователи автоматически получат доступ к разнообразным и популярным программам. Согласитесь, звучит довольно заманчиво: вернуть к жизни, например, OS/2. Потенциальная возможность для этого теперь есть.


( Есть некоторые несущественные ограничения. Например, как и в Delphi, запрещено множественное наследование (multiple inheritance), когда один класс является потомком сразу нескольких классов. Для обхода этого ограничения можно использовать механизм интерфейсов.)

(Например, такой популярный объект, как поле ввода RTF, поддерживает и автоопределение URL, и установку фона для произвольных участков текста, и прочие вкусности.)


Дополнительная информация

За дополнительной информацией обращайтесь в компанию Interface Ltd.

Обсудить на форуме Microsoft

Рекомендовать страницу

INTERFACE Ltd.
Телефон/Факс: +7 (495) 925-0049
Отправить E-Mail
http://www.interface.ru
Rambler's Top100
Ваши замечания и предложения отправляйте редактору
По техническим вопросам обращайтесь к вебмастеру
Дата публикации: 11.04.03