- C和C++安全編碼(原書第2版)
- (美)Robert C.Seacord
- 1035字
- 2020-10-30 17:56:35
1.3.1 C和C++簡史
在第2屆程序設計語言的歷史(History of Programming Languages)大會[Bergin 1996]上,Dennis Ritchie發表了C語言的發展(The Development of the C Language)演講。C語言是在20世紀70年代末期作為UNIX操作系統的實現語言而開發出來的。C語言源于無類型語言B語言[Johnson 1973],而B語言則源于BCPL(Basic Combined Programming Language,基本組合編程語言)[Richards 1979]。BCPL語言是由Martin Richards于20世紀60年代設計開發的,并且在20世紀70年代早期的一些項目中得到了使用。B語言可以看成是無類型的C語言,或者更準確地說,是BCPL語言被濃縮于8KB內存中的版本。
《The C Programming Language》一書(也就是通常說的“K&R”)[Kernighan 1978]最初于1978年出版。該書出版前后的一段時間里,對語言的改變主要是在移植性方面,這也是把代碼移植到Interdata8/32計算機上的結果。那時候,C語言仍強烈地表現出其無類型的血統。
ANSI于1983年夏季成立了X3J11委員會。ANSI這么做的目的在于“將現有的通用的C語言的定義進一步形式化,形成一個清晰的、穩定的和無二義性的標準,以增強用戶程序在不同的C語言環境中的移植能力”[ANSI 1989]。X3J11在1989年年底發表了一份報告,該報告隨后被ISO(the International Organization for Standardization,國際標準化組織)接受,成為ISO/IEC 9899-1990。這兩份報告沒有技術上的差別,僅僅是將ANSI標準的章節序號按照ISO標準進行了重新編排。通常將這兩份標準稱為C89,偶爾也稱為C90(根據其被批準的日期)。該標準的第1版隨后被ISO/IEC 9899/COR1:1994、ISO/IEC 9899/AMD1:1995以及ISO/IEC 9899/COR2:1996改進和修正。通常將ISO/IEC 9899/AMD1:1995稱為AMD1,有時將其所改進的標準稱為C95。
這份標準的第1版(及修正版)隨后被ISO/IEC 9899:1999 [ISO/IEC1999]所取代。通常將這份后來的C標準稱為C99。最近,第二版的標準(修訂)由ISO/IEC 9899:2011[ISO/IEC 2011]所取代,后者通常簡稱為C11。
嚴格意義上的C的后繼語言有Concurrent C[Gehani 1989]、Objective-C[Cox 1991],C*[Thinking 1990]、當然還有C++[Stroustrup 1986]。C語言同時也廣泛用作很多編譯器的中間代碼表示(作為一種可移植的匯編語言),包括其直接后繼者如C++或者某些與其無直接關系的語言(例如,Modula3[Nelson 1991]和Eiffel[Meyer 1988]等)。
在這些C的后繼者中,C++使用得最為廣泛。C++是由Bjarne Stroustrup于1983~1985年間在貝爾實驗室中開發的。在1983年前,Stroustrup也曾給C增加過一些特性,并且稱其為“帶類的C”(C with classes)。C++這個術語在1983年首次提出。
C++在首次發布后發生了巨大的變化。特別值得一提的是,《The Annotated C++ Reference Manual》[Ellis 1990](ARM C++)為其加入了模板和異常,ISO C++標準則為其加入了運行時類型識別(Runtime Type Identification,RTTI)、名字空間以及一個標準庫。最新版本的C++標準是ISO/IEC14882:2011,通常簡稱為C++11[ISO/IEC14882:2011]。
C和C++語言在今天仍然在不斷發展。C編程語言國際標準化工作組(ISO/IEC JTC1 SC22 WG14)負責C語言標準的維護。美國的立場由INCITS的PL22.11 C技術委員會代表。C++編程語言國際標準化工作組(ISO/IEC JTC1 SC22 WG21)負責C++標準的維護。美國的立場由INCITS的PL22.16 C++技術委員會代表。
- Java入門經典(第6版)
- 劍指JVM:虛擬機實踐與性能調優
- NumPy Essentials
- Expert Android Programming
- Bootstrap 4:Responsive Web Design
- Service Mesh實戰:基于Linkerd和Kubernetes的微服務實踐
- Python程序設計與算法基礎教程(第2版)(微課版)
- 汽車人機交互界面整合設計
- HTML5+CSS3+jQuery Mobile APP與移動網站設計從入門到精通
- App Inventor 2 Essentials
- Julia High Performance(Second Edition)
- Learning WordPress REST API
- 城市信息模型平臺頂層設計與實踐
- INSTANT EaselJS Starter
- 深度剖析ApacheDubbo核心技術內幕