FreeBASIC вопросы:
Приступая к работе с FreeBASIC вопросы
Расширенно о FreeBASIC
См. также
FreeBASIC вопросы
Что такое FreeBASIC?
FreeBASIC является свободной, 32-разрядной версией
компилятора BASIC для Windows (32-разрядная версия), 32 битной
защищенного режима DOS (COFF исполняемые, как DJGPP), и Linux
(x86). Вначале это была попытка создать код, совместимый с
Microsoft QuickBASIC,в качестве бесплатной альтернативы. Однако
компилятор быстро вырос в мощный инструмент. При установке по
умолчанию к компилятору можно легко подключить такие библиотеки
как Allegro, SDL, OpenGL, и многие другие.
Даже несмотря на то, что синтаксис носит характер, совместимый с
QuickBASIC, в FreeBASIC внесены множество новых функций, в том
числе указатели на переменные и функции, и неподписанные типы
данных.
FreeBASIC компилятор написан на самом FreeBASIC, однако
библиотеки написаны на языке C.
Наверх
Кто несет ответственность за FreeBASIC?
Первые версии FreeBASIC были разработаны исключительно
V1ctor. Более поздние версии разрабатывались многими людьми, в
том числе
Lillo, который разработал
порт под Linux и графическую библиотеку и
DrV,
который разработал порт под DOS.
Смотрите страницу
FreeBASIC
разработчики .
Наверх
Почему я должен использовать FreeBASIC, а не QBasic?
FreeBASIC имеет бесчисленные преимущества по сравнению с
QBasic, QuickBASIC, PDS, и Visual Basic для DOS.
- Он поддерживает 32-битные процессоры, тогда как QBasic
предназначен только для 16-разрядных процессоров.
- Он поддерживает современные операционные системы. Имеет порты для Windows,
Linux, и 32-разрядной DOS.
- Он поддерживает современные интерфейсы, такие как SDL, DirectX, Win32, и OpenGL.
- Он распространяется под лицензией GPL, что означает бесплатность и
легальность использования, в отличие от большинства копий QuickBASIC / других
бейсиков.
- Библиотека распространяется под LGPL с дополнительным исключением, то есть
вы можете делать все, что вы хотите с вашими составленными программами, в том
числе продавать их (внимание: возможные проблемы с графической библиотекой).
- FreeBASIC во много раз быстрее, чем QuickBASIC / другие
Basic.
- FreeBASIC поддерживает многие функции, такие как указатели и встроенный
ассемблер, которые не доступны в QuickBASIC / других BASIC.
- QuickBASIC поддерживает только DOS. В Windows поддержка DOS эмуляции и,
следовательно QuickBASIC становится малопригодным с каждой новой версией
Windows. Например Windows
Виста не поддерживает графику или полноэкранный текст для приложений DOS.
Наверх
Почему я должен использовать FreeBASIC, а не какой-то
другой новый BASIC?
FreeBASIC имеет много характеристик, которые делают его
более желательным, чем большинство других реализаций языка
Basic:
- FreeBASIC придерживается к стандартному
Basic синтаксису, что делает его проще в
использовании.
- FreeBASIC компилируется в нативное приложение, не байт-код.
- FreeBASIC имеет большое сообщество, которое принимает активное участие в
развитии FreeBASIC.
- FreeBASIC использует стандартные методы доступа к общим библиотекам C. SDL,
например, является стандартным C SDL, не новым набором резидентных команд.
- FreeBASIC имеет порты для Windows, Linux, и 32-разрядной DOS. Он сохраняет
единый синтаксис между тремя портами.
Наверх
Насколько быстр FreeBASIC?
Большинство тестов, которые осуществили пользователи
показали что FreeBASIC значительно быстрее, чем QuickBASIC, а
так же быстрее, чем большинство других GPL или коммерческих
бейсиков, и часто приближается к GCC по скорости.
В
Computer Languages Benchmark Game,
независимая группа испытания, выдала результат скорости
FreeBASIC для Linux в 1,8 раза медленнее, чем GNU g++. Тесты о
вычислениях, доступе к памяти и скорости доступа к диску в
консольных программах и графические возможности не были
протестированы. Но в любом случае, это очень неплохо для FreeBASIC,
если учесть что
Freebasic пока еще не
оптимизирующий компилятор.
Одной из областей, где существует заметный дефицит скорости, это
в 32-битных режимах консоли. 32-разрядные операции в консольном
режиме значительно медленнее чем в 16-битных консолях, и это
видно на примере QuickBASIC. В версии DOS, некоторые операции
ввода / вывода могут быть медленнее при переносе 16-битных BASIC
программ, но все таки многие оптимизации, сделанные в
FB, выравнивают скорость.
Наверх
Насколько совместим FreeBASIC с QuickBASIC?
FreeBASIC графическая библиотека эмулирует наиболее часто
используемые в QB графические режимы (7,12,13) и реализует все
примитивы рисования QB.
Большинство проблем с совместимостью могут возникнуть в
результате использования конкретных методов низкого уровня
8086-DOS аппаратов , в старых программах QB. Программирование
VGA порта, DOS прерываний, переключение сегмента памяти, работа
напрямую с памятью экрана или воспроизведения музыки через
динамик ПК напрямую не поддерживаются, но они где-то могут быть
сэмулированы с помощью внешних библиотек.
Другие проблемы в портировании старых программ QB, как
столкновения имени переменной с новыми ключевыми словами FB,
переменные с именем ключевого слова QB, суффиксы для типов,
целочисленные размеры (по умолчанию являющийся 32 битными в FB),
решены, собирая FreeBASIC программы с опцией командной строки
-lang qb .
Смотрите:
Различия между FreeBASIC и
QuickBASIC.
Наверх
Насколько совместим FreeBASIC с Windows? DOS? Linux?
FreeBASIC полностью совместимый с Windows, MS-DOS,
FreeDOS и Linux. Когда вы планируете создавать программу для
всех трех платформ, вы должны помнить про доступность некоторых
API , использующих OpenGL, потому что OpenGl
будет работать в Windows и Linux, но не будет в DOS(его
там просто нет).
Наверх
Есть ли в FreeBASIC поддержка объектно-ориентированного
программирования?
Наверх
Каковы планы на будущее с списке FB / ToDo?
Вы можете узнать, что планируется для будущих релизов,
непосредственно глядя на файл TODO для компилятора, в настоящее
время в SVN
здесь.
Наверх
Могу ли я запрограммировать GUI приложений в FB?
Да, Вы можете. Заголовки, разрешающие Вам вызывать API
GUI Windows и Linux, предоставлены соответствующими версиями, но
программы не переносимы.
Есть некоторые обертки API и экспериментальные RAD приложения ,
которые создают непереносимый код GUI для Windows.
Для переносимого программирования существуют библиотеки-оболочки
GUI, такие как GTK или wx-Widgets. Заголовки к GTK предоставлены
в FB, но функциональность ООП, которая в настоящее время
доступна в FB, предотвращает напрямую использование wx-Widgets,
поэтому для wx-Widgets придется использовать обертки. Кроме
того, программы, создаваемые с этими библиотеками, могут
потребовать, чтобы пользователь установил библиотеки-оболочки в
их системах. На момент выхода версии 0.90
существуют обертки для Gui
библиотек IUP и
FLTK, эти библиотеки переносимы (windows,
linux).
Для игр и маленьких графических приложений есть некоторые
специфичные для FB библиотеки, которые имеют простые средствами
управления, Такие тоже полностью переносимы.
Наверх
FB подходит для сложных / больших приложений?
Компилятор FB написан на самом
FreeBasic, а это более 120 000 строк кода. Такой объем
строк подразумевает довольно сложное приложение.
Наверх
Могу ли я использовать нелатинские кодировки в моих
FreeBASIC приложениях?
FreeBASIC имеет поддержку Unicode, предоставленную
C RinTime библиотекой
для платформ
Windows, Linux. Это
означает, что в FB DOS нет возможности использовать Unicode. На
Windows и
Linux
платформах можно использовать
Wstrings
для поддержки нужной кодировки. Для файлов оператор OPEN имеет
дополнительный параметр
Encoding
для различных кодировок. Поскольку FreeBASIC кодирован сам в FB,
это означает, что Вы можете кодировать свой исходник в редакторе
с Unicode поддержкой. Так комментарии, и строковые литералы
могут быть в любом наборе символов (ключевые слова, метки ,
имена для переменных и процедуры должны быть сохранены в наборе
ASCII..).
Вывод на графический экран отличается от консоли. В консольном
режиме wstring (юникод) печать поддерживается, если шрифт
консоли поддерживает их. Графический режим использует внутри
себя CP437 кодировку (старую DOS кодировку) шрифта, так
не-латинские символы для вывода требует на заказ растровый шрифт
и использование
Draw String
оператора. Существуют инструменты сторонних разработчиков для
создания внешних шрифтов и конвертации его в формат DRAW STRING.
Наверх
Я могу использовать порты Serial/COM и Hardware/CPU в
FB?
Да, FB имеет встроенные функции для доступа к serial/COM
портам и hardware/CPU портам без необходимости внешних
библиотек. Смотрите
ОС особый FAQ's
подробно для вашей операционной системы, и
Open Com,
Inp
и
Out .
Наверх
Приступая к работе с FreeBASIC вопросы
Где я могу найти более подробную информацию о FreeBASIC?
Наверх
Почему не открывается QB GUI, когда я начинаю FreeBASIC?
QB имел интегрированную среду разработки (IDE). FreeBASIC
в своей поставке не имеет.
FreeBASIC включает только компилятор, то есть
FB не полный клон QuickBASIC. Компилятор имеет режим
консольного приложения. Он будет принимать BAS файл в командной
строке, и собирать исполняемый файл.
Вы можете создать файл BAS в простейшем текстовом редакторе в
вашей ОС (Notepad, EDIT, nano,...), затем запустить компилятор.
Если вы не можете жить без подсветки синтаксиса, подсветки
ошибок, файлов-проектов, интегрированного отладчика, контекстной
помощи или других особенностей, вам нужно IDE. Смотрите
ОС особый FAQ's для IDE и других
редакторов. От себя добавлю популярные
IDE,
используемые с
FB
(FbEdit, FbIde, Geany)
Наверх
Могу ли я иметь автономную версию документации?
Официальная документация для FB это
WIKI , как правило, в нее вносятся все последние
изменения.
Время от времени
WIKI преобразуется в
нескольких автономных читаемых форматов.
CHM
для пользователей Windows, другие форматы здесь:
sf.net/.../Documentation, CoderJeff's
страница (имеет FBHELP, но не имеет актуальную версию
руководства):
execulink.com/.../docs.html.
Наверх
Что за идея с диалектами FB?
Идея состоит в том, чтобы позволить добавлять улучшения в
язык при сохранении обратной совместимости с QB кодом.
Причудливый синтаксис QB, не совместим с более жестким стилем
ООП. Новые ключевые слова FB часто сталкивался с именами
переменных в старых программах QB. В QB разрешено использовать
точки в именах переменных и процедур, но в FB
они используются для доступа к полям UDT.
Три диалекта (-lang fb, -lang qb, -lang fblite) позволяют
объединить лучшее из "двух миров".
- lang fb обеспечивает основу, необходимую для ООП
программирования. Другие диалекты не дают доступ к ООП.
- lang qb позволит разработчикам продолжать увеличивать совместимость
с QB программами. Новые ключевые слова в FB могут использоваться, но перед ними
ставятся два подчеркивания. Для примера, Getmouse можно использовать
так __Getmouse
- lang fblite другая FreeBASIC языковая совместимость, с поддержкой QBASIC-совместимого
стиля кодирования.
Наверх
Почему моя программа аварийно завершается, когда я
определяю массив больше, чем хх?
Как правило, это происходит потому, что вы сделали
automatic
массив фиксированной длины слишком большим, и это повреждает
стек программы. У вас есть несколько вариантов:
- если это возможно, уменьшить размер automatic
массива
- создать массив переменной длины
- определение массива с пустым списком индексом (используя Dim),
или
- определение массива, где в качестве индекса нужно установить переменную
вместо числовых литералов, Констант или
Перечислений (используя Dim),
или
- Объявить массив с помощью ReDim
- Выделить больше памяти для стека программы с помощью опции -t
командной строки при
компилировании. По умолчанию опция -t имеет 1024 (килобайт).
Примечание: плохая идея использовать очень большие значения
здесь.
- Создать статический массив, определяя массив с ключевым словом Static
вместо Dim (только локально видно, но в
глобальном масштабе сохраняется)
- Определить массив с помощью ключевого слова Shared
после слова Dim (это делает массив
полностью глобальным)
- Использовать Указатели и
Функции памяти с операторами Allocate
и Deallocate для управления памятью.
Это предпочтительный способ для хранения больших буферов, но данный способ не
для новичков.
Массивы статической и переменной длины не используют
стек программы для своих данных, поэтому в какой-то мере
решают проблему с автоматическими массивами фиксированной
длины. Смотрите
Классы
памяти для получения дополнительной информации. Обратите
внимание, что хранить огромные буферы как статические или
увеличивать размер стека не очень хорошая идея, так как это
увеличивает фиксированный объем памяти, необходимый для
загрузки и запуска вашей программы (даже если большая часть
памяти нужна для использования позднее) и может привести к
падению производительности, или даже отказу загрузки вашей
программы.
Наверх
Расширенно о FreeBASIC
Как связать программу с C библиотеками?
Библиотеки языка С создаются и подключаются почти таким
же способом на FreeBASIC. Каждая библиотека, которая входит в
FreeBASIC, имеет заголовочный файл с именем "Имя библиотеки.bi",
в котором для включения записывается метакоманда
#inclib
и
Declare заявления для
декларации функций. FreeBASIC включает в себя сотни BI файлов,
см. полный список заголовков библиотеки
здесь.
Наверх
Могу ли я использовать отладчик?
FreeBASIC может использовать отладчик, совместимый с GNU GDB.
- Win32: Insight является удобной для пользователя оболочкой
для GDB см. Win32 связанный FAQ.
- DOS: Имейте в виду, что для DOS также присутствует продукт под названием "Insight",
но он имеет реальный режим отладчика, не пригодный для работы с FreeBASIC,
используйте GDB или какой-либо другой DPMI32 отладчик.
- Linux: используйте GDB.
Наверх
Что за файлы AR.exe, AS.EXE и LD.EXE файлы, включенные в
FB?
AS.EXE - это GAS ("GNU assembler"). Он всегда участвует в
компиляции. LD.EXE - это "GNU linker",участвует в создании
исполняемых файлов. AR.EXE - это "GNU archiver",по факту
архиватор, создающий .a библиотеки.
Наверх
Есть ли предел размера моих исходных файлов?
Да, так как FreeBASIC представляет собой 32-разрядный
компилятор , который может работать с исходными файлами
теоретически до 4GB или 4294967296 байт, однако ваш объем
оперативной памяти должен быть значительно выше размера вашего
исходника, в противном случае компиляция не завершится или будет
выполняться очень медленно.
Наверх
Могу ли я написать ОС в FreeBASIC?
Да и нет. Если вы действительно настаиваете на написании
ОС с помощью FB, ответ ДА. Если вопрос в том, является ли это
хорошей идеей, даже если вы не новичок , ответ НЕТ. Несколько
подводных камней:
- Разработка ОС трудна, см. http://www.osdev.org/wiki/Getting_Started .
- FB не поможет вам обойти необходимость знаний и использования ассемблера,
даже знания языка C почти наверняка понадобятся.
- Вы не сможете использовать большинство функций FB , таких как графика,
файловый ввод / вывод, потоки, управление памятью, консольный ввод\вывод ... с
простотой контролировать математику и логику. Если вы нуждаетесь в тех же
библиотечных функциях, вам придется переопределять (то есть переписывать
самому) их.
FreeBASIC опирается на GCC, и доступные
сведения о разработке ОС с помощью языка C применяются к
FreeBASIC также. FB поможет вам ни больше, ни меньше, чем
GCC.
Наверх
Я занимаюсь разработкой ОС, может ли FreeBASIC быть
портирован на мою OS?
Если ваша ОС имеет функциональность DOS с DPMI32 (консольный ввод\вывод (позиционирование,
открытие множества файлов, ...),файловый ввод\вывод, управление памятью) и
имеет порт GCC, тогда ответ на ваш вопрос ДА. Если у вас есть частично
совместимый C компилятор с библиотеками, ответ МОЖЕТ БЫТЬ. Вы не сможете
создать порт FB к 16-разрядной ОС.
Наверх
FreeBASIC поддерживает возвращаемые ссылки от функций,
как в C++?
В версии 0.24.0b и ранее, это не представляется возможным. Тем не менее,
функциональность для этого в настоящее время существует в исходном коде для
предварительных версий. (мое примечание: В версии 0.90 уже реализовано).
Процедуры теперь могут возвращают ссылки с помощью
ByRef as datatype
для возвращаемого типа.
Наверх
См. также