編程語言中分號“;”的簡明歷史

???? Python貓” ,一個值得加星標的公衆號

花下貓語:在準備“Python爲什麼”系列的下一個話題的時候,我偶然查到這篇文章,介紹了分號“;”在編程語言中的歷史。分號在 Python 中也有使用,但很少見,是爲什麼呢?下一篇原創文章將會回答這個問題,而今天的分享,是一個知識鋪墊。Enjoy!

原文:https://medium.com/better-programming/a-brief-history-of-the-8efda9dde2b8
翻譯:前端外文精選

在本文中,我將簡要介紹在計算機編程語言中使用分號(許多計算機科學入門學生的禍根)的歷史。我們將看到分號有兩種用途:作爲語句分隔符和作爲語句終止符,並且我們將瞭解在過去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 的十萬個爲什麼?

OrderedDict 是如何保證 Key 的插入順序的?

PyCharm 2019.3 版發佈,增加了哪些新功能呢?

《圍城》方鴻漸:人是如何一步步走向平庸的?

感謝創作者的好文

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章