C と C は、膨大な量のコードが記述される象徴的な言語です。彼らは一つになるためにどのような道を歩んできたのでしょうか?この記事では、C の出現とその公式標準化の始まりについて説明します。また、C とクラス、および最終的な C への変換についても学習します。
1969年 — 1973年。Cがこの世に生まれる
1969年。アポロ11号が月を訪問。 AT&T ベル研究所は、今日私たちが C として知っている言語を開発しています。現時点では、Unix オペレーティング システムは開発の初期段階にあります。
実際、C 言語は B 言語から主な機能を引き継ぎました。名前の由来も。 Unix に関しては、当初はアセンブリ言語で実装されており、高級言語用のコンパイラさえありませんでした。このプロジェクトの開発は、C 言語が作成された理由の 1 つです。
1971 年に、C のコンパイラーといくつかのユーティリティが Unix の第 2 バージョンに組み込まれました。そして 1973 年には、Unix カーネルは主に C で書かれていました。
1978年。本が最初の仕様となる
デニス・リッチーとブライアン・カーニハンは、1978 年 2 月 22 日に「The C Programming Language」の初版を出版しました。この本は、C 言語に関する最初の広く入手可能な資料となりました。
図 N1 - 『C プログラミング言語』の初版の表紙
出版されてから最初の公式言語認定が行われるまで、C 開発の標準となっています。 「標準」は、著者の姓の最初の文字にちなんで、K&R と呼ばれました。
この本では、最小限の動作プログラムの例として「Hello World」プログラムを紹介しました。 1978 年以降、プログラミング言語に関するほぼすべての書籍には、このコード例が欠かせませんでした。現在、最初のプログラムとして「Hello World」を表示することは、確立された伝統となっています。
#include <stdio.h> main() { printf("Hello, World\n"); } </stdio.h>
K&R はいくつかの言語機能を紹介しました。たとえば、構造体 — 参照しやすいように 1 つの名前の下にグループ化された複数の変数のセット、long int および unsigned int データ型
。代入を伴う加算/減算演算子も K&R C で変更されました。以前は、値を 1 つ増やすには、a = 1 と記述する必要がありましたが、そのような演算子は C コンパイラを混乱させていました。それに、a = 1 (1 増加) と a = 1 (代入) の違いは、人間の観点からはかなり脆弱に見えました。これらの演算子がおなじみの演算子、a = 1.
に変わったのは、K&R C でのことでした。この本のコード例は統一されたスタイルでデザインされており、その名前も作成者の姓の最初の文字にちなんで付けられています。 K&R スタイルは、主要なインデントとして 8 つの空白を使用することで注目に値します (ただし、4 つの空白がより一般的に使用されます)。 Unix カーネルはこのスタイルで記述されているため、「カーネル スタイル」とも呼ばれます。
#include <stdio.h> main() { printf("Hello, World\n"); } </stdio.h>
1979. C クラス付き
1979 年 5 月、ベル研究所の従業員 Bjarne Stroustrup は、最初の Unix クラスターとなるシステムの開発を開始しました。言い換えれば、彼は複数のコンピュータの共通ネットワークに接続された分散コンピューティング システムの作成を開始しました。
問題は、これに適したツールキットが存在しないことでした。既存のプログラミング言語の中には、この問題の解決に役立つオプションが 2 つありましたが、どちらにも微妙な違いがありました。 BCPL 言語は高速ですが、低レベル言語に非常に近いため、大規模なプロジェクトには適していませんでした。一方、オブジェクト指向プログラミング言語 Simula は、このタスクには適していましたが、非常に遅かったです。そこで Stroustrup は、独自の C ベース言語の実装に着手しました。
1979 年 10 月には、C にクラスを追加した CPRE プリプロセッサが準備されていました。この言語は C with Classes と呼ばれていました。プログラム コードを記述して、それをプリプロセッサに渡すことができます。ただし、これは依然として C の拡張機能であると考えられていました。
クラスを含む C の最初のバージョンには、クラスに加えて次のものが含まれていました。
- 派生クラスですが、仮想関数はまだありません;
- アクセス制御;
- コンストラクターとデストラクター;
- フレンドクラス;
- 関数の引数の型の制御とキャスト。
1983.ANSI C
この言語の人気は高まっていました:
- マイクロコンピューターをプログラミングするための主要な言語として C が Basic に取って代わり始めました。
- 新しいコンパイラが登場しました。さらに、それらは言語開発に直接関与していない人々によって書かれています。
しかし、その人気にもかかわらず、C には K&R という暗黙の基準しかありませんでした。コンパイラの開発者は、言語に多くの非標準的な変更を導入していました。コードの移植性の問題が深刻化し始めたのはこのときです。この範囲の問題を考慮して、最初の C 標準が出現し始めました。
1983 年、米国規格協会 (ANSI) は仕様を草案するための委員会を設立しました。標準化プロセスは 1989 年にのみ終了し、この言語の最初の標準が「ANSI X3.159-1989: プログラミング言語 C」として承認されました。同じ年に、標準に記載されている言語について説明した書籍「The C Programming Language」の第 2 版が出版されました。 1 年後、この規格は若干の変更を加えて国際標準化機構 (ISO) によって承認されました。
図 N2 - 書籍「C プログラミング言語」の第 2 版の表紙
K&R 以降の言語への変更の挫折に加えて、標準には関数プロトタイプやより洗練されたプリプロセッサなどのまったく新しい機能が含まれていました。この規格には、標準ライブラリの構成の説明も含まれています。さらに、以前に定義されていなかったいくつかの手段には、より正確な定義が与えられました。
1983. C クラス付き C
1982 年に、Bjarne Stroustrup は、C with Classes を州外に持ち出す変更に取り組み始めました。これを作成者は「中程度の成功」と呼びました。そこからコンパイラの開発に1年かかりました。 Cfront は 1983 年に登場しました。
その主な特徴は、クラスを含む C を C コードに変換することでした。その後、変換されたコードが C コンパイラに渡されました。この機能により、より多くの人がコンパイラを使用できるだけでなく、既存の Unix インフラストラクチャでもコンパイラを使用できるようになりました。
言語が進化するにつれて、その名前は何度か変わりました。コミュニティがそれを単に C と呼んでいたため、最初は C84 と呼ばれました。しかし、言語のサブセットというよりは新しい C 標準に近いものであったため、この名前は誤解を招くものでもありました。そして、実際には前の名前の問題には役に立ちませんでした。最終的に、この言語は C 、つまり C とインクリメント演算子として知られるようになりました。
クラスのある C から C に移行すると、言語に他の新機能が追加されました。
- 仮想関数;
- 関数名と演算子のオーバーロード;
- 参考文献;
- 定数;
- 型チェックの改善;
- ユーザー制御のフリーストア メモリ制御。
今日でも使用されているコメント スタイルは、まさに言語発達のこの段階で根付きました。このスタイルは他の言語でも使用されています。
これが、C さんの正式認定前の生活です。 Stroustrup は、プログラマー コミュニティの要求にかなり迅速に対応していました。彼は言語の標準的な説明を表す作品を出版していました。したがって、この言語は主に作成者の努力によって維持されてきました。
1985年。「Cプログラミング言語」。
1985 年 2 月に、C の最初の配布可能なバージョンがリリースされました。同年 10 月、言語作成者 Bjarne Stroustrup は、書籍『The C Programming Language』の初版をリリースしました。
図 N3 - 書籍「The C Programming Language」の初版の表紙
これは、カーニハンとリッチーの著書「The C Programming Language」と同じように、C 言語の最初の暗黙の標準となりました。最初の公的規格が制定されるまではそうでした。
この本の中で、Stroustrup は C の観点から言語機能と設計の問題を取り上げ、豊富なコード例で各点を強調しました。
それ以来、この本はさらに 3 回再版され、そのたびに言語が更新されました。この記事の執筆時点では、最新の第 4 版には C 11 標準が含まれています。
1989.C 2.0
1989 年 7 月に、Cfront 2.0 コンパイラーがリリースされました。以前のバージョンと比べて大幅に改訂され、C 言語に新たな点も加えられました。
現時点では、テンプレートがすでに話題になっています。それは現実的な目標であったため、それらが実装されることを誰も疑いませんでした。もう 1 つの潜在的な優れた機能である多重継承に関しては、プログラミング コミュニティの作成者にとって大きな課題でした。 C で多重継承を実装するのは不可能だと多くの人が言っています。たとえば、Simula では、ガベージ コレクターの必然的な複雑さのため、同様の提案は拒否されました。ただし、多重継承がなければコードが非常に煩雑になるライブラリの開発が大幅に簡素化されるため、多重継承が非常に必要でした。
その結果、結局Cfront 2.0では多重継承が追加されました。この言語への追加は論争を引き起こしました。たとえば、オブジェクト指向プログラミングの典型である Smalltalk 言語には多重継承がないと主張する人もいます。だからこそ、C はそれを採用すべきではありません。言語の作成者は、このような反応は多重継承を真剣に受け止めすぎているためであると推測しました。
上記の C バージョンでは次のものも導入されました。
- メンバーへのポインター。これにより、非静的フィールドおよび関数へのポインターを作成できます。
- static および const メンバー関数;
- アクセス修飾子 保護;
- タイプセーフなリンケージ;
- 抽象クラス;
- クラスに固有の new および delete;
1990. ボーランドC
1990 年に、Borland は、C および C プログラムを開発するための Borland C 統合開発環境をリリースしました (なんてひねったことでしょう?)。当初は DOS での開発を目的としていましたが、後に Windows のサポートも導入されました。
図 N4 - Borland C のスクリーンショット
歴史的に、Borland C は Turbo C の子孫ですが、C の特徴であるオブジェクト指向プログラミングのサポートを組み込んでいます。
環境の各バージョンには、独自の標準をサポートする独自のコンパイラがありました。時間が経つにつれ、Borland C は高速アプリケーション開発のために多くの特殊なライブラリを取得しました。
Borland C IDE の最後のバージョンは 1997 年にリリースされ、その後は Borland C Builder シリーズに置き換えられました。 Borland C は 2000 年にコンパイラを備えた Borland C 5.5 のリリースで最終回を迎えました。
Borland C は、DOS 用の快適なエディターでした。ある種の構文の色分けもありました。
ユーリ・ミナエフ氏、PVS-Studio アナライザーの C および C コアのアーキテクト
Borland から 4 年後、Microsoft は Visual C 統合開発環境をリリースしました。
1990. C のテンプレートと例外処理メカニズム
1986 年に、Bjarne Stroustrup は「オブジェクト指向プログラミングとは何ですか?」という記事を書きました。その中で彼は C の 3 つの欠点を表明しました:
- パラメータ化された型のサポートの欠如;
- 標準の例外処理メカニズムの欠如;
- 多重継承の欠如。
多重継承は 1989 年に C 2.0 で導入され、残りの欠陥は 1990 年に新しい言語機能で修正されました。これらは Stroustrup によって「Annotated C Reference Manual」という本の中で説明されています。
すぐにテンプレートと例外処理が次々と登場しました。テンプレートは 7 月にシアトルで承認され、例外処理メカニズムは 11 月にパロアルトで承認されました。これらのリリースが近いのは、これらのイノベーションが両方とも同様の問題に対処しているという事実によるものです。言語の作成者自身によると、テンプレートを使用すると、静的型システムの機能を拡張することで、プログラム実行中のエラーの数を減らすことができます。一方、例外を使用すると残りのエラーを処理できます。
パラメータ化された型は、C の初版で検討されました。しかし、設計と実装の問題を十分に検討する時間がなかったため、延期せざるを得ませんでした。例外も同様の理由で延期された。それは無駄ではありませんでした。彼らのデザインは 1984 年から 1989 年まで続きました。
「注釈付き C リファレンス マニュアル」では、名前空間と実行時に型を識別する機能も紹介されました。
その時点でジェネリック プログラミングが勢いを増し始めました。テンプレートを使用した C は先駆者ではありませんでした。テンプレートを作成する際、作成者は ML、CLU、および Ada プログラミング言語からアイデアを引き出しました。
しかし、C がこのパラダイムを推進していたと言っても間違いありません。テンプレートにより、多くの場合、マクロを使用せずにコードを作成できるようになり、足を撃たれる可能性が減りました。ここで、軟膏のハエが現れました。汎用プログラミングでの作業を簡素化する完全に動作する機能は、C 20 によってのみ登場しました。しかし、テンプレートによってコンパイル段階で計算が可能になることを知ったプログラマーは、それでも止まらなかったのです...
一方、C の例外はそれほど明確ではありません。残念ながら、以前のアプローチと比較して、すべてのエラー処理問題が解決されたわけではありません。例外を使用すると、制御フローが重要になります。例外をプライベートに継承する、例外を値でキャッチする、catch ブロックを間違った順序で配置するなど、例外を悪用する方法はたくさんあります。その結果、Google などの一部のコーディング標準では例外の使用が禁止されています。 C コードのスタイル。
Philipp Khandelyants 氏、PVS-Studio C および C 開発チームのチームリーダー
「注釈付き C リファレンス マニュアル」は、正式な C 標準化への一種の先駆けとなっています。これは、間もなくこの言語の標準となるすべての革新について説明したものです。
次のシリーズでは…
この記事では、1969 年から 1990 年までの C と C の歴史の出来事について説明しました。次の記事では、1991 年から現在までの C の歴史を詳しく掘り下げます。
- C の作成方法に関する Bjarne Stroustrup の本;
- C 98 は最初の公式規格です。
- C99—C は動き続けます;
- 技術レポート 1 — 紙面上の新しい C 機能;
- Viva64 リリース、その後 - PVS-Studio;
- C は達成されたことを記録し (C99、C11)、C は勢いを増します (C 11、C 17);
- C 20 および C 23。
以上がC と C の歴史。パート 1: C 言語の出現と標準化。クラスを含む C は C になりますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Cは、現代のプログラミングにおいて依然として重要な関連性を持っています。 1)高性能および直接的なハードウェア操作機能により、ゲーム開発、組み込みシステム、高性能コンピューティングの分野で最初の選択肢になります。 2)豊富なプログラミングパラダイムとスマートポインターやテンプレートプログラミングなどの最新の機能は、その柔軟性と効率を向上させます。学習曲線は急ですが、その強力な機能により、今日のプログラミングエコシステムでは依然として重要です。

C学習者と開発者は、Stackoverflow、RedditのR/CPPコミュニティ、CourseraおよびEDXコース、Github、Professional Consulting Services、およびCPPCONのオープンソースプロジェクトからリソースとサポートを得ることができます。 1. StackOverFlowは、技術的な質問への回答を提供します。 2。RedditのR/CPPコミュニティが最新ニュースを共有しています。 3。CourseraとEDXは、正式なCコースを提供します。 4. LLVMなどのGitHubでのオープンソースプロジェクトやスキルの向上。 5。JetBrainやPerforceなどの専門的なコンサルティングサービスは、技術サポートを提供します。 6。CPPCONとその他の会議はキャリアを助けます

C#は、開発効率とクロスプラットフォームのサポートを必要とするプロジェクトに適していますが、Cは高性能で基礎となるコントロールを必要とするアプリケーションに適しています。 1)C#は、開発を簡素化し、ガベージコレクションとリッチクラスライブラリを提供します。これは、エンタープライズレベルのアプリケーションに適しています。 2)Cは、ゲーム開発と高性能コンピューティングに適した直接メモリ操作を許可します。

C継続的な使用の理由には、その高性能、幅広いアプリケーション、および進化する特性が含まれます。 1)高効率パフォーマンス:Cは、メモリとハードウェアを直接操作することにより、システムプログラミングと高性能コンピューティングで優れたパフォーマンスを発揮します。 2)広く使用されている:ゲーム開発、組み込みシステムなどの分野での輝き。3)連続進化:1983年のリリース以来、Cは競争力を維持するために新しい機能を追加し続けています。

CとXMLの将来の開発動向は次のとおりです。1)Cは、プログラミングの効率とセキュリティを改善するためのC 20およびC 23の標準を通じて、モジュール、概念、CORoutinesなどの新しい機能を導入します。 2)XMLは、データ交換および構成ファイルの重要なポジションを引き続き占有しますが、JSONとYAMLの課題に直面し、XMLSchema1.1やXpath3.1の改善など、より簡潔で簡単な方向に発展します。

最新のCデザインモデルは、C 11以降の新機能を使用して、より柔軟で効率的なソフトウェアを構築するのに役立ちます。 1)ラムダ式とstd :: functionを使用して、オブザーバーパターンを簡素化します。 2)モバイルセマンティクスと完全な転送を通じてパフォーマンスを最適化します。 3)インテリジェントなポインターは、タイプの安全性とリソース管理を保証します。

cマルチスレッドと同時プログラミングのコア概念には、スレッドの作成と管理、同期と相互排除、条件付き変数、スレッドプーリング、非同期プログラミング、一般的なエラーとデバッグ技術、パフォーマンスの最適化とベストプラクティスが含まれます。 1)STD ::スレッドクラスを使用してスレッドを作成します。この例は、スレッドが完了する方法を作成し、待つ方法を示しています。 2)共有リソースを保護し、データ競争を回避するために、STD :: MutexおよびSTD :: LOCK_GUARDを使用するための同期と相互除外。 3)条件変数は、std :: condition_variableを介したスレッド間の通信と同期を実現します。 4)スレッドプールの例は、スレッドプールクラスを使用してタスクを並行して処理して効率を向上させる方法を示しています。 5)非同期プログラミングはSTD :: ASを使用します

Cのメモリ管理、ポインター、テンプレートはコア機能です。 1。メモリ管理は、新規および削除を通じてメモリを手動で割り当ててリリースし、ヒープとスタックの違いに注意を払います。 2。ポインターにより、メモリアドレスを直接操作し、注意して使用します。スマートポインターは管理を簡素化できます。 3.テンプレートは、一般的なプログラミングを実装し、コードの再利用性と柔軟性を向上させ、タイプの派生と専門化を理解する必要があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境
