Обзор
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")
|
|
|
|