ユーザ用ツール

サイト用ツール


.gz · 最終更新: 2020/03/10 22:31 by kokiu

以前のリビジョンの文書です


📃C言語📝

前書き

どのようなコンセプトで記事を書いたのかはこちらを読んでください。

どうして数あるコンパイラ型言語 の中でc言語を選択したのか、それは

「Cの精神-表現力, 効率, 小型, マシンに対する究極的な制御-」[1]

その精神は現代でも通用すると思ったためです。

加えて、1972年にC言語として誕生した古い言語なのに
下図の推移の通りに、2019年で9位また他の年でも10位内にランクインしており、人気は今も健全というのも理由の一つです。

2019年版の「オクトバース(The State of the Octoverse)」と題する、
GitHubが開発者の間で人気のプログラミング言語について調査した[2]レポート内の
Community trendsのTop languages。
Figure 1: オクトバースレポート内のTop languagesという項目のスクリーンショット[3]


他言語との関係

繋がりが多いほど円が大きくなるネットワーク図でC言語は大きめのサイズの円です。
Figure 2: 影響を与えた言語と受けた言語の図。[4]


歴史

参考[5]

初期のC

  • 1969年、PDP-7というメインフレームに搭載したOS(後にUNIXと呼ばれる)ために、システムプログラミング言語が必要だと考えたケン・トンプソンは、BCPL をベースに B言語 を作成しました。

    B言語の特徴は型のないC言語と考えられています。[6]
    B言語の名前の由来は、BCPLの縮約という説や、Multics時代にトンプソンによって作成された言語であるBon言語に由来するという別の説があります。[7]

    そのBon言語の由来は、トンプソンの妻のBonnieにちなんだという説、
    または(百科事典の引用によると)後の信仰(言語の使い方?)やその呪文の呟き(コマンドのこと?)を伴う儀式(コマンドの使い方?)に、ちなんで命名された説があります。(翻訳がスラングを含んでいるのか単に自分の英語の理解度不足なのかわからないため支援を求めます。原文:after a religion whose rituals involve the murmuring of magic formulas. )[8]
Figure 3: DEC PDP-7[9]


  • 1971年 B言語 を PDP-11 に移植するときに、ケン・トンプソンはB言語を拡張し、加えてPDP-11機械語命令を生成するために、そのコンパイラも書き直しました。 この言語をトンプソンはNB言語 (“new B”) と呼びました。[10]
Figure 4: DEC PDP-11/70 (“MISS PIGGY”)[11]
  • 1972年 C言語 に改名されました。
    • 更新:構造体、演算子 && および ||、プリプロセッサ、移植性のある入出力。
  • 1973年 UNIX が C言語 で書き直されました。
    • 更新:unsigned、long、共用体、列挙型、型の安全性の向上。

Figure 5: プログラミング言語 C 第1版のカバー[12]


※下記より「Cの歴史」cppreference.comの引用です。(今後調査によって加筆します。)

標準C

  • 1983年 ANSI が X3J11 委員会を設立。
  • 1988年 プログラミング言語 C 第2版。
  • 1989年 C89、ANSI C 標準が発行される。
    1. 既存の慣習の成文化。
    2. 新しい機能: volatile、enum、signed、void、ロケール。
    3. C++ から: const、関数プロトタイプ。
  • 1990年 C90、ANSI C 標準が ISO/IEC 9899-1990 として承認される。
  • 1995年 C95 (ISO/IEC 9899 AM1) (online store)
    1. 大きく拡張されたワイド文字とマルチバイト文字のサポート (wctype.h、 wchar.h、ストリーム入出力の追加と変更など)。
    2. ダイグラフ、iso646.h。
  • 1995年 正誤票 1 (ISO/IEC 9899 TCOR1)
    • 44 個の小さな変更
  • 1996年 正誤票 2 (ISO/IEC 9899 TCOR2)
    • 24 個の小さな変更
  • 1999年 C99 (ISO/IEC 9899:1999)
  1. 新しい機能 bool、long long、stdint.h、inttypes.h、restrict、複合リテラル、可変長配列、フレキシブル配列メンバ、指示付き初期化子、fenv.h、可変長マクロ、複素数、func、16進浮動小数点フォーマット(%a)、lconv における金額の書式、isblank、ナロー文字列リテラルとワイド文字列リテラルの連結、列挙子の最後のコンマ、関数形式マクロにおける空の引数、STDC_* プラグマ、va_copy、tmpnam のヌルの戻り値、setvbuf におけるヌルポインタ、printf における長さ修飾子 hh および ll、snprintf、_Exit、tgmath.h、POSIX ライクな strftime の指定子。
  2. C++ から: inline、宣言とコードの混在、for ループの初期化節における宣言、// コメント、ソースコード中のユニバーサル文字名。
  3. 暗黙の関数と暗黙の int が削除されました。
  • 2001年 正誤票 1 (ISO/IEC 9899:1999/Cor.1:2001(E)]
    • 11 個の欠陥の修正
  • 2004年 正誤票 2 (ISO/IEC 9899:1999/Cor.2:2004(E)]
  • 2004年 Unicode TR (ISO/IEC TR 19769:2004) (ISO store) (November 7, 2003 draft)
  • 2007年 正誤票 3 (ISO/IEC 9899:1999/Cor.3:2007(E)] (September 7, 2007 draft)
    • gets が非推奨化されました。
  • 2007年 境界チェック付きインタフェース TR (ISO/IEC TR 24731-1:2007) (ISO store) (March 28, 2007 draft)
  • 2008年 組み込み TR (ISO/IEC TR 18037:2008) (ISO store) (September 24, 2003 draft)
  • 2009年 10進浮動小数点 TR (ISO/IEC TR 24732:2009) (ISO store) (July 5, 2007 draft)
  • 2009年 特殊な数学関数 TR (ISO/IEC TR 24747:2009) (ISO store) (August 2, 2006 draft)
  • 2010年 動的メモリ確保 TR (ISO/IEC TR 24731-2:2010) (ISO store) (August 15, 2007 draft)
  • 2011年 C11 (ISO/IEC 9899:2011) (ISO store) (ANSI store) (April 12, 2011 draft)
    1. スレッド対応のメモリモデル、stdatomic.h、threads.h、型総称関数、alignas/alignof、noreturn、static assert、解析可能性拡張、複素数型と虚数型の拡張、無名構造体および無名共用体、排他的ファイルオープンモード、quick_exit。
    2. gets が削除されました。
    3. 境界チェック付きインタフェース TR から: 境界チェック付きインタフェース。
    4. Unicode TR から: char16_t、char32_t、uchar.h。
  • 2012年 正誤票 1 (ISO/IEC 9899:2011/Cor 1:2012) (ISO store)
    • DR 411 の修正
  • 2013年 セキュアコーディングルール TS (ISO/IEC TS 17961:2013) (ISO store) (June 26, 2012)
  • 2014年 FP TS パート1: 2進浮動小数点算術 (ISO/IEC TS 18661-1:2014) (ISO store) (2013 draft )
    1. IEC 60559:2011 のすべての基本的な要件といくつかの推奨事項をカバーするための C11 (ほとんどは Annex F) への変更を提供します (C11 は IEC 60559:1989 をベースにしていました)。
  • 2015年 FP TS パート2: 10進浮動小数点算術 (ISO/IEC TS 18661-2:2015) (ISO store) (2015 draft)
    1. 10進浮動小数点算術に対する IEC 60559:2011 のすべての要件およびいくつかの基本的な推奨事項をサポートするための C11 への変更を提供します。 これは ISO/IEC TR 24732:2009 に取って代わります。
  • 2015年 FP TS パート3: 交換および拡張型 (ISO/IEC TS 18661-3:2015) (ISO store) (2015 draft)
    1. 算術用および非算術用両方のための、拡張浮動小数点フォーマットおよび交換用フォーマットに対する、 IEC 60559:2011 の推奨事項をサポートするための C11 への変更を提供します。
  • 2015年 FP TS パート4: 補助関数 (ISO/IEC TS 18661-4:2015) (ISO store) (2015 draft)
    1. π単位の三角関数、平方根の逆数、複利などを含む、 IEC 60559:2011 によって推奨されるすべての数学演算をサポートするための C11 への変更を提供します。
  • 2016年 FP TS パート5: 補助属性 (ISO/IEC TS 18661-5:2016) (ISO store)(2016 draft)
    1. IEC 60559:2011 によって推奨されるすべての補助属性 (評価モデル、例外処理、再現性など) をサポートするための C11 への変更を提供します。
  • 2018年 C17 (ISO/IEC 9899:2018) (ISO Store) (Final draft)
    ATOMIC_VAR_INIT の非推奨化および以下の欠陥報告に対する修正が含まれます。

調査後の所感

※この記事は今後も加筆する可能性が高いです。



.gz · 最終更新: 2020/03/10 22:31 by kokiu