FreeBASIC

平台支持

FreeBASIC 現在可以運行在64位和32位的 Windows、GNU/Linux，以及16位的 DOS系統。也可以為 Xbox 創建應用程式。越來越多的平台將會被支持。運行時庫被設計成可移植的。所有第三方工具均使用來自 GNU Binutils。系統上編譯器 100% 用 FreeBASIC 代碼寫成，使得可以簡單的自舉而不需要依賴太多的不可移植工具。

現代程式語言特性支持

FreeBASIC作為一種高級程式語言，支持面向過程、物件導向和元編程。

調試支持

完全支持GDB（GNU 調試器），數組越界檢查（只有使用 -exx 命令行選項），空指針檢查（同上）。

圖形界面支持

該項目提供了與常見程序庫的簡單的綁定，比如：C 運行時庫、Allegro、SDL、OpenGL、GTK+、Windows API等，同時也提供了一些示例程序。
它使用GNU Binutils軟體開發工具作為後端，除了動態和靜態庫，還可以製作控制台和圖形／GUI可執行文件。FreeBASIC完全支持C庫和部分C++庫。這使得程式設計師可以使用和創建C和許多其他語言的庫。
FreeBASIC還不是一個優化編譯器，但是它的速度被認為接近主流工具，如GCC。

語法

FreeBASIC語法試圖儘量保持接近BASIC語法，特別是QuickBASIC。雖然語法上試圖保持與其前輩一致，FreeBASIC還是遵循了一些現代的標準和編碼實現。具有標準的過程特性以及物件導向特性，如對象、運算符重載、函數重載和命名空間等等，已經被加入到FreeBASIC中。
FreeBASIC的行在遇到行尾字符或冒號時結束。因此不需要使用特殊字符（如C語言中的分號）來通知編譯器此行結束。多條語句可以通過冒號:分割寫在一行里。
FreeBASIC支持塊注釋和行尾注釋。整行注釋使用一個撇號'，塊注釋從/'開始，到'/結束。

兼容性

FreeBASIC繼承自QuickBASIC。為了使FreeBASIC與現代的工具兼容並且具有高級編程特性，在開發FreeBASIC的時候還是進行了一些修改的。而-lang選項的設置使得FreeBASIC編譯器也能夠適應GCC和QuickBASIC兼容語言。
- 當選擇FB語言設置時（命令行參數為-lang fb），將開啟所有的FreeBASIC新特性，並且不允許使用QuickBASIC的"hackish"特性（該特性不符合現代編程實踐）。
- FB-Lite語言設置（-lang fblite）提供了訪問大多數FreeBASIC中新的非物件導向的特性，但是允許使用與老版本BASIC類似的代碼風格。語法規則，如允許隱變量、後綴、GOSUB / RETURN、行號等等。
- QB語言設置（-lang qb）與-lang fblite類似，但是它更專注於複製QBASIC式的行為。-lang qb被設計用來使為QBASIC寫的程序能夠更容易地運行，在有的情況下-lang fblite的兼容性不夠好，這時-lang qb就會很有用。

示例代碼

和QBasic一樣，在屏幕上寫入一行文本的程序可以寫成如下的簡單語句：
Print "Hello, World!"Sleep
而且也加入一些物件導向的性質，例如動態連接庫，運算符重載，以下是物件導向的例子代碼：
/'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'/

圖形庫

FreeBASIC擁有一個內置的2D軟體圖形庫，與QuickBASIC兼容，為用戶提供了簡單的圖形元素（如矩形，線和圓）、位塊傳輸以及一些QuickBASIC的圖形庫中沒有的附加特性。圖形庫本身並不依賴於作業系統，因此可以跨平台使用。
雖然圖形庫是內置的，但是只有在選擇使用時才會被包含，這可以簡單地通過調用FBgfx Screen命令來實現。通用庫（如OpenGL+）為了硬體加速使用API（Windows、Linux等）來創建一個窗口可以不包含FreeBASIC的圖形庫。

未來的開發

FreeBASIC仍然繼續開發，目標是成為一個GCC前端，這將帶來許多C++和其他物件導向程式語言中的新特性，高級優化技術，以及可以移植到任何現代系統上的能力。
0.17版中已經加入了物件導向程序設計的類，擴展了基本的數據類型。還有更多的新特性值得期待。