Архивы: по дате | по разделам | по авторам

Basic форева?

АрхивПрограммазм (архив)
автор : Андрей Драница   15.10.2002

VB.NET: факты и впечатления.

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

Другой язык

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

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

Более того, объектная модель была расширена таким образом, что в некоторых аспектах 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 с информацией о проблемах. По своему опыту, который подтверждается многочисленными воплями в форумах и списках рассылки, могу сказать, что полностью обновить более или менее сложную программу «на автомате» практически никогда не удается.


Рисунок 1


Рисунок 2

IDE

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


Рисунок 3


Рисунок 4


Рисунок 5

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

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

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

Сразу бросается в глаза, что число этих компонентов (рис. 6) много меньше, чем, например, в Delphi 6. Но среда существует совсем недолго, так что постепенно компоненты появятся, а на первое время можно обойтись старыми компонентами ocx, доставшимися от VB 6. Не все они успешно интегрируются в VB.Net, но проблемы в основном возникают с «самоделками», а компоненты от известных команд разработчиков импортируются легко. Те же немногие компоненты, что в среде присутствуют, работают идеально и по своим возможностям нередко обходят собратьев из Delphi [2]. Из приятных нововведений можно отметить ErrorProvider, компонент, который используется для проверки и индикации ошибок пользователя. Если пользователь вводит в поле даты нечто, отличающееся от принятых форматов, обычная программа выведет окошко с предупреждение, ErrorProvider же отобразит рядом с окошком ввода мигающий восклицательный знак (рис. 7). Казалось бы, мелочь, но чертовски удобно.


Рисунок 6


Рисунок 7

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

По мнению 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. Потенциальная возможность для этого теперь есть.


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

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

© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.