C++的歷史
C++的歷史可以追溯到1979年,當時Bjarne Stroustrup(譯者注:C++之父)正在準備他的博士畢業論文,他有機會使用一種叫做Simula 的語言。顧名思義,Simula語言的主要作用是模擬。Simula 67是Simula語言的一種變種,被公認是首款支援物件導向的語言。Stroustrup發現物件導向的思想對於軟體開發非常有用,但是因Simula語言執行效率低,其實用性不強。
不久之後,Stroustrup開始著手“C with Classes”的研發工作,“C with Classes”表明這種新語言是在C基礎上研發的,是C語言的超集。C語言以其高可移植性而廣受好評,且程式執行速度以及底層函式的效能不受程式移植的影響,Stroustrup要做的就是將物件導向的思想引入C語言。新語言的初始版本除了包括C語言的基本特徵之外,還具備類、簡單繼承、內聯機制、函式預設引數以及強型別檢查等特性。
Bjarne Stroustrup的第一款“C with classes”編譯器叫Cfront,這個名字源自一個叫做Cpre的C編譯器。Cfront的機理是把“C with classes”的程式碼翻譯成原生C程式碼。頗為有趣的一點是Cfront原始碼大部分是由“C with Classes”編寫,這使得Cfront成為了一種自足執行的編譯器(可以編譯自身原始碼的編譯器)。由於很難整合C++的異常機制,Cfront在1993年退出了歷史的舞臺,但是它對以後C++編譯器以及Unix作業系統的實現都產生了深遠的影響。
1983年,“C with Classes”語言更名為C++。C語言中“++”運運算元的作用是對一個變數進行遞增操作,由此我們多少可以知曉Stroustrup對這種新語言的定位。這個時期,許多重要的特性被加入,其中包括虛擬函式、函式過載、引用機制(符號為&)、const關鍵字以及雙斜線的單行註釋(從BCPL語言引入)。
1985年,Stroustrup的C++參考手冊《C++ Programming Language》出版,同年,C++的商業版本問世。由於當時C++並沒有正式的語言規範,因此《C++ Programming Language》成了業界的重要參考。1989年,C++再次版本更新,這次更新引入了多重繼承、保護成員以及靜態成員等語言特性。
1990年,《Annotated C++ Reference Manual》釋出,同年,Borland公司的商業版Turbo C++編譯器問世。Turbo C++附帶了大量函式庫,這一舉措對C++開發產生了極為深遠的影響。雖然Turbo C++上一個穩定的版本釋出於2006年,但當前該編譯器仍被廣泛使用。
1998年,C++標準委員會發布了C++語言的第一個國際標準—ISO/IEC 14882:1998,該標準即為大名鼎鼎的C++98。C++98的提出,《The Annotated C++ Reference Manual》功不可沒。同時,1979年開始研發的標準模板庫(Standard Template Library,STL)也被納入了該版標準中。2003年,標準委員會針對98版本中存在的諸多問題進行了修訂,修訂後釋出了C++03。
2005年,C++標準委員會發布了一份技術報告(Technical Report,TR1)詳細說明了計劃引入C++的新特性。這個新標準被非正式地命名為C++0x,因為其預計會在本世紀第一個十年的某個時間釋出。諷刺的是,直到2011年年中該標準才面世,相應的技術文件也隨之出爐,一些編譯器廠商也開始試驗性地支援這些新特性。
2011年中,新的C++標準(C++11)面世。Boost庫對該版本影響很大,一些新的模組甚至直接衍生於Boost中相應的模組。一些新的語言特性,包括正規表示式(正規表示式詳情)、完備的隨機數生成函式庫、新的時間相關函式,原子操作支援、標準執行緒庫(2011之前,C和C++語言均缺少對執行緒的支援)、一種能夠和某些語言中foreach語句達到相同效果的新的for語法、auto關鍵字、新的容器類、更好的union支援、陣列初始化列表的支援以及變參模板的支援等等。
相關文章
- C++的歷史紀實 (轉)C++
- HTTP的歷史HTTP
- Laravel 的歷史Laravel
- Java的歷史Java
- Macromedia的歷史Mac
- IBM的歷史IBM
- iOS歷史(iOS系統發展歷史)iOS
- tcpdump歷史TCP
- OAuth歷史OAuth
- Oracle歷史Oracle
- Mysql歷史MySql
- 歷史背景
- 光榮策略遊戲的歷史及未來——歷史篇遊戲
- arguments 物件的老歷史物件
- 【譯】"Typeof null" 的歷史Null
- CTRL + ALT + DELETE 的歷史delete
- 轉:IBM的歷史IBM
- Shell歷史命令
- 歷史的回顧:HP-UX系統概況和版本歷史UX
- [oracle] 查詢歷史會話、歷史執行計劃Oracle會話
- Oracle中檢視sql命令歷史,檢視rman命令歷史OracleSQL
- 微服務的歷史與陷阱微服務
- Angular Universal 的演進歷史Angular
- 走進資料的歷史
- 還原歷史?這恰恰是歷史策略遊戲中最難做到的遊戲
- 計算機歷史計算機
- 人工智慧歷史人工智慧
- java發展歷史Java
- linux歷史命令Linux
- DB2歷史DB2
- 中國歷史(2)明朝276年曆史
- 中國歷史(5)唐朝289年曆史
- 中國歷史(3)元朝98年曆史
- 中國歷史(6)唐朝289年曆史
- C/C++ Qt 資料庫與Chart實現歷史資料展示C++QT資料庫
- 單機遊戲的發展歷史(二)遊戲
- 人工智慧發展的歷史人工智慧
- 還原JavaScript的真實歷史~JavaScript