C言語の歴史(History of C)

cppreference.comサイト ["History of C"](http://en.cppreference.com/w/c/language/history) ページ（2015年12月時点）より訳出。[^1]

* 本文書は[訳出元](http://en.cppreference.com/w/Cppreference:FAQ)に準じた[CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/deed.ja)ラインセンスとする。
* 補足："TR"は技術報告書(Technical Report)、"TS"は技術仕様書(Technical Specification)、"Draft"は草案文書の意味。TRとTSの扱いはほぼ同じ。"FP"は浮動小数点(Floating-Point)の略記。

[^1]: この記事は[前回の茶番](http://qiita.com/yohhoy/items/1fbca5dec4f56b04fcd5)に対する贖罪の意をもって書かれました。英語から日本語に逐次翻訳しただけですが気にしない。

----
# 初期のC(Early C)
* 1969: Unix向けシステムプログラミング言語としてPDP-7アセンブラを置き換えるため、BCPL言語をベースにして、B言語が誕生。
 * `++`と`--`演算子、複合代入式が追加されるも、BCPL同様に型無し(typeless)言語のまま。
* 1971: B言語をPDP-11へ移植する際に、NB（"new B"）が作られる。
 * 型（`int`、`char`、配列やポインタ）、配列からポインタへの変換(array-to-pointer conversion)、機械語へのコンパイル
* 1972: 名前をC言語に変更
 * 構造体(`struct`)、`&&`と`||`演算子、プリプロセッサ、ポータブルなI/O
* 1973: UnixがC言語で書き直される
 * `unsigned`型、`long`型、共用体(`union`)、列挙記述、型安全性の向上
* 1978: プログラミング言語C 第1版

# 標準C(Standard C)
* 1983: ANSIにX3J11委員会が設立される。
* 1988: プログラミング言語C 第2版
* 1989: **C89**、ANSI C標準が刊行される。
 - 既存プラクティスを成文化
 - 新機能: `volatile`修飾子、`enum`型、`signed`型、`void`型
 - C++言語より: `const`修飾子、関数のプロトタイプ宣言
* 1990: **C90**、ANSI C標準がISO/IEC 9899-1990として承認される。
* 1995: **C95** (ISO/IEC 9899 AM1) ([online store](http://infostore.saiglobal.com/store/Details.aspx?DocN=isoc000767513))
 * マルチバイト文字サポート（`wchar_t`型と全てのワイド文字／マルチバイト文字関数、`wchar.h`、`wctype.h`や既存ヘッダへの追加と関連するストリームI/Oへの変更など）
 * ダイグラフ(digraph)、`iso646.h`
* 1995: 正誤表1 (ISO/IEC 9899 TCOR1)
 * [44個の小変更](http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc1.htm)
* 1996: 正誤表2 (ISO/IEC 9899 TCOR2)
 * [24個の小変更](http://www.open-std.org/jtc1/sc22/wg14/www/docs/tc2.htm)
* 1999: **C99** (ISO/IEC 9899:1999)
 * 新機能: `bool`型、`long long`型、`stdint.h`、`inttypes.h`、`restrict`修飾子、複合リテラル(compound literal)、可変長配列(variable length array)、フレキシブル配列メンバ(flexible array member)、指示付きの初期化子(designated initializer)、`fenv.h`、可変長マクロ、複素数型、`__func__`マクロ、16進浮動小数点数書式(`%a`)、`lconv`関数への通貨書式指定、`isblank`関数、ナロー／ワイド文字列リテラル間での連結、列挙記述の末尾カンマ、関数形式マクロでの空引数、`STDC_*`プラグマ、`va_copy`マクロ、`tmpnam`関数からのヌルポインタ戻り値、`setvbuf`関数へのヌルポインタ、`printf`関数での`hh`と`ll`長さ指定子、`snprintf`関数、`_Exit`関数、`tgmath.h`、POSIX風の`strftime`書式指定子
 * C++言語より: `inline`指定子、宣言とコードの混在、`for`ループ初期化節での宣言、`//`コメント、ソースコード中でのユニバーサルキャラクタ名(universal character name)
 * 暗黙の関数宣言および暗黙の`int`型の削除
* 2001: 正誤表1 (ISO/IEC 9899:1999/Cor.1:2001(E))
 * [11個の欠陥修正](http://www.open-std.org/jtc1/sc22/wg14/www/docs/9899tc1/)
* 2004: 正誤表2 (ISO/IEC 9899:1999/Cor.2:2004(E))
* 2004: Unicode TR (ISO/IEC TR 19769:2004) ([ISO store](http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=33907)) ([November 7, 2003 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1040.pdf))
* 2007: 正誤表3 (ISO/IEC 9899:1999/Cor.3:2007(E)) ([September 7, 2007 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf ))
 * `gets`関数を非推奨に
* 2007: 境界チェック・インタフェースTR (ISO/IEC TR 24731-1:2007) ([ISO store](http://www.iso.org/iso/catalogue_detail.htm?csnumber=38841)) ([March 28, 2007 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1225.pdf))
* 2008: 組み込みTR (ISO/IEC TR 18037:2008) ([ISO store](http://www.iso.org/iso/catalogue_detail.htm?csnumber=51126)) ([September 24, 2003 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1021.pdf ))
* 2009: 10進浮動小数点数 TR (ISO/IEC TR 24732:2009) ([ISO store](http://www.iso.org/iso/catalogue_detail.htm?csnumber=38842)) ([July 5, 2007 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1241.pdf))
* 2009: 特殊な数学関数TR (ISO/IEC TR 24747:2009) ([ISO store](http://www.iso.org/iso/catalogue_detail.htm?csnumber=38857)) ([August 2, 2006 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1182.pdf))
* 2010: 動的メモリ割り当て関数TR (ISO/IEC TR 24731-2:2010) ([ISO store](http://www.iso.org/iso/catalogue_detail.htm?csnumber=51678)) ([August 15, 2007 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1248.pdf))
* 2011: **C11** (ISO/IEC 9899:2011) ([ISO store](http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=57853)) ([ANSI store](http://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2fISO%2fIEC+9899-2012#.UGCvLIHyaHM)) ([April 12, 2011 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf))
 * スレッドを考慮したメモリモデル、`stdatomic.h`、`threads.h`、型ジェネリック(type-generic)関数、`alignas`指定子／`alignof`演算子、`noreturn`属性、コンパイル時アサーション(static assert)、Analyzability拡張、複素数型と虚数型の拡張、匿名の構造体／共用体、排他的ファイルオープン・モード、`quick_exit`関数
 * `gets`関数を削除
 * 境界チェック・インタフェースTRより: 境界チェック・インタフェース
 * Unicode TRより: `char16_t`型、`char32_t`型。`uchar.h`
* 2012: 正誤表1 (ISO/IEC 9899:2011/Cor 1:2012) ([ISO store](http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=61717))
 * [2個のマイナーバグ修正](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1606.pdf)
* 2013: セキュア・コーディング規約TS (ISO/IEC TS 17961:2013) ([ISO store](http://www.iso.org/iso/catalogue_detail.htm?csnumber=61134)) ([June 26, 2012](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1624.pdf))
* 2014: FP TS part 1: バイナリ浮動小数点数演算 (ISO/IEC TS 18661-1:2014) ([ISO store](http://www.iso.org/iso/catalogue_detail.htm?csnumber=63146)) ([2013 draft](http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1778.pdf))
 * C11（大部分はAnnex F）でIEC 60559:2011の全基本要件と一部推奨項目をカバーする変更の提供（C11はIEC 60559:1989をベースとしている）
* 2015: FP TS part 2: 10進浮動小数点数演算 (ISO/IEC TS 18661-2:2015) ([ISO store](http://www.iso.org/iso/home/store/catalogue_ics/catalogue_detail_ics.htm?csnumber=68882)) ([2015 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1912.pdf))
 * IEC 60559:2011の10進浮動小数点数演算に関して、C11で全要件と一部の基本推奨項目をカバーする変更の提供。これはISO/IEC TR 24732:2009に優先する。
* 2015: FP TS part 3: 交換書式と拡張型 (ISO/IEC TS 18661-3:2015) ([ISO store](http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65615)) ([2015 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1945.pdf))
 * IEC 60559:2011の拡張浮動小数点数書式および算術と非算術の両交換書式に関する勧告を、C11でサポートする変更の提供。
* 2015: FP TS part 4: 補助的な関数 (ISO/IEC TS 18661-4:2015) ([ISO store](http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65616)) ([2015 draft](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1950.pdf))
 * π単位の三角関数、逆平方根、複利計算などを含むIEC 60559:2011により推奨される全ての数学的操作を、C11でサポートする変更の提供。

# 今後の発展(Future development)
* FP TS part 5: 補助的な属性(attribute). (Draft [n1968](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1968.pdf) 2015-09-28)
* 並列処理TS (Draft [n1966](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1966.pdf) 2015-09-14)
* トランザクショナル・メモリTS (Draft [n1961](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1961.pdf) 2015-09-23)
* C11標準に対する次の正誤表（草案文書なし）
 * 最新のC11欠陥レポート(DR; defect report)一覧: [n1986 (october 2015)](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1986.htm)
 * 最新のIssue一覧（DR未認定）: [n1972 (october 2015)](http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1972.htm)

# 外部参照(References)
* [C言語の開発(The Development of the C Language)](http://cm.bell-labs.com/cm/cs/who/dmr/chist.html) [^2] by Dennis M. Ritchie
* [C99標準の論理的根拠(Rationale for the C99 standard)](http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf)

[^2]: 2015年12月現在、元サイト(cppreference.com)の時点でリンク切れ。http://csapp.cs.cmu.edu/3e/docs/chistory.html が変更先？