程式語言中分號“;”的簡明歷史
在本文中,我將簡要介紹在計算機程式語言中使用分號(許多電腦科學入門學生的禍根)的歷史。我們將看到分號有兩種用途:作為語句分隔符和作為語句終止符,並且我們將瞭解在過去60多年的程式語言歷史中分號的使用發生了怎樣的變化。
為什麼程式語言使用分號
分號在程式語言中用於兩件事:語句分隔符和語句終止符。當一種語言使用分號作為語句分隔符時,這允許您在同一行上編寫多個語句,並使用分號來標記語句的分隔,以便編譯器或直譯器可以找出一個語句在哪裡結束而另一條語句在哪裡開始。
在以分號為分隔符的語言中,分號被視為可選的,當一行程式碼僅包含一條語句時,通常不會編寫分號。
作為語句結束符的分號是不可選的,用於明確地標記語句的結束,使用分號作為終止符的程式語言將在分號不在其預期位置時標記錯誤。許多程式設計專家聲稱,以分號結尾的語句可以使程式更快,因為編譯器可以更有效地執行,儘管我在本文末尾會對此主張提出異議。
早期的高階語言和分號的使用
當Fortran在20世紀50年代中期被作為一種高階程式語言引入時,程式語言的史前時代就結束了,Fortran既不使用分號作為語句分隔符,也不使用分號作為語句終止符,Fortran中的語句每行只能寫一個,而新行是語句終止符。
在現代程式語言中首次使用分號是ALGOL 58,然而,這個版本並沒有得到很好的實現,它很快就變成了ALGOL 60。這個早期版本的ALGOL使用分號作為分隔符,儘管分號經常被多餘地用作語句結束符(儘管這不是必需的)。分號的這種混合使用可能會導致非常混亂的程式,分號通常放在某些行的末尾,而不是其他的行末尾,如我從Steve Maurer的網站上借來的ALGOL 60程式碼片段所示:
COMMENT advance to the next un-crossed out number. ;
COMMENT this number must be a prime ;
FOR i := i WHILE i<1000 AND candidates[i] = 0 DO
BEGIN
i := i+1;
END;
COMMENT insure against running off end of the data structure ;
IF i<1000 THEN
BEGIN
COMMENT cross out all multiples, starting with 2*p.;
j := 2;
k := j*i;
FOR k := k WHILE k < 1000 DO
BEGIN
candidates[k] := 0;
j := j + 1;
k := j*i;
END;
COMMENT advance to the next candidate ;
i := i+1;
END
END;
Algol 60衍生出了Algol的其他版本……一直到Algol 68。許多語言都是基於Algol的,但對當今語言影響最大的版本是Basic組合式程式語言(BCPL)。
BCPL是一種程式語言,由劍橋大學的Martin Richards於1967年開發,BCPL的設計採用了許多後來影響C語言發展的概念,稍後我們將看到。BCPL還使用分號作為語句分隔符,許多編寫BCPL的程式設計師也使用分號來指示行的結尾,儘管像Algol一樣,這種用法是多餘的,行尾字元是BCPL中真正的語句分隔符。
影響分號當前使用的另一種語言是IBM的程式語言PL/I。PL/I是在20世紀60年代中期開發的,並且是當時的c++語言——因為該語言的設計者試圖包含所有其他流行程式語言的所有特性,這樣該語言就可以取代Fortran用於科學計算,而COBOL用於商業計算。
PL/I使用分號作為語句終止符,並且此設計決策對其他語言實現者(如C的開發者Ken Thompson和Dennis Ritchie)有影響。
B,NB,C和分號
大約在1968年左右,當貝爾實驗室逐漸退出Multics專案時,Ken Thompson開始開發一種基於BCPL的新語言,他稱之為B語言。您可以在Dennis Ritchie的有關C語言歷史的文章中瞭解有關B的開發的更多資訊。
湯普森(Thompson)將B設計為一種系統程式語言,用於開發當時處於萌芽狀態的Unix作業系統。湯普森(Thompson)在B程式語言的設計中對BCPL進行了許多更改,他所做的更改之一是使分號成為語句終止符是強制性的。正如我前面提到的,在BCPL中,分號作為語句結束符是可選的,但這只是因為編譯器使用了聰明的規則來允許不使用分號。湯普森希望B是一種更高效的語言,因此需要使用分號作為語句結束符。
當湯普森和裡奇試圖用B構建Unix時,他們意識到甚至湯普森的新語言也不適合作為系統程式語言,因此裡奇開發了一種新的B版本,稱為NB,以解決其中的一些問題。NB作為一種語言並沒有持續很長時間,因為兩個人決定只需要廢棄B就可以了。
今天的分號狀態
正如我們所知,分號已經成為許多語言(C、C++、Java、C#和JavaScript)中選擇的語句結束符,這裡只提到一些最流行的語言。JavaScript是一個有趣的示例,因為最新版本的JavaScript允許您在大多數以換行符結尾的語句的末尾省略分號。
並非所有的程式語言都使用分號作為語句終止符。Python與Visual Basic和Visual Basic.NET一樣,將換行符用作語句終止符。Ruby是另一種不使用分號的流行語言。
另一種較新的語言Go也不使用分號作為語句結束符——儘管它確實使用它作為語句分隔符。另一方面,另一種新的系統程式語言Rust使用分號作為語句結束符。
要檢視哪些語言使用哪種字元或哪些字元作為語句終止符和語句分隔符,請轉到此處。
; // Terminator ;
顯然,即使我們根本不應該使用分號,也沒有就如何最好地使用分號達成共識。我的猜測是,隨著編譯器和直譯器技術的改進,對語句結束符(如分號)這樣的語法糖的需求將會減少——儘管分號作為語句分隔符的效果很好。
以上就是本次分享的所有內容,想要了解更多 python 知識歡迎前往公眾號:Python 程式設計學習圈 ,傳送 “J” 即可免費獲取,每日干貨分享
- 位元組一面:Redis主節點宕機,如何處理?
- 如何使用 Redis 實現 “附近的人” 這個功能?
- 介紹一款能取代 Scrapy 的爬蟲框架 - feapder
- 直觀講解一下 RPC 呼叫和 HTTP 呼叫的區別!
- MySQL 億級資料分頁的優化
- Python 多執行緒小技巧:比 time.sleep 更好用的暫停寫法!
- Python面試官:請說說併發場景鎖怎麼用?
- Python如何非同步傳送日誌到遠端伺服器?
- Python 中的數字到底是什麼?
- 如何建立一個完美的 Python 專案?
- 詳解 Python 的二元算術運算,為什麼說減法只是語法糖?
- Python 為什麼沒有 main 函式?為什麼我不推薦寫 main 函式?
- Bug分析,假刪除導致文章釋出成功卻打不開的問題
- Python 進階:queue 佇列原始碼分析
- Python例項篇:自動操作Excel檔案(既簡單又特別實用)
- 誰說程式設計師不懂浪漫,當代碼遇到文學..
- Python 為什麼沒有 void 關鍵字?
- 程式語言中分號“;”的簡明歷史
- Python 什麼情況下會生成 pyc 檔案?
- 函式和方法的裝飾器