「血まみれの愚かな解決策」:Cの歴史



信じられないかもしれませんが、Cはボロボロのペーパーバックマニュアルとして生まれたわけではありません。



何らかの形で、C言語は、1980年代以降に開発されたほぼすべてのプログラミング言語の形成に影響を与えてきました。C ++、C#、Objective Cなどの一部の言語は、Cの直接の子孫であることが意図されていましたが、他の言語は単にその構文を採用して適応させました。Java、PHP、Ruby、Python、またはPerlから切り替えたプログラマーは、単純なCプログラムを理解するのにほとんど問題はありません。この意味で、Cはプログラマーの言語フランカと考えることができます。



しかし、Cは単一のプログラミングモノリスとしてどこからともなく出現したわけではありません。歴史Cは、アラン・チューリングの同僚とチェッカープログラムでイギリスで始まります。



神は王を救う



Christopher Stracheyは、Annals of the History of Computing誌に掲載された彼の長い書類によると、「理想的なプログラミングの人」と呼ばれてい ます。彼は1951年にマンチェスター大学コンピューティングセンターでこの評判を獲得しました。 Stracheyは、Ferranti Mark I大学のコンピューターでの作業と、ケンブリッジのKing'sCollegeのAlanTuringとの知り合いのおかげでそこにたどり着きました。



Stracheyは、1916年に、つながりのある英国の家族に生まれました。彼の叔父であるLytton Stracheyは、Bloomsbury Groupの創設者の1人であり、父親であるOliver Stracheyは、両方の世界大戦での連合国のコード違反作戦に尽力しました。



Stracheyがプログラミングとコンピューターサイエンスの専門家として認められるようになったのは、彼の私立学校とケンブリッジ大学のStracheyの教授たちにとって驚きだったでしょう。 Stracheyは常に科学の才能を示しましたが、それらを適用することはめったにありませんでした。



彼が科学研究でのキャリアの希望を持っていた場合、彼は彼の最終試験の目立たない結果によって深刻な打撃を受けました。その代わり、第二次世界大戦中、Stracheyは英国の電子機器会社で働き、後に学校の教師になり、最終的にはロンドンで最も有名な私立学校の1つであるHarrowに行き着きました。



1951年、Stracheyは最初にコンピューターを操作する機会を得ました。彼は、英国国立物理学研究所のMikeWudgerに紹介されました。クリスマスの週末の1日をパイロットACEラボの探索に費やした後、ハローでの暇な時間に、チェッカーをプレイするようにコンピューターを教える方法を考え出しました。Martin Campbell-Kellyによると 、後にStracheyの同僚になるために、「経験が豊富で自信がない人は、正方形のテーブルだけで満足するでしょう」。



最初の試みは実を結びませんでした。パイロットACEコンピューターにはチェッカーを再生するのに十分なメモリがなかっただけですが、最終的にCにつながる言語の開発に不可欠であることが証明されるStracheyの関心の1つの側面を示していました。当時、コンピューターは主にStracheyは、方程式をすばやく解く能力に興味を持っていました(1952年にAssociation for Computing Machineryの会議で認めたように )。



翌年の春、彼はフェランティマークIコンピューターがマンチェスター大学に設置されていることを知り、アランチューリングはその大学のコンピューターラボのアシスタントディレクターでした。 Turingはプログラマー向けの教科書を書き、Stracheyはケンブリッジのコラボレーションからそれを十分に知っていたのでそれを求めました。



1951年7月、Stracheyはたまたまマンチェスターを訪れ、Turingとドラフトプログラムについて個人的に話し合いました。感銘を受けたTuringは、最初のステップとして、Ferranti MarkIが自分自身をシミュレートできるようにするプログラムを作成することを提案しました。シミュレーターにより、プログラマーはコンピューターがプログラムをどのように実行するかを段階的に観察することができます。このような「トレース」プログラムは、プログラムがボトルネックを作成したり、効果がなかったりする部分を特定します。当時、メモリとコンピュータプロセッサのサイクルはどちらも大金に値するものだったので、これはプログラミングの重要な側面でした。



Stracheyのトレースプログラムには1,000を超えるコマンドが含まれていました。当時は、Ferranti Mark I用に作成された最長のプログラムでした。一晩中作業した後、Stracheyはそれを実行でき、完了時に、Campbell-Kellyによると、プログラム は賛美歌「God save 「王様」をコンピューターのスピーカーから。



この愛好家の功績は、国立研究開発公社のマネージングディレクターであるハルズベリー卿の注目を集めました。



彼がDavidという名前のプログラマーのトリオによって実行されているケンブリッジプロジェクトについて学んだのはこの立場でした。



デビッドとゴリアテタイタン



ケンブリッジ大学コンピューティングセンターは、科学者にサービスを提供することに重点を置いていました。数学研究所の最初のコンピューターであるEDSACとEDSAC2は、大学全体の研究者が利用できるようになりました。彼らは紙のテープに打ち抜かれ、機械に挿入されるプログラムを書きました。



コンピュータセンターでは、このようなパンチテープが洋服のラインに貼り付けられ、勤務時間中に次々と実行されていました。この待機中のプログラムのキューは、「ジョブキュー」として知られるようになりました。これは、計算タスクを編成するはるかに複雑な方法を説明するために今日でも使用されている用語です。





6:55に、EDSACの「ジョブキュー」が表示されます。



EDSAC 2が稼働してからわずか2年後、大学はもっと強力なマシンがすぐに必要になることに気づきました。この問題を解決するには、商用メインフレームを購入する必要があります。大学はIBM7090とFerrantiAtlasのオプションを検討しましたが、これらのマシンのどちらも購入できませんでした。 1961年、フェランティ部門のマネージャーであるピーターホールは、ケンブリッジ大学でアトラスコンピューターの簡略版を開発することを提案しました。ケンブリッジはタイタンと呼ばれるプロトタイプを手に入れ、フェランティはアトラスが高すぎる顧客に新しいコンピューターを販売できるようになります。



大学の他の部分にコンピューティングサービスを提供するには、このコンピューターにはオペレーティングシステムと少なくとも1つの高レベルのプログラミング言語の両方が必要です。



ほぼ即座に、EDSAC 2用に開発された言語を拡張するというアイデアは放棄されました。「1960年代初頭、「新しいコンピューターを構築しているので、新しいプログラミング言語が必要だ」と一般に考えられていました」 と、2017年のポッドキャストでDavidHartley氏は振り返ります。 DavidWheelerとDavidBarron Hartleyと共に、このコンピューター用の新しいプログラミング言語の開発の初期段階に参加しました。



「新しいオペレーティングシステムの作成は避けられませんでした」とハートリー氏は言いましたが、新しいプログラミング言語ではありませんでした。 「新しい言語を試す機会があると思いました。振り返ってみると、それはばかげた決断だったようです。」



Titanプロジェクトを率いたMauriceWilkesは、新しいプログラミング言語は必要ないと信じていました。 Titanの主な目的は、ケンブリッジ大学にコンピューティングサービスを提供することでした。そのためには、ユーザーにすでに馴染みのある言語を備えたマシンをできるだけ早く作成して起動することが最適です。



新しい言語を開発する提案を承認する前に、ウィルクスは既存のプログラミング言語の分析を要求しました。 「私たちはそれらを非常に慎重に選びました。そのため、彼は適切な言語はないと判断しました」とハートリーは回想します。興味深いことに、Fortran IVワークグループは、他のFortranフレーバーで利用可能な追加機能について話すことができるケンブリッジのFortranユーザーにも連絡を取りませんでした。このため、 ハートリーが回想するように、グループは「もっと良いものを設計および開発できる」と確信していましたが、数年後、このベンチャーは失敗に終わりました。



このトリオは1962年6月までに、新しい言語の必要性を主張する記事を作成し、ハートリーが言うように、「私たちはそれをやめました」。



この新しいプログラミング言語はCPL(Cambridge Programming Language)と呼ばれ、1963年までにすでに作業が進行中でした。ケンブリッジのプログラマーには、ロンドン大学のジョンバクストンとエリックニクソンが加わり、CPLは現在Combined ProgrammingLanguageの略です。プロジェクトは成長し、ウィルクスはクリストファー・ストラチェイを率いてもらうことにしました。Campbell-Kellyによると、すぐに、 プロジェクトに関係する人々がCPLを「クリストファーのプログラミング言語」としてデコードし始めました。



言語研究者のグループは、ケンブリッジやロンドン、そしてロンドン大学で会いましたが、Stracheyが妹と住んでいたケンジントンタウンハウスのワークショップで会うこともありました。家の裏の部屋にはビクトリア朝の椅子が並んでいて、床には枕があり、壁にはストラチェイの親戚の一人によるブルームズベリーグループのメンバーの肖像画が飾られていました。 Stracheyが「法廷パーティーを主催」し、時にはドレッシングガウンを着て、数年後にDavid Barronが思い出したように、「私たちは世界をより良く変える方法について議論し、夕方に家に帰りました」。



その時までに、David Wheelerは他のプロジェクトに移り、Hartley、Barron、Buxton、Nixon、Stracheyの5人の同僚を残していました。



ハートリーはCPLに取り組むのが大好きでした。「それは実際にはかなり興味深い仕事でした」と彼は回想します。会議はかなり非公式でした。 「私たちはさまざまなトピックについて非常に熱心に話し合い、時間の経過とともに紙の飛行機を互いに投げ始めました。」



このグループは、さまざまなユーザーにとって実用的であると同時に、見た目にも美しく効果的な「理想的な」言語を作成することを目的として、ALGOL60仕様から始めました。



優先順位付けの問題はほとんどすぐに始まりました。デビッド・バロンがストラチェイについて言ったように、「重要な点と同じ力で、小さな違いについて彼の見解を擁護するのが一般的でした」。そのようなマイナーな論争の1つは、「IF ... THEN ... ELSE」構成の文法に対するStracheyの反対でした。 「私の名前を、文字通り正しくない英語を使用するという推奨に関連付けることはできません」-これは、ハートリーのコンピューティングの歴史の年報に関する回想録によると 、彼の見解でした。 Stracheyは「OR」を好みました。これは、「OR」が存在する他のほとんどすべての言語で使用されていた方法と矛盾していました。しかし、彼の好みは勝ちました、そして CPLリファレンスガイドで ORは、ユーザーがELSEを期待する場合に使用されます。





もちろんオンラインで見つけることができるCPLマニュアル



乗算演算を示すためにアスタリスクを使用しないようにする方法の開発にも、貴重な時間が費やされています。この場合、「3 * a」を意味する「3a」と変数名としての「3a」を区別するために複雑なルールを開発する必要があるため、美的配慮により実用的なプログラミング言語の実装が遅くなる複雑さが生じました。



一方、ケンブリッジのユーザーは、新しいAtlasコンピューター用の実用的なプログラミング言語がないことにますます苛立ちを覚えていました。言語仕様はほぼ完成しましたが、コンパイラはまだ存在していませんでした。ワーキンググループはCPLを非常に複雑にしたため、マシンコードでコンパイラを作成する初期の試みは非常に効果がありませんでした。



プロモーションから



1965年、Stracheyはマサチューセッツ工科大学(MIT)に数か月間出発し、帰国後、オックスフォードプログラミング研究グループのディレクターになりました。その間に、マーティン・リチャーズはケンブリッジのCPLプロジェクトに参加しました。彼は、ユーザーが使用できるCPLの簡略版の開発に着手しました。この言語BCPL(「基本」、「単純」の「B」)には、効率的なコンパイラが必要でした。



MITにいる間、StracheyはMartin Richardsが研究所で2年間のサバティカルを取得するのを手伝い、1966年にRichardsはBCPLをマサチューセッツに連れて行き、そこでコンパイラーの作業を行うことができました。



BCPLは、コンパイラーが自己コンパイルできるため、「ブートストラップ」言語です。基本的に、BCPLコンパイラのごく一部はアセンブリまたはマシンコードで記述され、残りのコンパイラは対応するBCPLのサブセットで記述されます。 BCPLで記述されたコンパイラの部分はアセンブリ部分に渡され、結果のコンパイラプログラムを使用して、BCPLで記述された任意のプログラムをコンパイルできます。



ブートストラップを備えたコンパイラは、あるコンピュータまたはオペレーティングシステムから別のコンピュータまたはオペレーティングシステムに言語を移植するプロセスを大幅に簡素化します。コンパイラを別のコンピュータで実行するには、特定のコンピュータに固有のコードで記述された、コンパイラの比較的小さな部分を書き直すだけで十分です。



リチャーズがMITでBCPLコンパイラに取り組んでいる間、研究所はBellLabsとGEとのMulticsプロジェクトへの参加を開始しました。プロジェクトをサポートするために、MITとBellLabsを接続するネットワークが作成されました。



2つの組織間のネットワーク接続は、名目上、Multicsの操作を容易にすることを目的としていましたが、Ken Thompsonは、MITメインフレームを「ローミング」して他のプロジェクトを探すことは社会的に受け入れられると語り、それがBCPLコードとドキュメントを見つけた方法です。彼はそれらをBellLabsメインフレームにダウンロードし、作業を開始しました。 「私は必要なことを実行できる言語を探していました」とトンプソンは回想します。 「巨大なマシンで独自のオペレーティングシステムを使用するこの時代のプログラミングは非常に困難でした。」



トンプソンがBCPLを使って実験した頃、ベルラボはマルチックスコンソーシアムから撤退し、トンプソンのコンピュータサイエンス部門は一時的にコンピュータを使い果たしました。



彼女がついにコンピューターを手に入れたとき、それは中古のPDP-7であり、その時代の基準によってさえ特に強力ではありませんでした。それにもかかわらず、トンプソンはこのマシンでUnixの最初のバージョンを構築して実行することに成功しました。



PDP-7のメモリには8192個の「ワード」がありました(この場合のワードは18ビットでした。業界ではまだ8ビットの「バイト」が標準化されていませんでした)。 Unixは最初の4,000語を使用し、残りの4,000語はプログラムの実行に使用されました。



トンプソンは、BCPLのコピー(それ自体は削除されたCPLでした)を、PDP-7の空きメモリの4,000ワードに収まるように絞りました。圧縮の過程で、彼はカリフォルニア大学バークレー校で学生として出会った言語の一部を借りました。このSMALGOL言語は、それほど強力ではないコンピューターで実行するように設計されたALGOL60のサブセットでした。



ThompsonがPDP-7で使用することになった言語は、彼自身の説明によれば、「SMALGOL構文の多くを含むBCPLセマンティクス」でした。つまり、SMALGOLのように見え、BCPLのように機能しました。この新しい言語は、トンプソンが最も有用でPDP-7の制限内に収まると判断した、BCPLの側面のみで構成されていたため、BCPLの名前を単に「B」に短縮することにしました。



Thompsonは以前にアセンブラーでPDP-7用のUnixを作成していましたが、1969年でさえ、オペレーティングシステムを構築する理想的な方法ではありませんでした。 PDP-7では、コンピューターがかなり基本的であり、トンプソンが主に楽しみのためにオペレーティングシステムを作成したため、機能しました。



複数のプログラマーが保守および更新する必要があるオペレーティングシステム、またはその時点でより高度なハードウェアで実行する必要があるオペレーティングシステムは、高レベルのプログラミング言語で作成する必要がありました。



そのため、1971年にBell Labsが部門のPDP-11を買収したとき、トンプソンは、Unixを高レベルのプログラミング言語で書き直す時期であると判断しました。彼はそれについてVCF2019のステージでBrianKernighan話しました



同時に、Dennis RitchieはBを借りて、より強力なコンピューターで実行できるように調整しました。彼が再びBに追加した最初の側面の1つは、変数を「入力」する機能でした。 PDP-7のメモリは18ビットワードで構成されていたため、Bは、各変数を1つのメモリワードまたはシステムメモリ内の位置によって参照される一連のワードとして扱うことで簡略化できます。この言語には、固定点または浮動小数点の10進数、整数、または文字列はありませんでした。トンプソンが言ったように、「それはすべてただの言葉だった」。



このアプローチは、メモリが非常に少なくユーザーベースが小さい単純なマシンでは効果的でしたが、複雑なプログラムと多くのユーザーがいるより複雑なシステムでは、変数が文字列か数値かを判断する特定の方法や、非効率的なメモリ使用量につながる可能性があります。 ..。 ThomasBerginとRichardGibsonによるHistoryof Programming Languages



第2版​​によると 、Ritchieはこの変更された言語をNB(「新しいB」)と名付けました。これは、BellLabsを通じてユーザーが利用できるようになったMurrayHill ComputingCenterのメインフレームにインストールされました。



当然、トンプソンがUnixをJavaで書き直すことにしたとき、彼はNBから始めました。最初の3回の試みは失敗に終わり、「自分の利己心のために、言語を非難した」とトンプソンはVCFにニヤリと笑いながら回想した。



失敗するたびに、リッチーは彼とケンが必要とする機能をNBに追加しました。彼はかつて構造を追加しました-一貫したまたは「構造化された」方法で多くの個々の値を格納する変数、その後トンプソンはこの新しい言語でUnixを書くことができました。RitchieとThompsonは、B、SMALGOL、BCPL、およびCPLにない構造の追加が、言語の名前を変更するのに十分な重要な変更であると考え、BはCになりました。



Cサインの下での生活





1955年にFerrantiMark 1(Manchester Electronic Computerとしても知られる)のChristopherStrachey。



Cは、Unixとほぼ同じ方法でBellLabsから脱出しました。 PDP-11を市場で最も成功したミニコンピューターの1つにするのに役立ちましたが、最も魅力的なのはUnixの値札でした。



トンプソン氏によると、PDP-11を備えたデータセンターであれば、メディアとメールのコストでUnixをインストールでき、CにはUnixが付属していました。トンプソン氏によると、C成功した主な理由は非常に多くのキャンパスにありました。その手紙の中で、彼は「彼らはCを知っている多くの人を卒業した」と書いた。



Cの成功をさらに後押ししたのは、1978年にCプログラミング言語が出版されたことです デニス・リッチーとブライアン・カーニガン。 228ページの小さな本は、当時の基準でさえ、非常にシンプルでアクセスしやすい作品になりました。



C構文に関する幅広い知識は、その後の多くの言語の開発に影響を与えましたが、Cとはほとんどまたはまったく類似していませんでした。PHPやJavaScriptなどのスクリプト言語には、Thompsonが元々BをPDP-7の小さなメモリフットプリントに収めるように設計したプログラミング表記が含まれています。たとえば、これらは「++」インクリメント演算子と「-」デクリメント演算子です。処理する単語が4,000語しかない場合、「x = x +1」を「x ++」に減らすと、かなりのスペースを節約できます。



トンプソンは、Cがこれほど普及するとは思っていませんでした。 「周りには、まったく異なる、非常に興味深く、便利な言語がたくさんありました」とトンプソンは言いました。 「私の美的感覚は、1つの言語で宇宙のすべてのニーズをカバーすることはできないと私に教えてくれました。」



Unixのように、Cは失敗から生まれた成功でした。どちらの場合も、プログラマーは、あまりにも多くの質問があったために運命づけられたプロジェクトの最良の部分を取りました。 Unixを生み出したMulticsは、ピーク時に約80台のコンピューターでのみ使用され、最終的にCの作成につながったCPLは完成せず、ケンブリッジの研究者は1967年にそれを放棄しました。



Christopher Stracheyがオックスフォードでプログラミング研究グループを始めたとき、彼は「仕事を実用的なものと理論的なものに分けることは人為的で有害です」と述べました。

CPLは実用的な側面と理論的な側面を組み合わせることになっていたが、実装においては理論的すぎることが判明した。CPLワーキンググループは、CPLでのプログラミングを試みませんでした。



しかし、StracheyがCPLで理論と実践を統合できなかったとしても、彼の態度は間違いなく正しかった。「CはUnixを書くために書かれました」とトンプソンは回想します。そして「Unixは私たち全員がプログラムを書くことができるように書かれました。」






広告



あらゆるタスクに安価なサーバー-それは私たちの壮大なサーバーについて です。数回クリックするだけで独自のプランを作成できます。最大構成-128CPUコア、512 GB RAM、4000 GBNVMe。






All Articles