📃C言語📝
前書き
どのようなコンセプトで記事を書いたのかはこちらを読んでください。
どうして数あるコンパイラ型言語 の中でc言語を選択したのか、それは
「Cの精神—表現力, 効率, 小型, マシンに対する究極的な制御—」
その精神は現代でも通用すると思ったためです。
加えて、1972年にC言語として誕生した古い言語なのに
下図の推移の通りに、2019年で9位また他の年でも10位内にランクインしており、人気は今も健全というのも理由の一つです。
他言語との関係
歴史
初期のC
1969年、PDP-7というメインフレームに搭載したOS(後にUNIXと呼ばれる)のために、システムプログラミング言語が必要だと考えたケン・トンプソンは、BCPL をベースに B言語 を作成しました。
B言語の特徴は型のないC言語と考えられています。
B言語の名前の由来は、BCPLの縮約という説や、
Multics時代にトンプソンによって作成された言語であるBon言語に由来するという別の説があります。
そのBon言語の由来は、トンプソンの妻のBonnieにちなんだという説、
または(百科事典の引用によると)後の信仰(言語の使い方?)やその呪文の呟き(コマンドのこと?)を伴う儀式(コマンドの使い方?)に、ちなんで命名された説があります。(原文にスラングを含んでいるのか単に自分の英語の理解度不足なのかわからないため支援を求めます。原文:after a religion whose rituals involve the murmuring of magic formulas. )
1973年の夏 PDP-11用の
UNIXカーネル が C言語 で書き直されました。
※下記より「Cの歴史」cppreference.comの引用です。(今後調査によって加筆します。)
標準C
新しい機能 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 の指定子。
C++ から: inline、宣言とコードの混在、for ループの初期化節における宣言、// コメント、ソースコード中のユニバーサル文字名。
暗黙の関数と暗黙の int が削除されました。
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)
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)
スレッド対応のメモリモデル、stdatomic.h、threads.h、型総称関数、alignas/alignof、noreturn、static assert、解析可能性拡張、複素数型と虚数型の拡張、無名構造体および無名共用体、排他的ファイルオープンモード、quick_exit。
gets が削除されました。
境界チェック付きインタフェース TR から: 境界チェック付きインタフェース。
Unicode TR から: char16_t、char32_t、uchar.h。
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 )
IEC 60559:2011 のすべての基本的な要件といくつかの推奨事項をカバーするための C11 (ほとんどは Annex F) への変更を提供します (C11 は IEC 60559:1989 をベースにしていました)。
調査後の所感
自分はプログラミングをSwiftという言語からはじめました。その時はOSそのものが言語で書かれているなんてことは思いもしませんでした。
カーネルをC言語で書くというのは未だ想像つかないので、そこを調べて追記できると思います。
今回は、年表に肉付けするような形で「The Development of the C Language」というサイトを調べました。ほとんど和訳作業(またもgoogle翻訳に助けられました。)でしたが、内容が急に処理の話になるので、もはや翻訳作業(google翻訳の文章を訂正する作業)は癒しで、処理の話の部分をどこまで理解できるかみたいになっていました。(今回は噛み砕けなかったので書いていません。)
UNIXの回もそうですが、まだまだ加筆・修正の必要性があるので、調査を進めたいと思います。
※この記事は今後も加筆する可能性が高いです。
Thank you for reading!!!!
参考文献