
_START_ARTICLE_
FreeBASIC
_START_SECTION_
平台支持
_START_PARAGRAPH_
FreeBASIC 现在可以运行在64位和32位的Windows、GNU/Linux，以及16位的DOS系统。也可以为Xbox 创建应用程序。越来越多的平台将会被支持。运行时库被设计成可移植的。所有第三方工具均使用来自GNU Binutils。系统上编译器100% 用 FreeBASIC 代码写成，使得可以简单的自举而不需要依赖太多的不可移植工具。
_START_SECTION_
现代编程语言特性支持
_START_PARAGRAPH_
FreeBASIC作为一种高级编程语言，支持面向过程、面向对象和元编程。
_START_SECTION_
调试支持
_START_PARAGRAPH_
完全支持GDB（GNU 调试器），数组越界检查（只有使用-exx 命令行选项），空指针检查（同上）。
_START_SECTION_
图形界面支持
_START_PARAGRAPH_
该项目提供了与常见程序库的简单的绑定，比如：C 运行时库、Allegro、SDL、OpenGL、GTK+、Windows API等，同时也提供了一些示例程序。_NEWLINE_它使用GNU Binutils软件开发工具作为后端，除了动态和静态库，还可以制作控制台和图形／GUI可执行文件。FreeBASIC完全支持C库和部分C++库。这使得程序员可以使用和创建C和许多其他语言的库。_NEWLINE_FreeBASIC还不是一个优化编译器，但是它的速度被认为接近主流工具，如GCC。
_START_SECTION_
语法
_START_PARAGRAPH_
FreeBASIC语法试图尽量保持接近BASIC语法，特别是QuickBASIC。虽然语法上试图保持与其前辈一致，FreeBASIC还是遵循了一些现代的标准和编码实现。具有标准的过程特性以及面向对象特性，如对象、运算符重载、函数重载和命名空间等等，已经被加入到FreeBASIC中。_NEWLINE_FreeBASIC的行在遇到行尾字符或冒号时结束。因此不需要使用特殊字符（如C语言中的分号）来通知编译器此行结束。多条语句可以通过冒号:分割写在一行里。_NEWLINE_FreeBASIC支持块注释和行尾注释。整行注释使用一个撇号'，块注释从/'开始，到'/结束。
_START_SECTION_
兼容性
_START_PARAGRAPH_
FreeBASIC继承自QuickBASIC。为了使FreeBASIC与现代的工具兼容并且具有高级编程特性，在开发FreeBASIC的时候还是进行了一些修改的。而-lang选项的设置使得FreeBASIC编译器也能够适应GCC和QuickBASIC兼容语言。_NEWLINE_- 当选择FB语言设置时（命令行参数为-lang fb），将开启所有的FreeBASIC新特性，并且不允许使用QuickBASIC的"hackish"特性（该特性不符合现代编程实践）。_NEWLINE_- FB-Lite语言设置（-lang fblite）提供了访问大多数FreeBASIC中新的非面向对象的特性，但是允许使用与老版本BASIC类似的代码风格。语法规则，如允许隐变量、后缀、GOSUB / RETURN、行号等等。_NEWLINE_- QB语言设置（-lang qb）与-lang fblite类似，但是它更专注于复制QBASIC式的行为。-lang qb被设计用来使为QBASIC写的程序能够更容易地运行，在有的情况下-lang fblite的兼容性不够好，这时-lang qb就会很有用。
_START_SECTION_
示例代码
_START_PARAGRAPH_
和QBasic一样，在屏幕上写入一行文本的程序可以写成如下的简单语句：_NEWLINE_Print "Hello, World!"Sleep_NEWLINE_而且也加入一些面向对象的性质，例如动态连接库，运算符重载，以下是面向对象的例子代码：_NEWLINE_/'A Vector motion class'/Type VectorW as IntegerH as IntegerDeclare Constructor (nW as Integer, nH as Integer)End Type Constructor Vector (nW as Integer, nH as Integer)W = nWH = nHEnd Constructor /'Create an object class'/Type ObjectPrivate:X as IntegerY as IntegerMovement as Vector PointerPublic:/'Create public methods, including a destructor for automated cleanup'/Declare Constructor (nX as Integer, nY as Integer)Declare Destructor ()Declare Sub SetMotion (Motion as Vector Pointer)Declare Sub Move ()Declare Property GetX as IntegerEnd Type /'Set initial coordinates'/Constructor Object (nX as Integer, nY as Integer)X = nXY = nYEnd Constructor /'Clean up allocated memory'/Destructor Object ()delete MovementEnd Destructor /'Set the motion Vector'/Sub Object.SetMotion (Motion as Vector Pointer)Movement = MotionEnd Sub /'Move the object based on its motion Vector'/Sub Object.Move ()X += Movement->WY += Movement->HEnd Sub /'A getter for X, as it's private'/Property Object.GetX as IntegerReturn XEnd Property /'MAIN CODE'/ /'Create a new instance of Object at coordinates 100, 100'/Dim Player as Object = Type<Object>(100, 100) /'Dynamically allocate a new Vector objectmoving left 10 units and down 5'/Player.SetMotion(new Vector (-10, 5)) /'Make the Player update its location'/Player.Move() /'Display new X, 90'/Print Player.GetX /'Because Player is a local variable, it's destructor iscalled at the end of scope automatically'/
_START_SECTION_
图形库
_START_PARAGRAPH_
FreeBASIC拥有一个内置的2D软件图形库，与QuickBASIC兼容，为用户提供了简单的图形元素（如矩形，线和圆）、位块传输以及一些QuickBASIC的图形库中没有的附加特性。图形库本身并不依赖于操作系统，因此可以跨平台使用。_NEWLINE_虽然图形库是内置的，但是只有在选择使用时才会被包含，这可以简单地通过调用FBgfx Screen命令来实现。通用库（如OpenGL+）为了硬件加速使用API（Windows、Linux等）来创建一个窗口可以不包含FreeBASIC的图形库。
_START_SECTION_
未来的开发
_START_PARAGRAPH_
FreeBASIC仍然继续开发，目标是成为一个GCC前端，这将带来许多C++和其他面向对象编程语言中的新特性，高级优化技术，以及可以移植到任何现代系统上的能力。_NEWLINE_0.17版中已经加入了面向对象程序设计的类，扩展了基本的数据类型。还有更多的新特性值得期待。