内容へ移動
HoNoBoNoWiki
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
サイトマップ
ログイン
>
最近の変更
サイトマップ
トレース:
· 最終更新: 2020/03/28 19:29 by
koki
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
<refnotes> refnote-id : 1 reference-format : [] note-id-format : [] </refnotes> ======📃C言語📝====== =====前書き===== どのようなコンセプトで記事を書いたのかは[[local:koki:research:2020:information_technology|こちら]]を読んでください。 どうして数ある[[https://wa3.i-3-i.info/word189.html|コンパイラ型言語 ]]の中でc言語を選択したのか、それは 「Cの精神---表現力, 効率, 小型, マシンに対する究極的な制御---」[([[https://www.amazon.co.jp/dp/B084SXSPDN/ref=cm_sw_r_tw_dp_U_x_UR9yEb68HPD0X|「プログラミング言語C 第2版」 ANSI規格準拠 B.W.カーニハン (著), D.M.リッチー (著), 石田 晴久 (翻訳) ]])] その精神は現代でも通用すると思ったためです。 加えて、1972年にC言語として誕生した古い言語なのに\\ 下図の推移の通りに、2019年で9位また他の年でも10位内にランクインしており、人気は今も健全というのも理由の一つです。 <figure> 2019年版の「オクトバース(The State of the Octoverse)」と題する、\\ GitHubが開発者の間で人気のプログラミング言語について調査した[([[https://www.businessinsider.jp/post-202166|「人気プログラミング言語トップ10【2019版】」Rosalie Chan Nov. 21, 2019, 04:30 AM Tech Insider Retrieved Mar 8, 2020.]])]レポート内の\\ Community trendsのTop languages。\\ {{:local:classroom:2018:kouki:development:program_language:c_programming_language:スクリーンショット_0002-03-08_3.01.49.png?500|}} <caption> オクトバースレポート内のTop languagesという項目のスクリーンショット[([[https://octoverse.github.com/#trends|「Top languages」github.com Retrieved Mar 8, 2020.]])]</caption> </figure> \\ =====他言語との関係===== <figure> 繋がりが多いほど円が大きくなるネットワーク図でC言語は大きめのサイズの円です。 {{:local:classroom:2018:kouki:development:program_language:c_programming_language:c_languages_influenced.png?500|}} <caption> 影響を与えた言語と受けた言語の図。[([[https://exploring-data.com/vis/programming-languages-influence-network/#C|「Programming Languages Influence Network」Ramiro Gómez. Retrieved Mar 8, 2020.]])]</caption> </figure> \\ =====歴史===== 参考[([[https://ja.cppreference.com/w/c/language/history|「Cの歴史」cppreference.com Mar 8, 2020.]])] ====初期のC==== * 1969年、PDP-7というメインフレームに搭載したOS(後にUNIXと呼ばれる)のために、システムプログラミング言語が必要だと考えたケン・トンプソンは、BCPL をベースに B言語 を作成しました。\\ \\ B言語の特徴は型のないC言語と考えられています。[([[https://www.bell-labs.com/usr/dmr/www/chist.html|「The Development of the C Language」 Dennis M. Ritchie Retrieved Mar 8, 2020.]])]\\ B言語の名前の由来は、BCPLの縮約という説や、[[https://multicians.org/index.html|Multics]]時代にトンプソンによって作成された言語であるBon言語に由来するという別の説があります。[(#6)]\\ \\ そのBon言語の由来は、トンプソンの妻のBonnieにちなんだという説、\\ または(百科事典の引用によると)後の信仰(言語の使い方?)やその呪文の呟き(コマンドのこと?)を伴う儀式(コマンドの使い方?)に、ちなんで命名された説があります。(原文にスラングを含んでいるのか単に自分の英語の理解度不足なのかわからないため支援を求めます。原文:after a religion whose rituals involve the murmuring of magic formulas. )[(#6)] <figure> {{:local:classroom:2018:kouki:development:os:unix:pdp7_1_1200x600.jpg?400|}} <caption> DEC PDP-7[([[https://livingcomputers.org/Computer-Collection/Vintage-Computers/Minicomputers/DEC-PDP-7.aspx|「DEC PDP-7 Minicomputers」LIVING COMPUTERS museum + labs | SODO Retrieved Mar 8, 2020.]])]</caption> </figure> \\ * 1971年 ケン・トンプソンはB言語 を PDP-11 に移植しました。そのときにB言語を拡張し、加えてPDP-11用の機械語命令を生成するために、そのコンパイラも書き直しました。 この言語をトンプソンはNB言語(「new B」) と呼びました。[(#6)] <figure> {{:local:classroom:2018:kouki:development:program_language:c_programming_language:pdp-11_1200x600.jpg?600|}} <caption> DEC PDP-11/70 (“MISS PIGGY”)[([[https://livingcomputers.org/Computer-Collection/Vintage-Computers/Minicomputers/DEC-PDP-11-70-(-Miss-Piggy%E2%80%9D).aspx|「DEC PDP-11/70 (“MISS PIGGY”) Minicomputers」LIVING COMPUTERS museum + labs | SODO Retrieved Mar 8, 2020.]])]</caption> </figure> * 1972年 C言語 に改名されました。 * 主な変更:構造体(実は構造体を加える前段階の状態のC言語で、短時間でお試しシステム(文脈上OSと思われる)を作ろうとしたものの、「gave up the effort」諦めたみたいです。[(#6)])、\\ 演算子( && および ||(これが結構すごいことらしい[(#6)]))、プリプロセッサ、移植性のある入出力。 * 1973年の夏 PDP-11用の[[local:classroom:2018:kouki:development:OS:UNIX|UNIX]]カーネル が C言語 で書き直されました。[(#6)] * 主な更新:unsigned、long、共用体、列挙型、型の安全性の向上。 <figure> * 1978年 ブライアンカーニハンとケン・トンプソンは[[https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EC|プログラミング言語 C 第1版]]を出版しました。[(#6)] {{:local:classroom:2018:kouki:development:program_language:c_programming_language:769px-the_c_programming_language_first_edition_cover_2_.png?400|}} <caption> プログラミング言語 C 第1版のカバー[([[https://ja.wikipedia.org/wiki/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9EC|「プログラミング言語C」出典: フリー百科事典『ウィキペディア(Wikipedia)』 Retrieved Mar 8, 2020.]])]</caption> </figure> \\ ※下記より「Cの歴史」cppreference.comの引用です。(今後調査によって加筆します。) ====標準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) - 大きく拡張されたワイド文字とマルチバイト文字のサポート (wctype.h、 wchar.h、ストリーム入出力の追加と変更など)。 - ダイグラフ、iso646.h。 * 1995年 正誤票 1 (ISO/IEC 9899 TCOR1) * 44 個の小さな変更 * 1996年 正誤票 2 (ISO/IEC 9899 TCOR2) * 24 個の小さな変更 * 1999年 C99 (ISO/IEC 9899:1999) - 新しい機能 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 が削除されました。 * 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) - スレッド対応のメモリモデル、stdatomic.h、threads.h、型総称関数、alignas/alignof、noreturn、static assert、解析可能性拡張、複素数型と虚数型の拡張、無名構造体および無名共用体、排他的ファイルオープンモード、quick_exit。 - gets が削除されました。 - 境界チェック付きインタフェース TR から: 境界チェック付きインタフェース。 - 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 ) - 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) - 10進浮動小数点算術に対する IEC 60559:2011 のすべての要件およびいくつかの基本的な推奨事項をサポートするための C11 への変更を提供します。 これは ISO/IEC TR 24732:2009 に取って代わります。 * 2015年 FP TS パート3: 交換および拡張型 (ISO/IEC TS 18661-3:2015) (ISO store) (2015 draft) - 算術用および非算術用両方のための、拡張浮動小数点フォーマットおよび交換用フォーマットに対する、 IEC 60559:2011 の推奨事項をサポートするための C11 への変更を提供します。 * 2015年 FP TS パート4: 補助関数 (ISO/IEC TS 18661-4:2015) (ISO store) (2015 draft) - π単位の三角関数、平方根の逆数、複利などを含む、 IEC 60559:2011 によって推奨されるすべての数学演算をサポートするための C11 への変更を提供します。 * 2016年 FP TS パート5: 補助属性 (ISO/IEC TS 18661-5:2016) (ISO store)(2016 draft) - IEC 60559:2011 によって推奨されるすべての補助属性 (評価モデル、例外処理、再現性など) をサポートするための C11 への変更を提供します。 * 2018年 C17 (ISO/IEC 9899:2018) (ISO Store) (Final draft) \\ ATOMIC_VAR_INIT の非推奨化および以下の欠陥報告に対する修正が含まれます。 =====調査後の所感===== 自分はプログラミングをSwiftという言語からはじめました。その時はOSそのものが言語で書かれているなんてことは思いもしませんでした。 カーネルをC言語で書くというのは未だ想像つかないので、そこを調べて追記できると思います。 今回は、年表に肉付けするような形で[[https://www.bell-labs.com/usr/dmr/www/chist.html|「The Development of the C Language」]]というサイトを調べました。ほとんど和訳作業(またもgoogle翻訳に助けられました。)でしたが、内容が急に処理の話になるので、もはや翻訳作業(google翻訳の文章を訂正する作業)は癒しで、処理の話の部分をどこまで理解できるかみたいになっていました。(今回は噛み砕けなかったので書いていません。) UNIXの回もそうですが、まだまだ加筆・修正の必要性があるので、調査を進めたいと思います。 ※この記事は今後も加筆する可能性が高いです。 \\ \\ **//Thank you for reading!!!!//** <WRAP left safety round box 87px> **[[local:koki:research:2020:information_technology|previous]]** </WRAP> <WRAP center safety round box 66px> **[[local:classroom:2018:kouki|home]]** </WRAP> =====参考文献=====
· 最終更新: 2020/03/28 19:29 by
koki
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ