Донецкий техникум промышленной автоматики

Бейсік. Visual.

Він тебе поганому навчить », - говорили навчені досвідом товариші починаючому програмісту. Однак рідкісний підручник з інформатики обходився без опису основ цієї мови програмування. Зовсім недавно Бейсік служив не тільки засобом запису алгоритмів, але і операційною системою для окремих класів комп'ютерів. А який тепер наш старий знайомий?

Для молодого покоління програмістів Бейсік немислимий без приставки 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.

На завершення огляду, присвяченого «латині» мов програмування, слід нагадати, що за десятиліття існування Бейсика було написано безліч книг, присвячених не тільки самої мови як такого, але і реалізації на ньому складних і цікавих алгоритмів з різних областей науки і техніки. Вони не втратили актуальності і по цю пору, а з ростом обчислювальної потужності комп'ютерів можуть знайти нове життя.

Щоб продемонструвати цикли, на уроках інформатики використовували програму, яка зображує старт ракети. Завдяки FreeBasic програма працює на сучасному комп'ютері точно в тому ж вигляді, як на ДВК, тільки не потрібні були цикли затримки і монітори раніше були зеленими.

Трішки історії

Бейсік (від 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

А який тепер наш старий знайомий?
Ми ж не лаємо мову Сі за те, що теоретичні канони принесені в жертву ефективності і простоті запису коду?
Як же йдуть справи з цієї точки зору?
А якщо потрібно фільтр між двома системами з обмеженим часом очікування, то що ж робити?
Невже Бейсік здає позиції на цьому поприщі?
Що ж ховається за його назвою?
А якщо що-небудь серйозніше?