|
Прежде чем...Прежде чем перейти непосредственно к предмету этой публикации, оговоримся, что публикация предназначена для тех, кого по тем или иным причинам интересует тема программирования на языке Бейсик. Делаете ли вы первые шаги в программировании; используете ли вы Бейсик как подручное средство для проведения расчетов (экономических, радиотехнических, статистических и т.п.); собираетесь ли вы приступить к созданию полноценных приложений под Windows, Linux или DOS, но вас не удовлетворяют возможности "классического" Бейсика; программируете ли вы на коммерческом варианте Бейсика, но хотели бы избавиться от необходимости пользоваться нелицензионными копиями, -- в этих и многих других случаях вас может заинтересовать и вам может помочь FreeBASIC. Пожалуй, не стоит читать эту статью лишь тем, кто страдает стойкой формой неприятия Бейсика как языка программирования высокого уровня. Первые штрихиFreeBASIC - это не только открытый, но и полностью свободный (бесплатный) 32-разрядный компилятор языка программирования Бейсик с поддержкой (насколько это возможно) синтаксиса MS-QuickBASIC. В качестве проекта FreeBASIC появился в 2004 году. Основал его Andre Victor, который и является ведущим разработчиком FreeBASIC. FreeBASIC распространяется на условиях лицензии GNU General Public License (GPL) и на официальном сайте доступны исходные коды компилятора и run-time библиотеки. Как и сам компилятор, так и входящие в его состав библиотеки написаны на самом FreeBASIC. По состоянию на март 2006 г. существуют две версии компилятора:
Кроме обычных для Бейсика элементов языка, в этом компиляторе реализован ряд возможностей, существенно расширяющих базовый синтаксис . Речь идет о поддержке указателей, о расширенном наборе встроенных типов, о пользовательских типах, о перегрузке функций, о поддержке инструкций на языке ассемблера (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. Так, теперь программисту доступны:
Работа с массивамиFreeBASIC поддерживает расширенный набор действий с массивами:
Совместимость с синтаксисом языка БейсикFreeBASIC - это не новый диалект языка Бейсик. Достаточно знать один из вариантов Бейсика от Microsoft (например, QuickBASIC или Visual Basic), чтобы программировать на FreeBASIC. Компилятор FreeBASIC является нечувствительным к регистру символов. Имена переменных скалярных типов могут содержать суффиксы для указания типа переменных(как это было в классическом Бейсике), также поддерживается нумерация строк и нет необходимости в функции MAIN. Большинство операторов и функций для работы с графикой и консолью, которые были реализованы в QuickBASIC, поддерживаются FreeBASIC, что облегчает перенос программ, разработанных при помощи QuickBASIC. Синтаксис FreeBASIC был расширен небольшим количеством ключевых слов. Новые функции реализованы в виде библиотек, что снижает вероятность совпадения имен при переносе старых программ на FreeBASIC. Например, использование функции MessageBox в Windows будет выглядеть так: '$include: 'windows.bi' MessageBox NULL, "Text", "Title", MB_ICONASTERISK Замечание: поскольку синтаксис FreeBASIC допускает вольное обращение с регистром символов, то можно при желании использовать: MESSAGEBOX NULL, "Text", "Title", MB_ICONASTERISK Встроенная библиотека функций работы с графикой (gfx-библиотека)Библиотека графических функций FreeBASIC полностью совместима с графическими функциями из QuickBasic (CIRCLE, DRAW, LINE, PAINT и т.д.), но предоставляет программисту гораздо больше возможностей и является более гибкой и быстрой (для ускорения работы используются инструкции mmx, если они поддерживаются процессором). Функции графической библиотеки FreeBASIC могут напрямую обращаться к видео-памяти, оперировать любой глубиной цвета, любым разрешением экрана и поддерживают работу с любым количеством экранных страниц. Функции отрисовки могут работать как с активной страницей, так и со скрытыми (неактивными) страницами любого размера (GET/PUT ). Существуют функции работы со спрайтами, например, возможны следующие действия: отсечение, изменение прозрачности, 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 последовательностей: 'Без обработки символов Escape PRINT "First line"+CHR$(13)+CHR$(10)+"Second line" 'С обработкой символов Escape OPTION ESCAPE PRINT "Firstline\r\nSecond line" Перегрузка функцийFreeBASIC включает в сигнатуру функции еще тип и количество аргументов, что позволяет осуществлять перегрузку функций так же, как, например, в языке C++. Отличие состоит в том, что при объявлении первого варианта перегружаемой функции необходимо использовать ключевое слово OVERLOAD: DECLARE SUB Test OVERLOAD (a AS DOUBLE) DECLARE SUB Test (a AS SINGLE) DECLARE SUB Test (a AS INTEGER, b AS INTEGER = 1234) DECLARE SUB Test (a AS BYTE, b AS SHORT) Встраиваемые ассемблерные инструкцииВ текст программы можно добавлять ассемблерные инструкции (спецификация Intel для семейства x86). Это более удобно, чем размещение в тексте программы шестнадцатиричных (или десятичных) кодов операций. В ассемблерных инструкциях можно использовать имена переменных. Ограничения накладываются лишь на инструкции, выполнение которых запрещено в защищенном режиме. Ассемблерные инструкции помещаются на отдельных строках после ключевого слова ASM или между ключевыми словами ASM и END ASM. Поддержка наиболее известных открытых библиотекFreeBASIC может использовать большинство известных библиотек, написанных на языке C, и не требует для этого промежуточные функции-обертки. Заголовочные файлы и примеры работы с такими библиотеками входят в состав дистрибутива версии 0.15. Вот список поддерживаемых библиотек (ссылки на сайты разработчиков этих библиотек можно найти на официальном сайте FreeBASIC в разделе Links):
Аргументы функции по умолчаниюДля целочисленных, вещественных и строковых аргументов поддерживается присваивание значений по умолчанию при вызове функций: DECLARE SUB Test(a AS DOUBLE = 12.345, BYVAL b AS BYTE = 255, BYVAL s AS STRING = "abc") Test Test , 128 Test , Test 44, Test 44 Test ( ) УказателиFreeBASIC предоставляет программисту возможность работать с указателями в стиле языков C и C++ (отличие лишь в том, что для обозначения операции взятия адреса вместо символа "&" используется символ "@"). Поддерживаются указатели на все базовые типы, а также на типы, определяемые пользователем, массивы и функции. FreeBASIC поддерживает арифметику указателей и допускает неограниченное число уровней иерархии указателей, то есть указатель на указатель, который является указателем на указатель, который... и так далее. Для указания того, что переменная является указателем, в ее описании после типа добавляют ключевое слово ptr или pointer. Для указателей поддерживается операция приведения типов: cptr(byte ptr, intptr) += 1 cptr(myudt1 ptr, @udt2)->foo = *cptr(integer ptr, bar) PreprocessorFreeBASIC поддерживает обработку директив препроцессора, которые позволяют выполнять условную компиляцию, подключать необходимые файлы, создавать макросы и многое другое. В большинстве случаев директивы препроцессора напоминают синтаксис, принятый в языке C: #DEFINE SOMEDEF 1234 #DEFINE OTHERDEF 5678 #IFDEF SOMEDEF # IF NOT DEFINED(OTHERDEF) # DEFINE OTHERDEF SOMEDEF # ELSE # IF OTHERDEF <> SOMEDEF # UNDEF OTHERDEF # DEFINE OTHERDEF SOMEDEF # ENDIF # ENDIF #ELSE # DEFINE OTHERDEF 5678 #ENDIF #PRINT OTHERDEF Вот пример объявления макроса: #DEFINE bar(x,y) ((x) * (y)) #DEFINE foo(x,y) bar(x-y,y-x) a = foo(b, c) Неограниченные имена переменных и функцийКомпилятор FreeBASIC способен "переварить" исходный код размером до 2 Гб. Причем длина имен переменных, констант и функций ограничена лишь размером памяти, доступной во время компиляции программы. Инициализация переменныхFreeBASIC поддерживает инициализацию переменных (то есть присваивание начальных значений при объявлении переменной), в том числе и для массивов, и для переменных пользовательских типов, и для статических, модульных и локальных переменных. DIM flat as Integer = 5 DIM array(1 to 2, 1 to 5) as Integer => {{1, 2, 3, 4, 5}, {1, 2, 3, 4, 5}} Состав дистрибутиваДоговоримся, что в дальнейшем речь будет идти о FreeBASIC версии 0.15 для платформы Win32. Размер инсталляционного пакета этой версии составляет чуть больше четырех мегабайт (4.27 Мб). В состав пакета входят следующие компоненты:
УстановкаНа официальном сайте проекта в разделе Download можно загрузить нужный дистрибутив, выбрав тот вариант, который подходит для соответствующей операционной системы. Инсталляционный пакет для Win32 представляет собой исполняемый файл (exe), при запуске которого появляется диалог мастера установки. Во время установки пользователь должен указать папку, куда будет установлен пакет (по умолчанию это "C:\Program Files\FreeBASIC\"), а также выбрать тип установки. Рекомендуется во всех диалогах принимать параметры по умолчанию (то есть нажимать кнопку "Next"). Создание исходного кода и компиляция программВ состав пакета FreeBASIC не входит интегрированная среда разработки, что позволяет программисту решить вопрос о способах написания исходного кода по своему усмотрению. На сайте FreeBASIC представлены два текстовых редактора и одна интегрированная среда, которые можно использовать для разработки приложений (все программы бесплатны). Подбирая текстовый редактор или интегрированную среду разработки, программист должен учитывать, что, кроме файлов в кодировке ASCII с Unicode escape последовательностями (\u), FreeBASIC может обрабатывать исходные (.bas) и заголовочные (.bi) файлы, созданные в кодировках UTF-8, UTF-16LE, UTF-16BE, UTF-32LE и UTF-32BE , которые могут безконфликтно сосуществовать в одном проекте(и с файлами ASCII). Это позволяет использовать в программе строковые константы и комментарии, состоящие из символов национальных алфавитов, но только при условии, что выбранный пользователем текстовый редактор поддерживает хотя бы одну из вышеназванных кодировок. Компилятор 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) следующего содержания: set app=fileopen.bas "%ProgramFiles%\FreeBasic\fbc.exe" -s gui %app% if errorlevel 1 pause Если возникнет сообщение об ошибке, то вывод на экран будет происходить порциями с ожиданием нажатия клавиши. Это позволит прочитать сообщение скринридером (например, Jaws for Windows -- следует только переключиться на Jaws-курсор). Вывод сообщений об ошибках можно перенаправить в текстовый файл, который после компиляции можно прочитать в текстовом редакторе (если сообщений об ошибках не будет, то файл останется пустым). Сделать это можно так: set app=fileopen.bas "%ProgramFiles%\FreeBasic\fbc.exe" -s gui %app% > errors.txt Запустите один из этих bat-файлов и, если не будет ошибок, в папке появится файл fileopen.exe. Ваше первое приложение на FreeBASIC готово к запуску. Скорее всего, размер получившегося исполняемого файла (exe) вас приятно удивит. Дальнейшие эксперименты с примерами на FreeBASIC вы можете выполнять самостоятельно. Ссылки по теме
|
||||||||
Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения. Идея и реализация: © Владимир Довыденков и Анатолий Камынин, 2004-2019 |
Социальные сети