FreeBASIC 是一個 BASIC 語言的編譯器[2],可執行在Microsoft Windows、保護模式的DOSDOS擴充器)、Linux以及Xbox上。

FreeBASIC
The FreeBASIC Logo
編程範型程序導向 / 物件導向
設計者Andre Victor
實作者The FreeBASIC Development Team
面市時間2004
目前版本
  • 1.10.1(2023年12月25日;穩定版本)[1]
編輯維基數據鏈結
型態系統靜態
作業系統DOSLinuxMicrosoft Windows, FreeBSD
許可證GNU GPLStandard libraries licensed under the GNU LGPL
網站http://www.freebasic.net
啟發語言
QuickBASICC

FreeBASIC通過使用"QB"關鍵字可以在進階別上支援用QBASIC編寫的程式。許多用QBASIC寫的程式可以在不需任何修改的情況下編譯和執行在這個模式下。但是如果使用預設的參數來編譯的話,大部分的程式還是要進行一些修改的。

特性

平台支援

FreeBASIC 現在可以執行在64位元和32位元的 Windows、GNU/Linux,FreeBSD, 以及16位元的 DOS系統。也可以為 Xbox 建立應用程式(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[3]

語法

FreeBASIC語法試圖儘量保持接近BASIC語法,特別是QuickBASIC。雖然語法上試圖保持與其前輩一致,FreeBASIC還是遵循了一些現代的標準和編碼實現。具有標準的過程特性以及物件導向特性,如對象運算子多載函式多載命名空間等等,已經被加入到FreeBASIC中。

FreeBASIC的行在遇到行尾字元或冒號時結束。因此不需要使用特殊字元(如C語言中的分號)來通知編譯器此行結束。多條語句可以通過冒號:分割寫在一行里。

FreeBASIC支援塊注釋和行章節附註釋。整行注釋使用一個撇號',塊注釋從/'開始,到'/結束。

相容性

FreeBASIC繼承自QuickBASIC[2]。為了使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 Vector
	W as Integer
	H as Integer
	Declare Constructor (nW as Integer, nH as Integer)
End Type
 
Constructor Vector (nW as Integer, nH as Integer)
	W = nW
	H = nH
End Constructor
 
/'Create an object class'/
Type Object
	Private:
		X as Integer
		Y as Integer
		Movement as Vector Pointer
	Public:
		/'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 Integer
End Type
 
/'Set initial coordinates'/
Constructor Object (nX as Integer, nY as Integer)
	X = nX
	Y = nY
End Constructor
 
/'Clean up allocated memory'/
Destructor Object ()
	delete Movement
End Destructor
 
/'Set the motion Vector'/
Sub Object.SetMotion (Motion as Vector Pointer)
	Movement = Motion
End Sub
 
/'Move the object based on its motion Vector'/
Sub Object.Move ()
	X += Movement->W
	Y += Movement->H
End Sub
 
/'A getter for X, as it's private'/
Property Object.GetX as Integer
	Return X
End 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 object
moving 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 is
called at the end of scope automatically'/

圖形庫

FreeBASIC擁有一個內建的2D軟體圖形庫,與QuickBASIC相容,為使用者提供了簡單的圖形元素(如矩形,線和圓)、位塊傳輸以及一些QuickBASIC的圖形庫中沒有的附加特性。圖形庫本身並不依賴於作業系統,因此可以跨平台使用。

雖然圖形庫是內建的,但是只有在選擇使用時才會被包含,這可以簡單地通過呼叫FBgfx SCREEN命令來實現。通用庫(如OpenGL+)為了硬體加速使用API(Windows、Linux等)來建立一個窗口可以不包含FreeBASIC的圖形庫。

未來的開發

FreeBASIC仍然繼續開發,目標是成為一個GCC前端[4],這將帶來許多C++和其他物件導向程式設計語言中的新特性,進階最佳化技術,以及可以移植到任何現代系統上的能力。

0.17版中已經加入了物件導向程式設計的,擴充了基本的資料類型。還有更多的新特性值得期待。

參考

  1. ^ Release 1.10.1. 2023年12月25日 [2024年1月19日]. 
  2. ^ 2.0 2.1 Lee Seats. FreeBASIC the Successor to QuickBASIC. About.com. [2008-08-17]. (原始內容存檔於2008-10-19). 
  3. ^ The Computer Language Benchamarks Game FreeBASIC vs.gcc. [2008-04-28]. (原始內容存檔於2008-04-12). 
  4. ^ FreeBASIC Todo List on Sourceforge. [2007-07-31]. [永久失效連結]

外部連結