Перш ніж.
перші штрихи
Крім звичайних для Бейсика елементів мови, в цьому компіляторі реалізований ряд можливостей, істотно розширюють базовий синтаксис. Йдеться про підтримку покажчиків, про розширені вбудованих типів, про користувальницьких типах, про перевантаження функцій, про підтримку інструкцій на мові асемблера (X86) і про багато іншого, що робить FreeBASIC повноцінним засобом розробки програм. Додатки можуть розроблятися для 32-розрядних операційних систем: MS Windows, Linux і DOS.
Компілятор FreeBASIC дозволяє створювати бінарні файли різних форматів: OBJ, LIB, DLL, а також EXE (наприклад, консольні і GUI-додатки для Win32). Так, для створення статичної або динамічної бібліотеки досить додати лише один ключ до командного рядка компілятора: -lib або -dll.
Всі компоненти FreeBASIC (в тому числі і сторонніх розробників) є вільними (тобто не передбачають ліцензійних зборів за їх використання в комерційних чи некомерційних цілях), виключаючи тільки бібліотеку GoRC для Win32. Асемблер, компонувальник, архіватор та багато інших програм, що входять в інсталяційний пакет, взяті з GNU binutil programming tools.
Зауваження: Всі номери, необхідні для завантаження інсталяційного пакета з офіційного сайту зібрані в заключному розділі статті.
Подробиці.
Далі мова піде виключно про специфічні можливості FreeBASIC, які і перетворюють його з мови програмування, створеного для навчальних цілей, в засіб розробки додатків. Варто відразу сказати, що FreeBASIC концептуально в нинішньому своєму вигляді відноситься до засобів структурного програмування, тобто не має спеціалізованих елементів мови, що підтримують об'єктно-орієнтоване програмування (хоча об'єктно-орієнтований підхід - це свого роду світогляд і ніякі обмеження на мовному рівні йому не страшні, але все ж для ООП краще вибрати що-небудь інше). У той же час FreeBASIC зберіг всю легкість і прозорість побудови коду, які і зробили його настільки популярним серед тих, хто робить перші кроки в програмуванні.
Нові вбудовані типи даних
Робота з масивами
FreeBASIC підтримує розширений набір дій з масивами:- Програміст може використовувати і статичні, і динамічні масиви, при цьому підтримується необмежена розмірність масиву (тобто необмежене число індексів).
- Максимальний розмір масиву становить 2 Гб.
- Індекс масиву може змінюватися в довільних межах.
- За допомогою оператора REDIM PRESERVE можна перевизначити розмір динамічних масивів зі збереженням їх вмісту.
Сумісність з синтаксисом мови Бейсік
FreeBASIC - це не новий діалект мови Бейсік. Досить знати один з варіантів Бейсика від Microsoft (наприклад, QuickBASIC або Visual Basic), щоб програмувати на FreeBASIC.
Компілятор FreeBASIC є нечутливим до регістру символів. Імена змінних скалярних типів можуть містити суфікси для вказівки типу змінних (як це було в класичному Бейсике), також підтримується нумерація рядків і немає необхідності в функції MAIN.
Більшість операторів і функцій для роботи з графікою і консоллю, які були реалізовані в QuickBASIC, підтримуються FreeBASIC, що полегшує перенесення програм, розроблених за допомогою QuickBASIC.
Синтаксис FreeBASIC був розширений невеликою кількістю ключових слів. Нові функції реалізовані у вигляді бібліотек, що знижує ймовірність збігу імен при перенесенні старих програм на FreeBASIC. Наприклад, використання функції MessageBox в Windows буде виглядати так:
Зауваження: оскільки синтаксис FreeBASIC допускає вільне поводження з регістром символів, то можна при бажанні використовувати:
Вбудована бібліотека функцій роботи з графікою (gfx-бібліотека)
Бібліотека графічних функцій FreeBASIC повністю сумісна з графічними функціями з QuickBasic (CIRCLE, DRAW, LINE, PAINT і т.д.), але надає програмісту набагато більше можливостей і є більш гнучкою і швидкої (для прискорення роботи використовуються інструкції mmx, якщо вони підтримуються процесором ).
Існують функції роботи зі спрайтами, наприклад, можливі наступні дії: відсікання, зміна прозорості, alpha і custom blending). Крім того, реалізована завантаження і збереження зображень у форматі .bmp (BLOAD, BSAVE).
FreeBASIC дозволяє практично безпосередньо працювати з функціями OpenGL, для цього в дистрибутив включені необхідні заголовки та бібліотеки. а також кілька прикладів роботи з OpenGL.
У графічну бібліотеку FreeBASIC додатково включені Функції підтримки клавіатури, миші і джойстика.
При використанні функцій графічної бібліотеки розмір виконуваного файлу збільшується лише на 30-40 Кб (а без цих функцій розмір простого віконного програми під Win32 становить близько 10 Кб). При цьому ніяких додаткових бібліотек (dll) для супроводу програми не потрібно (досить тих бібліотек, які входять до складу операційної системи).
Бібліотека графічних функцій (як і весь FreeBASIC) є багатоплатформного: під Windows використовується DirectX або GDI (якщо DirectX не встановлено) під DOS використовується прямий доступ до VGA / ModeX / VESA, під Linux - raw Xlib.
Підтримка засобів налагодження
FreeBASIC дозволяє налагоджувати програми. Ця можливість реалізована за допомогою GDB (GNU debugger) або Insight (GUI-надбудови для GDB).
При включеній опції -exx в командному рядку компілятора, FreeBASIC здійснює перевірку індексів масивів на предмет виходу за межі допустимих значень, а також здійснює контроль Null покажчиків.
Обробка Escape послідовностей
Escape послідовності обробляються так само, як в мові C. Різниця полягає лише в тому, що числове значення після зворотного лсеша інтерпретується як десяткове, а не як вісімкове. Можна скористатися інструкцією OPTION ESCAPE, щоб включити таку обробку escape послідовностей:
перевантаження функцій
Вбудовувані асемблерні інструкції
В текст програми можна додавати асемблерні інструкції (специфікація Intel для сімейства x86). Це зручніше, ніж розміщення в тексті програми шістнадцяткових (або десяткових) кодів операцій. У ассемблерних інструкціях можна використовувати імена змінних. Обмеження накладаються лише на інструкції, виконання яких заборонено в захищеному режимі.
Асемблерні інструкції поміщаються на окремих рядках після ключового слова ASM або між ключовими словами ASM і END ASM.
Підтримка найбільш відомих відкритих бібліотек
FreeBASIC може використовувати більшість відомих бібліотек, написаних на мові C, і не вимагає для цього проміжні функції-обгортки. Заголовки і приклади роботи з такими бібліотеками входять до складу дистрибутива версії 0.15. Ось список підтримуваних бібліотек (посилання на сайти розробників цих бібліотек можна знайти на офіційному сайті FreeBASIC в розділі Links):- GTK + 2.0: крос-платформні GUI Toolkit (більше 1Мб заголовних файлів, включаючи підтримку Glade, libart і glGtk)
- libxml і libxslt: XML і XSL бібліотеки, які стали стандартом де-факто.
- GSL - GNU Scientific library: комплексні числа, вектори, матриці, швидке перетворення Фур'є, лінійна алгебра, статистика, сортування, диференціальні рівняння і безліч інших математичних підпрограм.
- GMP - GNU Multiple Precision Arithmetic Library: відома, як найшвидша бібліотека для роботи з великими числами.
- SDL - Simple DirectMedia Layer: бібліотека для роботи з мультимедіа (звук, призначений для користувача введення, 3D і 2D графіка і т.д.
- OpenGL: портіруемость бібліотека для створення інтерактивних ігор та програм з використанням 2D і 3D графіки.
- Allegro: бібліотека для створення ігор (графіка, звук, призначений для користувача введення).
- GD, DevIL, FreeImage, GRX і інші графічні бібліотеки.
- OpenAL, Fmod, BASS: 2D і 3D звукові бібліотеки, що підтримують формати mod, mp3, ogg, і т.д.
- ODE і Newton: бібліотеки для моделювання динаміки твердих тіл.
- cgi-util і FastCGI: розробка web-додатків.
- DirectX і Windows API - найповніший набір заголовків файлів (серед відомих компіляторів Бейсика), включаючи функції для роботи з Unicode.
- DispHelper: робота з COM IDispatch інтерфейсами.
- І багато іншого.
Аргументи функції за замовчуванням
Для цілочисельних, речових та строкових аргументів підтримується присвоювання значень за замовчуванням при виклику функцій:
FreeBASIC підтримує арифметику покажчиків і допускає необмежену кількість рівнів ієрархії покажчиків, тобто покажчик на покажчик, який є покажчиком на покажчик, який. і так далі.
Для вказівки того, що змінна є покажчиком, в її описі після типу додають ключове слово ptr або pointer. Для покажчиків підтримується операція приведення типів:
Preprocessor
FreeBASIC підтримує обробку директив препроцесора, які дозволяють виконувати умовну компіляцію, підключати необхідні файли, створювати макроси і багато іншого. У більшості випадків директиви препроцесора нагадують синтаксис, прийнятий в мові C:
Необмежені імена змінних і функцій
Компілятор FreeBASIC здатний "переварити" вихідний код розміром до 2 Гб. Причому довжина імен змінних, констант і функцій обмежена лише розміром пам'яті, доступної під час компіляції програми.
ініціалізація змінних
склад дистрибутива
Домовимося, що надалі мова буде йти про FreeBASIC версії 0.15 для платформи Win32. Розмір інсталяційного пакета цієї версії становить трохи більше чотирьох мегабайт (4.27 Мб). До складу пакету входять наступні компоненти:- bin - папка, в якій знаходяться асемблер, компонувальник і інші файли, необхідні для компіляції програм.
- docs - папка з текстовими файлами. Це тексти ліцензійних угод, що відносяться до компонентів FreeBASIC, а також опис бібліотеки графічних функцій і список ключових слів. Не варто шукати в цій папці повний пакет документації, його потрібно завантажити з офіційного сайту окремо.
- examples - папка з прикладами програм на FreeBASIC. Тут представлені приклади роботи з функціями FreeBASIC, з багатьма вільно поширюваними бібліотеками, а також приклади додатків для Win32 (examples / Windows).
- inc - папка з файлами заголовків.
- lib - папка з файлами бібліотек.
- У корені папки FreeBASIC розташовані компілятор fbc.exe, який і слід запускати для компіляції bas-файлів, текстові файли readme.txt і changelog.txt (хронологія останніх змін), а також посилання на офіційний сайт і тематичний форум FreeBASIC.
На офіційному сайті проекту в розділі Download можна завантажити потрібний дистрибутив, вибравши той варіант, який підходить для відповідної операційної системи. Інсталяційний пакет для Win32 є виконуваний файл (exe), при запуску якого з'являється діалог майстра установки. Під час установки користувач повинен вказати папку, куди буде встановлений пакет (за замовчуванням це "C: \ Program Files \ FreeBASIC"), а також вибрати тип установки. Рекомендується в усіх діалогах приймати параметри за замовчуванням (тобто натискати кнопку "Next").
Створення вихідного коду і компіляція програм
Компілятор FreeBASIC є програмою, що запускається з командного рядка і має ряд ключів, які керують процесом компіляції. Можна створити пакетний файл (bat-файл), в який помістити командний рядок для запуску компілятора з потрібними ключами.
Розглянемо процес компіляції на прикладі створення простого GUI-додатки для Win32. Файл з вихідним кодом такого додатка можна взяти з папки прикладів, що входять до складу FreeBASIC. Скопіюйте файл fileopen.bas з папки "C: \ Program Files \ FreeBASIC \ examples \ Windows \ gui" (мається на увазі, що FreeBASIC був встановлений в папку "C: \ Program Files") в папку, де будуть розташовуватися ваші проекти (наприклад, "D: \ MyProgs"). Можна компілювати вихідні коди прикладів безпосередньо в тій папці, куди вони були поміщені в процесі установки FreeBASIC, але якщо ви збираєтеся змінювати вихідний код, то краще працювати з копіями цих прикладів в окремій папке.Для компіляції GUI-додатки під Win32 досить в папці з вашими проектами створити bat-файл (наприклад, make.bat) такого змісту:
Якщо виникне повідомлення про помилку, то висновок на екран буде відбуватися порціями з очікуванням натиснення клавіші. Це дозволить прочитати повідомлення скрінрідером (наприклад, Jaws for Windows - слід тільки переключитися на Jaws-курсор).
Запустіть один з цих bat-файлів і, якщо не буде помилок, в папці з'явиться файл fileopen.exe. Ваше перше застосування на FreeBASIC готове до запуску. Швидше за все, розмір отриманого файлу (exe) вас приємно здивує. Подальші експерименти з прикладами на FreeBASIC ви можете виконувати самостійно.