BASIC

BASIC的歷史

1964年，兩位美國數學家兼電腦科學家約翰·克米尼和Thomas E. Kurtz在FORTRAN語言的基礎上創造了一種新的語言——BASIC，BASIC是一種適用於初學者的人機互動式語言。
Basic的名字——Beginner's All-purpose Symbolic Instruction Code（初學者通用的符號指令程式碼），原來被作者寫做BASIC，只是後來被微軟廣泛的叫做Basic了。
BASIC語言本來是為校園的大學生們創造的高階語言，目的是使大學生容易使用電腦。儘管初期的BASIC僅有幾十條語句，但由於BASIC在當時比較容易學習，它很快從校園走向社會，成為初學者學習電腦程式設計的首選語言。
隨著電腦科學技術的迅速發展，特別是微型電腦的廣泛使用，電腦廠商不斷地在原由的BASIC基礎上進行功能擴充，出現了多種BASIC版本，例如TRS-80 BASIC、Apple BASIC、GWBASIC、IBM BASICA（即BASICA）、True BASIC。此時BASIC已經由初期小型、簡單的學習語言發展成為功能豐富的使用語言。它的許多功能已經能與其他優秀的電腦高階語言相媲美，而且有的功能（如繪圖）甚至在當時超過其他語言。
在單片機上亦可以使用BASIC編程（一般是行號類型的BASIC），不過多數情況下要安裝BASIC的ROM。

迅速增長：家用電腦時期

儘管BASIC語言在一些小型機上使用了，但是它真正進入大學是在1975年的MITS Altair 8800 "kit"微型機的引入。大多數的程式語言需要一個適用的文字編輯器，大量的記憶體和磁碟空間。但是當時的情況則是，那個時候的微型機沒有原生的編輯器，僅有有限的記憶體以及一般將錄音磁帶做為磁碟儲存資料。所有的這些問題，使得像BASIC那樣以解釋形式執行以及擁有內建的程式碼編輯器的語言能夠在這些限制下執行。
BASIC語言同時還具有的優勢就是它在那些對微型機感興趣的年輕的設計師和電腦愛好者中相當出名，以及在那個時候的電子工業中BASIC語言被普遍的使用。另外Kemeny和Kurtz在早期在傳播BASIC語言這一方面所花的努力也功不可沒，在那個時候一些愛好者的雜誌中幾乎都被一段一段的提及BASIC語言的文章填滿，或者差不多全部都在關注一個版本和其他版本的比較。
最先在像Altair那樣8080機器中出現的BASIC語言之一是Tiny BASIC，一個簡單的BASIC語言的的實現，最初由Li-Chen Wang博士編寫，隨後被Dennis Allison應Bob Albrecht（他隨後建立了雜誌Dr. Dobb's Journal）的要求移植到Altair中。Tiny BASIC的設計和全部的原始碼都在1976年於DDJ雜誌中被公布出來。
1975年，MITS發布了Altair BASIC，由Bill Gates和Paul Allen作為一個叫做Micro-Soft的公司開發，後來Micro-Soft則發展成今天的企業巨頭——微軟（Microsoft）。最初的Altair版本由Gates、Allen和Monte Davidoff共同編寫。Microsoft BASIC（隨後大多被人稱作M BASIC或者MBASIC）的一些版本馬上被捆綁到最初的基於軟碟的CP/M電腦中，這種電腦在小的商業環境中被廣為使用。隨著在CP/M中的BASIC語言知名度的擴張，新的電腦設計中同樣也引入了他們自己的BASIC語言的版本，或者乾脆叫Micro-Soft把BASIC版本移植到他們的平台中。
當三種新的個人電腦在1977年問世的時候，也就是Byte Magazine後來稱作"1977 Trinity"的那段時間，所有的這三種的電腦都用BASIC語言作為他們的程式語言和操作環境。Commodore Business Machines公司一次性的付費買下一個移植到他們PET電腦的6502晶片中Micro-Soft BASIC的一個無限授權版本，於此同時Apple II和TRS-80都引入了一個新的，與這種語言極大相似的語言。這種相似性是非常明顯的因為它們最開始的50個記號（token）都是一樣的。隨著新的電腦進入到這個領域中來，其他的BASIC語言版本的加入，微妙的改變了BASIC語言的家族。Atari的8位元機系列有他們自己的，專為燒入8kB的ROM晶片而修改過的Atari BASIC。BBC發布了BBC BASIC，由Acorn Computers為他們編寫，加入了許多額外的結構體的關鍵字。大多數的二十世紀八十年代的家用電腦都有一個駐留在ROM中的BASIC直譯器，以此能讓電腦直接啟動到BASIC環境。正因為這些原因，BASIC語言有著比其他任何語言都要多的方言（dialects）版本。
因為在這一個時期的BASIC的知名度的上升，一些雜誌（就比如美國的Creative Computing Magazine）刊登了用BASIC語言寫的遊戲、工具和一些其他程式的完整的程式碼。BASIC具有的一個天生的優勢，就是將雜誌上公布的程式碼輸入電腦然後執行是一件非常簡單的事情。不同的雜誌針對不同的電腦刊登BASIC程式，但是有些BASIC程式是可以在不同的電腦的不同的BASIC執行環境中執行（有些時候只需要一些小小的修改）。在那個時候，檢查糾正經常會在雜誌的程式碼中出現的印刷錯誤也是雜誌本身的一個作業。
BASIC程式也同樣在成熟的書本中被發布：最初的例子是David Ahl的BASIC Computer Games系列。後來的書，就比如Learn to Program BASIC也同樣將遊戲的程式作為書本導引部分的重點。

成熟的語言：個人電腦時期

早在1979年微軟公司就開始和IBM協商給IBM的PC機提供一個燒在BIOS裡面的IBM Cassette BASIC（BASIC C）。微軟公司後來出售了一些在MS-DOS和PC-DOS上的BASIC語言版本，包括IBM Disk BASIC（BASIC D）、IBM BASICA（BASIC A）、GW-BASIC（一個不需要IBM機器ROM以及與BASICA相容的版本）和QuickBASIC。發布了Turbo Pascal的Borland公司在1985年發布了Turbo BASIC 1.0（即後來的PowerBASIC）。微軟公司同樣還編寫了一個基於窗口的AmigaBASIC，支援一個在當時非常先進的多工圖形介面的電腦Amiga computers的1.1版本（1985年末，1986年初）。
這些語言引入了許多對原始的家用電腦中BASIC的擴充，比如提供了更加好的字串操作功能以及對圖形的支援，另外還有對檔案系統的存取以及一些額外的資料類型。其中更加重要的則是添加了結構化編程的功能，包括一些原始版本中不存在的流程控制語句和支援本地變數的子程式。新的圖形功能同樣為個人電腦中的電子遊戲打下的基礎，類似DONKEY.BAS的一些BASIC程式展示了個人電腦所具有的功能。
但是在二十世紀八十年代的後半段，新的電腦則是比起以往的電腦擁有更加強大的資源控制能力。於此同時，電腦漸漸的從一個業餘愛好者感興趣的東西過渡到一個人們日常使用的工具（主要用的是別人寫的程式碼），所以編寫程式對用戶的重要性漸漸地減弱。當然BASIC的重要性也漸漸地減弱起來，儘管依然還有許多的BASIC語言版本。編譯型BASIC語言和CBASIC仍然使用在許多的IBM 4960系統上。
隨著微軟公司Visual Basic的發布BASIC的語言的好運似乎又一次回歸了過來。很難確切的說Visual Basic到底是不是BASIC語言，因為它較之前的版本有很大的改變——以基於物件以及事件驅動為的設計目標的語言。它唯一顯著的與BASIC語言相關的地方就是相似的語法，但是語法本身也不能完全定義這種語言，因為大多數Visual Basic的開發都是使用「拖動－放置」的方法，開發者不需要為一些常用的物件比如按鈕和捲軸去寫所有的程式碼。這個可以看成是BASIC語言的一種進化，一些早期的Dartmouth BASIC的特有的功能被保留了下來，比如行號和INPUT關鍵字等（Visual Basic仍舊是使用INPUT語句來從檔案讀取資料；行號也同樣允許用在所有的VB版本中，甚至是VB.NET，僅管它不能用在一些特定的地方，比如在SUB語句前面）。
有趣的是，BASIC語言最開始的時候是作為一種初學者的語言，微軟最初依舊是將Visual Basic定位於向愛好者提供的一種語言，但是在VB 3.0（也是被認為第一個相對穩定的版本）發布之後不久就在小型商業程式的使用中迅速的傳播開來。儘管有很多進階的程式設計師始終在嘲笑它，但是VB正是有效的符合了小型商用程式的要求，即重點是簡單的開發，而執行的速度則是次要的因素。在那個時候, Windows 3.1已經是足夠的快了，很多商業有關的程式只要不是牽涉到大量的資料，幾乎是可以在一眨眼之間完成的，即使使用的是一種非常慢的語言。許多公司的老闆發現他們通過很少的一些步驟就可以建立出一個小型的但是有用的程式來滿足他們特定的需求。最終，在VB3的冗長的生命周期中，對於Visual Basic知識的掌握成為了一種非常有用的職業技能.這種語言，就像它的前輩QBASIC一樣，同時也成為了業餘遊戲開發者喜愛的語言之一。

BASIC語言的種類

以下是同樣的執行結果，但用不同時期的BASIC的方式所寫的範例。

行號類型（非結構化）

這是第一代的BASIC，例如早期BASICA、GW-BASIC……等，BASIC直譯器。這類的BASIC程式的特徵，就是每一行的程式碼前面都有一個數字作為「行號」。由於這種類型的BASIC程式的寫法，很容易濫用GOTO的跳躍指令，以及程式碼沒有辦法使用到縮排去區分割區段，因此很容易導致麵條式程式碼。
10 INPUT "What is your name: ", U$20 PRINT "Hello "; U$30 INPUT "How many stars do you want: ", N40 S$ = ""50 FOR I = 1 TO N60 S$ = S$ + "*"70 NEXT I80 PRINT S$90 INPUT "Do you want more stars? ", A$100 IF LEN(A$) = 0 THEN GOTO 90110 A$ = LEFT$(A$, 1)120 IF A$ = "Y" OR A$ = "y" THEN GOTO 30130 PRINT "Goodbye "; U$140 END

無行號類型（結構化）

這是第二代的BASIC，例如QuickBASIC、PowerBASIC。這時期，同時有功能相近的直譯器與編譯器的版本出現。這類的BASIC程式的特徵，是不使用行號，改使用標籤作為跳躍點（仍有GOTO指令，但已可使用其他寫法可完全避開使用GOTO），與使用函式或副程式的方式，以及可使用縮排，將程式結構化。
INPUT "What is your name: ", UserName$PRINT "Hello "; UserName$DO  INPUT "How many stars do you want: ", NumStars  Stars$ = STRING$(NumStars, "*")   PRINT Stars$  DO    INPUT "Do you want more stars? ", Answer$  LOOP UNTIL Answer$ <> ""  Answer$ = LEFT$(Answer$, 1)LOOP WHILE UCASE$(Answer$) = "Y"PRINT "Goodbye "; UserName$

物件導向化

這是第三代的BASIC，例如Visual Basic、REALbasic、StarOffice Basic。這類的BASIC程式的特徵，是匯入類別（Class）的應用，使用物件導向的繼承與程式碼封裝的寫法。通常也使用「事件驅動」的寫法，雖然下面這個Visual Basic .NET的範例並不是用到「事件驅動」。
 
Public Class StarsProgram
    Public Shared Sub Main()
        Dim UserName, Answer, stars As String, NumStars As Integer
        Console.Write("What is your name: ")
        UserName = Console.ReadLine()
        Console.WriteLine("Hello {0}", UserName)
        Do
            Console.Write("How many stars do you want: ")
            NumStars = CInt(Console.ReadLine())
            stars = New String("*", NumStars)
            Console.WriteLine(stars)
            Do
                Console.Write("Do you want more stars? ")
                Answer = Console.ReadLine()
            Loop Until Answer <> ""
            Answer = Answer.Substring(0, 1)
        Loop While Answer.ToUpper() = "Y"
        Console.WriteLine("Goodbye {0}", UserName)
    End SubEnd Class

Goto指令

Goto是一種程式執行無條件跳躍的指令，在有行號的BASIC裡後面是接要跳躍目的的行號。在無行號的BASIC裡後面則是接要跳躍目的的標記名稱。

END指令

用於終止一個BASIC程式的執行。
它的效果有些類似C語言里的exit函式。所不同的是END不帶有任何的參數，僅僅是一條指令。需要注意的是，在Visual Basic中end（雖然不區分大小寫但多習慣用小寫）指令用於強制退出整個程式，但並不能保證完整的釋放程式所使用的資源。因此在退出之前最好先手動釋放資源。