FreeBASIC

維基百科,自由的百科全書
跳至導覽 跳至搜尋
FreeBASIC
The FreeBASIC Logo
編程範型面向過程 / 面向對象
設計者Andre Victor
實作者The FreeBASIC Development Team
面市時間2004
當前版本
    Module:EditAtWikidata第29行Lua錯誤:attempt to index field 'wikibase' (a nil value)
    型態系統靜態
    操作系統DOSLinuxMicrosoft Windows, FreeBSD
    許可證GNU GPLStandard libraries licensed under the GNU LGPL
    網站http://www.freebasic.net
    受影響於
    QuickBASICC

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

    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[2]

    語法[編輯]

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

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

    FreeBASIC支持塊注釋和行尾注釋。整行注釋使用一個撇號',塊注釋從/'開始,到'/結束。

    兼容性[編輯]

    FreeBASIC繼承自QuickBASIC[1]。為了使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前端[3],這將帶來許多C++和其他面向對象編程語言中的新特性,高級優化技術,以及可以移植到任何現代系統上的能力。

    0.17版中已經加入了面向對象程序設計的,擴展了基本的數據類型。還有更多的新特性值得期待。

    參考[編輯]

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

    外部連結[編輯]