Он тебя плохому научит», — говорили умудренные опытом товарищи начинающему программисту. Однако редкий учебник по информатике обходился без описания основ этого языка программирования. Совсем недавно Бейсик служил не только средством записи алгоритмов, но и операционной системой для отдельных классов компьютеров. А каков теперь наш старый знакомый?
Для молодого поколения программистов Бейсик немыслим без приставки Visual. Компания Microsoft, хранящая верность своему начинанию, на протяжении многих лет вела Бейсик за руку, воспитывая его в духе времени. Постепенно из немногословного малыша, каким он когда-то был из-за ограниченных возможностей современной ему вычислительной техники, Бейсик вырос в достойного мужа, способного облечь алгоритм в лаконичную выразительную запись.
Вряд ли противники Visual Basic (сейчас мы обсуждаем не продукт, а язык, лежащий в его основе) будут спорить с тем, что он обладает всеми необходимыми атрибутами структурного языка программирования. Это роднит его с Паскалем. Но в нем, как и в других промышленных языках программирования, имеются конструкции, не вписывающиеся в рамки академической чистоты. Мы же не ругаем язык Си за то, что теоретические каноны принесены в жертву эффективности и простоте записи кода?
Уверенно выглядит Бейсик и на фоне корифеев концепции объектно-ориентированного подхода. Примером может служить даже удачно выбранный способ записи обращения к полям объекта: конструкция With-End With с точкой перед именем поля. Язык С++ вообще не предлагает никакого решения — имени поля обязательно должно предшествовать имя объекта, а в Паскале используется аналогичная схема, но из-за отсутствия точки возможно смешение контекстов.
Следовательно, Бейсик как таковой имеет право на достойное существование в современном мире. Но когда мы обсуждаем язык программирования, то не должны абстрагироваться от его реализаций. Как же обстоят дела с этой точки зрения?
Здесь не все так однозначно. Visual Basic никогда не славился высокой производительностью генерируемого кода. Ранние его версии создавали не чистый машинный код, а P-код для виртуальной Бейсик-машины. И даже при использовании версий с номерами 5 и 6 разработчики вынуждены были распространять вместе со своими программами довольно весомую по тем временам DLL-библиотеку. Современные продукты также не стали исключением, но с той лишь разницей, что генерируют код для платформы .NET.
Впрочем, для коммерческих программ производительность и размер не считаются решающими факторами. Они должны быть достаточно быстрыми, для того чтобы пользователь получал отклик за разумное время, иначе бы их все писали на Ассемблере. Однако рост вычислительных мощностей способствует сокрытию недостатков. В скорости же и удобстве разработки конечных приложений с Visual Basic была способна соперничать разве что среда Delphi. Но у нынешних владельцев Delphi слишком обширные планы на этот язык, а вот Visual Basic уверенно развивается, не сворачивая с выбранного направления.
Размещенный на борту самого популярного браузера, VBScript вышел на просторы Всемирной паутины. Хотя он и проиграл борьбу своему прямому конкуренту JavaScript, тем не менее используется в корпоративных интранет-сетях.
Сознавая, что средства управления операционной системой Windows более ограниченны, чем у Unix-систем, компания Microsoft разрабатывает технологию WindowsScript Hosts (WSH), основанную на возможности программирования объектов операционной системы с помощью языков сценариев — VBScript и JavaScript. Благодаря объектной модели компонентов COM, в несколько строк могут быть записаны действия по обслуживанию базы данных или получению списка аппаратных ресурсов удаленного компьютера. Для примера приведем текст сценария на VBScript, который создает файл базы данных Фирма.mdb с таблицей «Сотрудники» (листинг 1).
И все-таки одну нишу Microsoft оставила незаполненной. В настоящее время компания не предлагает компилятора с языка Бейсик в чистый машинный код. Однако с учетом сказанного выше о Visual Basic и VBScript это не кажется страшным. Впрочем, не так уж трудно представить себе задачу, для решения которой компилятор все-таки необходим.
Допустим, нужно обработать большие текстовые файлы с данными. Это реально выполнить хотя бы с помощью VBScript, но скорость работы такой программы будет черепашьей даже на современном оборудовании. А если требуется фильтр между двумя системами с ограниченным временем ожидания, то что же делать? Да и излишняя в подобной ситуации объектная ориентированность скриптовых языков не способствует ясности и лаконичности исходных текстов.
Возьмем другой пример. Надо разработать продукт, который будет распространяться среди клиентов предприятия. Казалось бы, Visual Basic придет на помощь! Но в таком случае придется распространять вместе со своей программой библиотеку .NET с сопутствующими вероятностями конфликтов версий и другими неприятностями. А вот при разработке программы для компилятора легко контролировать все зависимости.
Неужели Бейсик сдает позиции на этом поприще? За ответом на данный вопрос обратимся в Интернет, где и получим множество ссылок на коммерческие продукты, базирующиеся на Бейсике. Среди них есть и специализированные среды для разработки игр, и интерпретаторы для обучения и оперативного решения вычислительных задач, однако наше внимание привлек проект FreeBasic (http://www.freebasic.net/). Что же скрывается за его названием?
В настоящее время актуальной является версия компилятора 0.20.0 от 8.10.2008. Авторы проекта заявляют, что их целью было не создание нового бейсикоподобного языка, а сохранение традиционного синтаксиса с добавлением новых возможностей, без которых современный язык программирования просто не может существовать.
Похоже, что совместимость новой версии со старыми на высоте: программа из далекого школьного прошлого была успешно обработана компилятором, и серия ракет, как и встарь, устремилась к верхней границе окна консоли (см. врезку «Подготовка к работе»). Размер исполняемого файла — 19 968 байт, из зависимостей — только KERNEL32.DLL и MSVCRT.DLL. Здесь все по-честному.
А если что-нибудь посерьезнее? Вот так, к примеру, будет выглядеть программа для обнаружения модемов на последовательных портах (листинг 2).
После ее анализа можно утверждать, что на Бейсике несложно написать программу мониторинга или управления оборудованием, подключенным к компьютеру через интерфейс RS-232. Аналогично обстоят дела и с параллельным интерфейсом. Приятно, что все делается только средствами языка, а подробности реализации от нас скрыты.
Если же потребуется напрямую обратиться к функциям библиотек стороннего производителя, FreeBasic не станет чинить препятствий. В дистрибутиве найдутся необходимые заголовочные файлы для использования Win32 API. Любители математического искусства сумеют оценить красоту множеств Мандельброта, воспроизводящихся программой mandbrot.bas из пакета примеров к графической библиотеке Gfxlib.
Разработчики обратили внимание на использование Бейсик-модулей в смешанных проектах. Описание интерфейсов можно найти в сопроводительной документации.
Чтобы реализовать все эти возможности, пришлось в язык Бейсик ввести дополнения. Некоторые из них, в частности Си-подобные операции присваивания и инкрементирования/декрементирования, являются спорными — они напоминают засорение нашей повседневной речи американизмами и прочим сленгом. Употреблять их или нет, зависит от желания программиста. Кроме того, существенно расширен набор операций над двоичными данными, что позволяет использовать Бейсик при разработке драйверов устройств.
Положительным моментом стало и введение в язык объектно-ориентированных расширений. К сожалению, в нынешней версии они ограничены возможностью создания пользовательских типов данных с разграничением доступа и механизмами конструкторов-деструкторов.
По заявлениям разработчиков FreeBasic, их компилятор генерирует код, уступающий GCC по быстродействию в 1,8 раза. Неплохой результат для языка с интерпретируемым прошлым. Имеются также реализации FreeBasic для Windows, Linux и DOS.
В завершение обзора, посвященного «латыни» языков программирования, следует напомнить, что за десятилетия существования Бейсика было написано множество книг, посвященных не только самому языку как таковому, но и реализации на нем сложных и интересных алгоритмов из различных областей науки и техники. Они не утратили актуальности и по сию пору, а с ростом вычислительной мощности компьютеров могут обрести новую жизнь.
Немного истории
Бейсик (от BASIC, сокращение от англ. Beginner’s All-purpose Symbolic Instruction Code — универсальный код символических инструкций для начинающих; англ. basic — основной, базовый) — семейство высокоуровневых языков программирования. Был разработан в 1963 году профессорами Дартмутского колледжа Томасом Куртом (Thomas E. Kurtz) и Джоном Кемени (John G. Kemeny). Язык предназначался для обучения программированию и получил широкое распространение в виде различных диалектов, прежде всего, как язык для домашних микрокомпьютеров.
Подготовка к работе
Не ждите, что после установки дистрибутивного пакета FreeBasic вас встретит красочная интегрированная среда разработки, вы получите лишь компилятор командной строки. И для того чтобы было удобно им пользоваться, нужно в переменную среды окружения PATH добавить путь к каталогу, в котором находится программа fbc.exe,. Для этого выберите пункт «Выполнить» меню кнопки «Пуск» и введите команду: sysdm.cpl
В открывшемся окне выберите закладку «Дополнительно» и нажмите кнопку «Переменные среды». В верхней части окна нажмите кнопку «Создать» и укажите имя переменной PATH со значением %PATH%;C:Program FilesFreeBasic
После этого откройте консоль, перейдите в каталог с файлом исходного текста программы (например, prog.bas) и компилируйте ее командой:
fbc prog.bas
Если программа написана на старой версии Бейсика (например, содержит номера строк), то для компиляции включите режим совместимости:
fbc -qb prog.bas