Обзор Basic компиляторов для Windows
|
В этой статье описывается мой опыт работы с
некоторыми компиляторами языка Basic для платформы Windows.Я
не буду упоминать о компиляторах фирмы Microsoft, так как вы и
без меня прекрасно знаете об их достоинствах и
недостатках. |
Иногда требуется написать небольшую
программку, которая бы заработала на другом компьютере, но
если писать ее на VB, то придется тащить с собой MSVBVM60.DLL
плюс еще ActiveX контролы используемые программой. И хотя эта
DLL присутствует в дистрибутиве Windows 2000/XP, очень часто
ее там не оказывается. Так как, многие программисты, создавая
инсталляционный скрипт для своего приложения, указывают, что
при деиинсталляции, надо удалить все файлы используемые
приложением, в том числе и MSVBVM, в результате никогда нельзя
быть уверенным, что эта DLL присутствует на компьютере
пользователя. Можно конечно пользоваться программами типа
Bit-Arts Fusion, слинковывающими DLL с основным приложением,
но при этом иногда возникают проблемы с запуском таких файлов
под NT4. |
Поэтому, я решил найти альтернативу Visual Basic, в
области создания небольших программ, утилит. Протестировав
более десятка различных Basic компиляторов от бесплатных до
коммерческих, я выбрал 7 наиболее интересных. |
В данном обзоре описываются мой опыт работы со следующими
системами: PowerBasic, PureBasic, Rqbeta, IBasic,
XPBasic, RealBasic, BCX. |
Все перечисленные компиляторы создают автономные EXE
файлы, не требующие внешних библиотек, а некоторые могут
создавать еще и DLL. |
Сразу хочу сказать, что этот обзор не претендует на
энциклопедические знания, а скорее отражает мои впечатления от
использования выше перечисленных инструментов. |
|
|
PowerBasic |
www.powerbasic.com |
|
Пожалуй, это наиболее известный Basic компилятор в мире после VB. В России же о нем, почти ничего
неизвестно. История этого языка началась еще в 1979 году,
когда никому неизвестный программист Боб Зейл выпустил
довольно удачный компилятор BASIC/Z для CP/M,
впоследствии портированный
им под MS-DOS. |
В середине 80 фирма Borland, в дополнение к Turbo Pascal,
решила создать собственную Бейсик - систему. За основу был
взят BASIC/Z, и основательно переработав его, Зейл совместно с
Питером Нортоном выпустили в 1987 году Turbo Basic 1.0. По тем
временам это была передовая система: интерактивная среда
разработки, эффективный компилятор с поддержкой сопроцессора,
высокая скорость работы сгенерированного машинного кода. Turbo
Basic сразу "убил" архаичный GW-Basic и примитивный
майкрасофтовский QuickBasic.
|
С появлением Turbo Basic, наконец, появилась возможность
создавать нормальное программное обеспечение на Бейсике,
появляется само понятие Basic - технологии. Но Microsoft, не
желая отдавать никому пальму первенства в создание Basic
систем, заключает в 1989 г. неявное мировое соглашение с
Borland, по нему Microsoft отказалась от дальнейшей поддержки
Pascal, а Borland - от Basic. Borland передает права на Turbo
Basic Бобу Зейлу, и он, основав фирму PowerBASIC Inc, начинает
выпускать очень удачные системы для DOS. В 1993 году эксперты
журнала PC Magazine и CA Realizer (Computer Associates),
признали PowerBasic 3.0 лучшим Бейсик компилятором для
DOS. |
В данный момент фирма PowerBasic Inc предлагает два
коммерческих компилятора для Windows: |
|
- PowerBASIC Console Compiler 3.0
- PowerBASIC for Windows 7.0
|
|
PowerBASIC Console Compiler
3.0 |
Этот компилятор предназначен для создания консольных
приложений под Win32, и имеет традиционный набор Basic
операторов типа: PRINT, COLOR, LOCATE, LINE INPUT, он
позволяет с минимальными усилиями создавать приложения даже
начинающими программистами. Кроме того компилятор может
осуществлять вызов любых WinApi32 функций, создавать
многопоточных приложения, использовать строки неограниченной
длинны. Есть встроенный ассемблер с поддержкой MMX, можно
компилировать DLL файлы. |
Качество кодогенерации очень высокое, исполняемые файлы
получаются очень быстрые и небольшого размера. |
К недостаткам этой системы можно отнести отсуствие
встроенной поддержки событий(Events) и обратных вызовов
(Сallbacks) из-за чего их приходится эмулировать с помощью API
функций. |
И хотя уже доступна 3 версия этого компилятора, он похоже
уже отживает свой век, так как PowerBASIC for Windows может
создавать консольные и GUI приложения и поддерживает механизм
обработки событий. |
|
Достоинства: |
- Простота языка, легко можно портировать код из DOS
приложений под Windows.
- Хорошее качество генерируемого машинного кода
|
Недостатки: |
- Без особых ухищрений нельзя создавать GUI приложения.
- Отсутствует механизм обработки событий.
|
Область применения: |
- Различные консольные утилиты, создание DLL файлов, CGI
скрипты.
|
|
|
PowerBASIC for Windows
7.0 |
Это уже зрелый компилятор для Win32. По качеству
кодогенерации не уступает многим С++ и Pascal компиляторам.
Получаемые EXE и DLL файлы отличаются небольшим размером и
высоким быстродействием. Компилятор оптимизирующий,
однопроходной, с высокой скоростью компиляции. Размер
генерируемых EXE файлов от 5 кбайт. Возможно создание
стандартных EXE и DLL приложений. В дистрибутив входит также
PowerBASIC COM Browser, позволяющий автоматически генерировать
интерфейсы к COM серверам. |
|
Достоинства: |
- Поддержка COM automation, создание COM
client/controller, возможность прямой работы с
IUnknown/Dispatch Interface.
- Встроенные типы данных совместимые с Pascal и C (WORD,
DWORD, POINTER, etc).
- Арифметика указателей, указатели на функции. Поддержка
Events & Сallbacks.
- Инлайн ассемблер, с поддержкой плавающей арифметики и
команд MMX.
- Поддержка Client/Server Network Communications - TCP/UDP
for E-mail, FTP, etc.
- Создание многопоточных приложений.
- Возможность размещения переменных в регистрах
процессора.
- Наличие препроцессора.
- Имеется отладчик.
|
Недостатки: |
- PB использует собственной формат файла ресурсов, имеющий
расширение .PBR Ресурсы необходимо скомпилировать в .RES
файл, а затем конвертировать утилитой PBRes в .PBR файл,
после чего можно подключать их к проекту. Причем 6 и 7
версии компилятора используют каждая свой формат .PBR файлов
и они не совместимы между собой. Т.е. если вам попадет
исходник с .PBR файлом созданным в 6 версии, вы не сможете
его откомпилировать в 7 версии без конвертации файлов
ресурсов.
- Отсутствие возможности линковки многоязычных модулей.
Компилятор сразу выдает EXE файл, без создания .OBJ файла.
- Примитивный редактор кода, по функциональности чуть
лучше Блокнота. Понятно, что его создатели боролись за
минимальный размер дистрибутива, но все-таки можно было
сделать его более удобным. Вместо PBEdit, можно использовать
RAD Developer 1.2 for PowerBasic, похожую на среду VB.
|
Область применения: |
- Создание различных приложений для платформы Windows.
Если требуется написать небольшую и быстродействующую
программу, то PowerBasic for Windows, несомненно, будет
лучшим выбором. Также есть довольно много коммерческих
расширений для компилятора, например позволяющих создавать
на PB ActiveX сервера (in-process/out-process), различные
библиотеки компрессии, и т.д.В ближайшее время должна
появится версия PowerBasic для Linux.
|
|
|
PureBasic |
http://www.purebasic.com/ |
|
PureBasic 3.51 |
Довольно “молодой” компилятор, первый релиз вышел в 2000
году. Сейчас доступны версии для платформ Windows, AmigaOS,
Linux. В Windows версии компилятор генерирует ассемблерный
вывод, который затем компилирует NASM с использованием
библиотек от ANSI С компилятора LccWin32. Возможно создание
стандартных EXE, DLL файлов. Синтаксис языка очень простой и
максимально приближен к обычному Basic`у . Высокая скорость
компиляции. Программы получаются компактные и очень быстрые.
Благодаря поддержке DirectX возможно создание несложных 3D
игрушек. В дистрибутив PureBasic входит большое количество
примеров. |
|
Достоинства: |
- Встроенный ассемблер.
- Создание многопоточных приложений. Указатели на функции
и метки.
- Поддержка DirectX, встроенные функции для работы с 3D
графикой и текстурами, воспроизведение аудио/видео файлов,
функции компрессии данных в памяти.
- Функции NetworkConnection.
- Работа с базами данных через ODBC.
- Простое программирование CD-привода, джойстика, звуковой
карты.
- Встроенный отладчик.
|
Недостатки: |
- Из-за того что код сначала конвертируется в ассемблер, а
уже затем компилируется, скорость трансляции невысока.
- Поддерживается всего 4 типа числовых данных (Byte, Word,
Long, Float).
- Невозможность линковки .RES файлов с приложением. Можно
лишь только указать иконку для создаваемого EXE файла.
- Нет поддержки COM automation.
- Компилятор еще довольно "сырой", и автор прямо просит
слать ему на мейл баг репорты…
|
Область применения: |
- Скорее всего, создание мультимедиа приложений и игрушек.
|
|
|
Rapid-Q |
http://www.basicguru.com/abc/rapidq/ |
|
Rapid-Q 1.0 |
"Самодельный" Freeware компилятор написанный William Yu на
Delphi. Дистрибутив содержит консольный компилятор Бейсика в
байт код, примитивную IDE среду с дизайнером форм, и две
библиотеки. Процесс компилирования происходит так, файл с
исходным тестом транслируется в байт код, а после этого он
"прошивается" в секцию ресурсов одного из файлов RAPIDQ32.LIB
или RAPIDQCC.LIB, в зависимости от того требуется консольное
или GUI приложение. После чего, файл переименовывается в EXE.
Поскольку "каркасные" файлы написаны на Delphi, и байт код
интерпретируется виртуальной машиной, полученные EXE файлы
работают довольно медленно, хотя и не требуют внешних run-time
DLL. |
Синтаксис Бейсика используемый в Rapid-Q, очень похож на
VB. Можно использовать готовые визуальные комноненты типа
TextBox, TabStrip, Image, etc. Каждый компонент поддерживает
несколько событий: OnClick, OnDblClick, etc и множество
свойств. Также можно создавать собственные компоненты на
основе имеющихся. Есть поддержка COM automation, с
использованием "позднего" связывания. Для работы с базами
данных в Rapid-Q встроена поддержка MySQL. |
|
Достоинства: |
- Бесплатность компилятора.
- Объектно-подобный синтаксис, возможность создания почти
настоящих компонентов.
- Частичная поддержка COM automation с использованием
"позднего" связывания.
- Поддержка DirectX, встроенные функции для работы с 3D
графикой.
- Дизайнер форм.
|
Недостатки: |
- Размер получаемых EXE файлов от 300 кбайт, нет
возможности создания DLL.
- Невысокая скорость работы скомпилированных программ.
- Нельзя создавать MDI формы.
- Нет функций для чтения/записи бинарных файлов.
|
Область применения: |
- Несложные SDI приложения, не требующие быстрого
исполнения. Можно делать простые игрушки, что-то типа
тетриса.
|
|
|
IBasic |
http://www.pyxia.com/ |
|
IBasic 1.96 |
Shareware транслятор бейсик-подобного языка. Первый релиз
появился в 2001 году, несмотря на быстрое развитие, все еще
довольно примитивен, да и компилятором его назвать можно
довольно условно, исходный текст на IBasic конвертируется в
.RES файл, а затем просто дописывается к каркасному EXE файлу.
Размер результирующего EXE от 370 Кб, если используется
DirectX от 420 Кб. При запуске приложения код программы
интерпретируется, из за чего он работает довольно медленно.
Слабый синтаксический анализатор IBasic`а
рекурсивно-нисходящего типа, реализован очень небрежно,
пропускаются грубые ошибки в виде незакрытых скобок, кавычек,
и т.д. В трансляторе есть поддержка DirectX. |
|
Достоинства: |
|
Недостатки: |
- IBasic это интерпретатор, отсюда низкая скорость работы
и все ошибки проявляются во время работы, даже в
"скомпилированном" EXE файле.
- Примитивный диалект Бейсика, нет указателей на функции,
нет поддержки Events & Callbacks.
|
Область применения: |
- Создание простых приложений, возможно несложных игрушек.
|
|
|
XPB! Basic |
www.xpbbasic.com |
|
XPB! Basic 1.12 |
В отличие от IBasic, XPB это настоящий компилятор, размер
создаваемых GUI приложений от 4 кбайт, консольных от 2 кбайт.
Также можно создавать DLL и OBJ файлы. Однако, этот диалект
Бейсика самый примитивный из всех представленных. В XPB есть
только два типа числовых данных: Integer и Float, причем числа
с плавающей точкой имеют точность только до 2 знаков после
запятой, в инструкции говорится, что арифметика с плавающей
точкой будет реализована в более поздних версиях. Есть
встроенная обработка событий, можно использовать диалоги из
ресурсов. |
|
Достоинства: |
- Небольшой размер генерируемых EXE и DLL файлов.
- Встроенный линкер и компилятор ресурсов.
|
Недостатки: |
- Нет поддержки арифметических операций с плавающей
точкой.
- Примитивный синтаксис языка, подходит только для
начинающих программистов.
- Медленная компиляция.
|
Область применения: |
- XPB версии 1.12 пока еще не пригоден создания сколько
нибудь ценных приложений.
|
|
|
REALbasic |
http://www.realsoftware.com/ |
|
REALbasic 5.2 |
Среда разработки этого языка внешне напоминает VB, но
чрезвычайно неудобная. Такое впечатление, что создатели
REALbasic своим творением не пользуются и не понимают, как
должна работать нормальная RAD среда. Неудобный дизайнер форм,
неудобный редактор кода, криво сделанная справочная система,
глючный компилятор создающий гигантские EXE файлы (программка
"Hello word" будет весить от 1.5 мбайт!). Все это наводит на
закономерную мысль, кому и для чего нужен весь этот байтовый
хлам? Лучше уж использовать VB. Единственная полезная фича в
REALbasic - это возможность создавать приложения для
Macintosh. |
|
Достоинства: |
- Есть возможность использования ActiveX контролов.
- Можно компилировать приложения для Carbon/Mac OS X.
|
Недостатки: |
- Неудобная RAD среда.
- Компилятор создает огромные EXE файлы.
|
Область применения: |
- Под Windows однозначно не имеет смысла использовать этот
компилятор, про Mac OS ничего сказать не могу, но наверняка
и там есть более удобные инструменты разработки приложений
на Бейсике.
|
|
|
BCX |
http://bcx.basicguru.com |
|
BCX 2.78 |
Бесплатный транслятор Бейсика в ANSI C. Для компиляции
приложений необходимо установить С компилятор LCC-Win32. Язык
представляет собой смесь Qbasic, PowerBasic, и VB. Можно
использовать все возможности имеющиеся в языке С. Транслятор
может создавать GUI, консольные и DLL приложения. BCX удобен
для бейсик-программистов изучающих С, можно ввести программу
на Бейсике, оттранслировать ее в С, а затем сравнивать два
листинга…Доступны исходные тексты транслятора на
Бейсике. |
|
Достоинства: |
- Бесплатность транслятора.
- В код на Бейсике, можно вставлять фрагменты на С и
ассемблере.
- Есть исходники.
|
Недостатки: |
- Примитивный синтаксический анализатор, основную работу
он переваливает на С компилятор, в результате чего
большинство ошибок всплывает на этапе трансляции С кода.
- BCX порадует любителей
работы в командной строке, для автоматизации трансляции
приложений, прийдется использовать несколько .BAT
файлов.
|
Область применения: |
- С помощью BCX можно относительно просто создавать
консольные и DLL приложения на
Бейсике, для серьезной работы этот транслятор
малопригоден.
|
|
|
В заключении привожу таблицу сравнительных характеристик
описанных компиляторов. Поясню некоторые позиции: |
|
Тип генерируемого кода: |
- Native - машинный код.
- Bytecode - байт код для виртуальной
стековой машины. Пример "байткодных" компиляторов: Forth или
Java.
|
|
Сигнатура создаваемого PE файла:
|
- PE COFF - файл полностью соответствует
формату PortableExecutables, т.е. он может быть,
впоследствии обработан программами-упаковщиками типа: UPX,
Aspack, или навесными защитами: Asprotect, Fusion.
- PE Corrupted - структура PE файла
нарушена, это может быть в случае когда исполняемый файл
"собирается" из нескольких кусков, например к "каркасному"
EXE дописывается секция ресурсов содержащая байт код. И хотя
такой файл запускается без проблем, программы упаковщики и
им подобные, не могут обрабатывать такие файлы.
|
|
Загрузка внешних DLL: |
- Неявная - При неявной компоновке
функции загружаемой DLL добавляются в секцию импорта
вызывающего EXE файла.
- Явная - При явной загрузке программисту
самому придется позаботиться о загрузке DLL и подключении
экспортируемых функций. Пример: hRTFLib =
LoadLibrary("RICHED32.DLL")
|
|
|
|