GW-BASIC

GW-BASIC
實作者Microsoft
发行时间1983年,​41年前​(1983
操作系统DOS
許可證专有
MIT许可证 (v1.0)[1]
啟發語言
IBM Cassette BASIC, IBM Disk BASIC, IBM BASICA
影響語言
QBasic, QuickBASIC, MSX BASIC

GW-BASIC是高級程式設計語言BASIC的一個方言版本。這個版本的BASIC最早是微軟為康柏開發的,時間應該是在1984年,這一年11月,微軟首次為IBM之外的計算機廠商提供OEM版本的DOS,GW-BASIC是作為MS-DOS的一個組成部分問世的。

GW-BASIC在MS-DOS發行版本中,於1991年6月由微軟的QBasic所取代。應社群要求公開GW-BASIC原始碼,因此2020年5月22日微軟開源1983年2月10日的8088組合語言版本(體驗) (页面存档备份,存于互联网档案馆)。[1]

名称

關於GW的含義,目前有三種說法,一種認為是以微軟早期程式設計師Greg Whitten的名字命名的,一種認為是用微軟創始人的名字Gates,William命名的,還有一種說法是開發人員給它取的一個戲稱gee-whiz(兩個英語的象聲詞,類似於中文裏吆喝牲口的聲音)。

特征

GW-BASIC和微軟提供給IBM PCBASICA完全相容,所不同的是,後者依賴於ROM中的BASIC直譯器,而前者並不需要,所以,GW-BASIC能在眾多IBM PC相容機器上運行,這就使它的使用範圍隨著PC相容機器的推廣而擴大。第一個流傳範圍較廣的GW-BASIC版本號為2.0,而最後推出的GW-BASIC版本號為3.23,時間大概是1988年。從那時起,如果沒有特殊說明,我們一般所說的GW-BASIC就是指的這個版本。

GW-BASIC運行速度較慢,這在很大程度上是因為它是一種互動式的開發工具——這種開發模式是BASIC的誕生地Dartmouth大學最早提出的。和很多早期的BASIC方言一樣,GW-BASIC缺乏很多進行結構化編程所需的語法成分,但是它足夠靈活,此外還擁有很多繪圖語句和一些簡單的發聲語句,這就足以使一個程式設計師用它開發一個簡單的遊戲軟體、商用軟體或者諸如此類的東西。它能夠在絕大多數PC上運行,這就給那些想要成為程式設計師的人提供了一個學習如何程式設計的廉價的途徑。

GW-BASIC擁有一個簡單的整合開發環境(IDE),所有的程式碼都必須有一個行號,沒有行號的語句被認為是需要立即執行的命令。用戶界面中,除螢幕底部的功能快捷鍵描述和頂部的版權聲明外,其他部分都用來顯示和編寫語句。源文件標準的保存格式是GW-BASIC特有的二進制壓縮格式,不過它也提供了一個選項,使得開發者可以用ASCII純文字格式保存原始文件。GW-BASIC的IDE提供了如下常用命令:RUN(執行目前的程式),LOAD(從磁碟載入原始碼),SAVE(把程式儲存到磁碟),LIST(顯示已打開的程式碼內容),SYSTEM(回到作業系統)。它們都可以出現在程式碼上,不過除SYSTEM外,上述用法還相當少見。

前面提到,GW-BASIC對結構化程序設計方法的支持非常差,所以對GW-BASIC程式設計者來講,能夠用它寫出具備良好結構的程式有很高的難度。在GW-BASIC裡,IF/THEN/ELSE條件語句必須在一行內寫完,儘管WHILE/WEND已允許包含多行代碼;自行定義的函數只能用類似於DEF FNf(x) = <關於x的數學函數> 這樣形式的一行語句來編寫(例如,DEF FNLOG(base,number)=LOG(number)/LOG(base));變數通常是通過變數名末端的一個表示類型的符號來確定其類型的:A$表示是一個字串,A%表示是一個整數,等等;通過使用DEFINT,DEFSTR等關鍵字,可以為一組使用相同字首的變數定義預設類型;其他變數其類型預設是單精度浮點數。

儘管GW-BASIC本身不支持結構化的編程,但編程者自己可以利用GOSUB和RETURN語句來實現相當於C語言中的函數調用,同時用DIM語句定義的數組和一個下標變量(可能需要定義更多,以應對INTEGER、STRING等多種不同數據類型)來表示函數參數棧,再用另一個數組和下標變量,用於在調用子函數前保存本函數的本地變量。通過這種方法,即可實現函數調用。

很多GW-BASIC程式設計者都是沒有經過訓練的,他們往往不明白編寫結構簡單的程式所能帶來的好處,因此就導致濫用GOTO語句的現象,他們往往不願意使用能完成同樣功能的結構化的語句。參見面條式代碼

GW-BASIC支援搖桿光筆輸入設備英语Light pen,但不支持滑鼠。它能夠讀寫磁碟檔案、LPT埠和COM埠,也能處理埠事件觸發,不過不能處理磁帶設備。它還能通過使用PLAY語句或SOUND語句來驅動IBM PC及其相容機器的標準內建喇叭發出聲音。

參考資料

  1. ^ 1.0 1.1 Turner, Rich. Microsoft Open-Sources GW-BASIC. Windows Command Line (Microsoft). [May 22, 2020]. (原始内容存档于2021-06-27). 

外部連結

  • microsoft/GW-BASIC: The original source code of Microsoft GW-BASIC from 1983 (页面存档备份,存于互联网档案馆

范型
过程式
面向对象
多范型
函数式
逻辑式
脚本语言
动态语言
Shell语言
ECMA-262
特定平台
.NET
JVM
特定领域
科学计算
GPU计算
  • Cg/HLSL
  • GLSL
  • Brook英语BrookGPU
  • OpenCL
  • CUDA/PTX英语Parallel Thread Execution
  • Futhark
  • SPIR-V英语Standard Portable Intermediate Representation
数据查询
可视化
传媒设计
 
其它
  • 分类 目录
  • 列表级条目 列表
  • 历史
  • 比较英语Comparison of programming languages
  • 时间线英语Timeline of programming languages
BASIC程序设计语言的方言(列表英语List of BASIC dialects
传统
  • Altair BASIC
  • Applesoft BASIC
  • Atari BASIC英语Atari BASIC
  • Atari Microsoft BASIC英语Atari Microsoft BASIC
  • Atari ST BASIC英语Atari ST BASIC
  • BASICA英语IBM BASIC
  • BASIC A+英语BASIC A+
  • BASIC Programming英语BASIC Programming
  • BASIC XE英语Optimized Systems Software#BASIC XE
  • BASIC XL英语Optimized Systems Software#BASIC XL
  • Casio BASIC英语Casio BASIC
  • Chipmunk Basic英语Chipmunk Basic
  • Color BASIC英语Color BASIC
  • Commodore BASIC英语Commodore BASIC
  • Extended Color BASIC英语Extended_Color_BASIC
  • Dartmouth BASIC英语Dartmouth BASIC
  • Disk Extended Color BASIC英语Disk Extended Color BASIC
  • Family BASIC英语Family BASIC
  • GFA BASIC英语GFA BASIC
  • GW-BASIC
  • HP BASIC for OpenVMS英语HP BASIC for OpenVMS
  • HP Time-Shared BASIC英语HP Time-Shared BASIC
  • IBM BASIC英语IBM BASIC
  • Integer BASIC
  • Locomotive BASIC英语Locomotive BASIC
  • Mallard BASIC英语Mallard BASIC
  • Microsoft BASIC
  • MSX BASIC英语MSX BASIC
  • Pure Basic
  • Rocky Mountain BASIC英语Rocky Mountain BASIC
  • S'-BASIC英语S-BASIC
  • ScriptBasic英语ScriptBasic
  • Sinclair BASIC英语Sinclair BASIC
  • Southampton BASIC System英语Southampton BASIC System
  • STOS BASIC英语STOS BASIC
  • TI BASIC (TI 99/4A)英语TI BASIC (TI 99/4A)
  • TI-BASIC(计算器)
  • TI Extended BASIC英语TI_Extended_BASIC(又名XBasic)
  • Tiny BASIC英语Tiny BASIC
  • Turbo-Basic XL英语Turbo-Basic XL
  • Tymshare SUPER BASIC英语Tymshare Super BASIC
  • UBASIC英语UBASIC
  • Vilnius BASIC英语Vilnius BASIC
  • XBasic英语XBasic
  • ETBASIC
面向过程
  • AmigaBASIC英语AmigaBASIC
  • AMOS BASIC英语AMOS (programming language)
  • ASIC英语ASIC programming language
  • BBC BASIC英语BBC BASIC
  • Beta BASIC英语Beta BASIC
  • DarkBASIC
  • FreeBASIC
  • FutureBASIC英语FutureBASIC
  • GFA BASIC英语GFA BASIC
  • GLBasic英语GLBasic
  • Liberty BASIC英语Liberty BASIC
  • Microsoft Small Basic
  • PowerBASIC
  • PureBasic
  • QBasic
  • QB64英语QB64
  • QuickBASIC
  • SmallBASIC英语SmallBASIC
  • SuperBASIC英语SuperBASIC
  • ThinBasic英语ThinBasic
  • True BASIC
  • PowerBASIC
  • XBasic英语XBasic
  • Xblite英语XBLite
  • Basic4ppc英语Basic4ppc
  • Visual Test英语Visual Test
  • B4J英语B4J
带有对象扩展
用于移动设备
  • Basic4android英语Basic4android (B4A)英语(B4A)
  • Basic4ppc英语Basic4ppc
  • GLBasic英语GLBasic
  • NS Basic英语NS Basic
  • Basic4ios英语Basic4ios (B4i)英语(B4i)
微软
第三方类VB
  • Basic For Qt英语Basic For Qt
  • Gambas
  • Hummingbird Basic
  • LotusScript英语LotusScript
  • WinWrapBasic英语WinWrap Basic
  • Xojo