小僧の教えてIT

レジェンドを忘れては、いけない プログラム言語夜話 第3話 C言語

投稿日:

最近、10代~20代の若者が、昭和歌謡を歌っているという。
理由はいろいろとあるかも知れないけど、昭和歌謡の「歌詞」のストレートな力強さは、心に響くものがあるのです。
作詞家 阿久悠、なかにし礼 そして作曲家 都倉俊一など天才的な人たちが残した歌謡曲は、決して忘れ去られることはないとでしょう。

今回の「小僧の教えてIT」は、
「レジェンドを忘れては、いけない プログラム言語夜話 第3話 C言語」
と題して
C言語に関して、できるかぎり、専門用語を使わないで説明いたします。
Cという言語に興味をもっていただけたら幸いです。

注意:このブログは、C言語の解説ではありません。
Cってこんな言語だよ! というお話になっています。

スポンサーリンク

AdSence 336x280

お父さんは、ALGOL(あるごる)

1950年代中ごろにALGOL(あるごる)という言語が誕生しました。
この言語、欧州生まれなんです。
アルゴリズムという言葉からALGOL(あるごる)となりました。

構造化プログラムってなんだ?

個々の処理を小さな単位に分解し、階層的な構造にしてプログラミングすること。突き詰めていけば、プログラムは「連接(逐次)」「選択(条件判断、if文など)」「反復(ループ、for文など)」の3つだけで構築できることが数学的にも証明されている。構造化プログラミングでは、プログラムの構造が明確になり、アルゴリズムの間違いを減らすことができる。
コトバンクより抜粋

まだよくわからないですね。
実は、構造化プログラムというお題だけで「人によって解釈が違う面倒な言葉なのです。」
簡単に言うと
「わかりやすく、処理が分類されていて、間違い(バグ)をみつけやすい」
ぐらいに覚えておいて下さい。

昔、先輩方に散々
「プログラムは、構造化の時代だ」
と言われたのですが、結局本当の意味を教えてもらえなかった(笑えない)

このALGOL(あるごる)の構造化の部分を元にして
1969年ごろ
AT&Tベル研究所のケン・トンプソンが開発したB言語というのが発表されました。
この言語、あまり、普及はしませんでしたが、後のレジェンドを生み出すきっかけとなったのです。

自分が、最初に触れたコンピュータは、バロース社 B7900という大型コンピュータでした。
このバロース社のコンピュータは、ALGOLでツール類が記載されていました。
COBOL主体でしたが、JCLなどという、原始的なバッチ言語ではなくWFL(WORKFLOW )と言う高級言語の処理も持ち合わせた画期的な大型コンピュータでした。

UNIX文化から生まれた言語

COBOLが、大型コンピュータの文化とすると C言語は、UNIXというOSの文化に属します。
UNIXは、1969年、AT&Tのベル研究所にて、ケン・トンプソン、デニス・リッチーらが開発を開始しました。
COBOLが商用なのに対してUNIXは、研究所から誕生したのです。
このUNIXというOSですが、最初は、アセンブリ言語(機械語というやつです)で書かれていたのですが、cのB言語を改良してC言語を開発しました。

レジェンド誕生

デニス・リッチーが開発したものは、C言語で書かれたプログラムを実行可能なアセンブリ言語(機械語)にコンパイル(翻訳)するプログラムです。

それまでのプログラムは、アセンブリ言語(機械語)で書いていたものをより英文に近い(高級言語と一般的に言われています)文法で書くことができるようになりました。

これは、プログラムの開発効率を上げる2つのことを意味します。
1.アセンブリ言語(機械語)というコンピュータ寄りの言葉で書く必要がなくなった。
2.英文に近い言語でプログラムを書くことが可能になった。
3.C言語のコンパイラを移植すれば、C言語書かれたもの(ソースと呼びます)で別のコンピュータを動かすことができる。

アセンブリ言語(機械語)は、コンピュータによって内容が異なります。
同じことを別のコンピュータで実行させるには、それぞれのコンピュータでアセンブリ言語(機械語)で書き直さなければなりません。

ところが
C言語のコンパイラが、移植さえできれば、他のコンピュータで記載されたC言語で書かれたプログラムを「ほぼ、そのまま動かす」ことができたのです。

そしてこれは、特定のコンピュータで書かれていたプログラムを他のコンピュータに移植しやすいということを意味します。

そして、1973年
AT&Tベル研究所のケン・トンプソンとデニス・リッチーは、UNIXそのものをC言語で書き直すことに成功しました。
※全部ではないけど大部分をC言語に書き直したそうです。

お気づきの方もいらっしゃるとおもいますが、

C言語コンパイラを他のコンピュータに移植してしまえば、C言語で書かれたUNIXをいろいろなコンピュータで動作させることができるようになったのです。

これは、コンピュータの言語歴史上の特異点とも呼べる出来事だったのです。

発展

C言語コンパイラは、直接、実行できるプログラムではなく一度、機械語に翻訳するものでしたから、構造的にシンプルなプログラムでした。

C言語コンパイラさえ移植できれば、他のコンピュータで書かれたC言語のプログラムが動作させることができるため、様々な環境でC言語コンパイラの移植がはじまりました。

こうしてC言語は、爆発的な普及がはじまります。
また、1978年にブライアン・カーニハンとデニス・リッチーが、
「プログラミング言語C」
(「The C Programming Language」)
を出版
これが、事実上のC言語の仕様(教科書)となったため、独自仕様が出てくるのを抑制できたのかも知れません。
と言っても、人のやることで「プログラミング言語C」自体が、あいまいなところもあり独自仕様のC言語がなかっとぁけではありません。

1990年代、プログラム言語は、Cから学べ ということで先に上げた
「プログラミング言語C」を渡されることが多かったです。
自分も先輩に「プログラミング言語C」は、絶対に読んでおけよ
購入して読んでいた時期がありました。


C言語の開発者の解説本なので他の言語を使っている人にも一度読んでいただきたい。

サンプルコード

 

 

 

 

よくある、Hello, C World!と画面に表示するプログラムです。

{ }でくくるということが、特徴です。
また、分の区切りは、; です。
COBOLの . よりは、わかりやすいですね。

層いえば、Javaとどこか似ていませんか?
そうです、Javaは、C言語から発展した言語なのです。

C言語の子どもたち

C言語は、機械語つまりコンピュータの知識がある程度必要なので、「下手くそ」失礼「未熟者」が、書くと暴走します。
暴走=コンピュータが無応答になる場合もあります。

また、大規模なプログラムを書く場合、C言語だと何かと不自由な面が出てきました、その解決策として、オブジェクト指向(これも解説本がかけるぐらいなので詳しい話は省きます)という概念が登場してきたため、次の言語が登場してきました。

そこでC言語を発展させた子どもたちが登場します。
Java、Objective-C、C++、C#、他多数が生まれました。
これらの言語は、大規模なプログラムを組むことができるようになり、機械語の知識がなくても安全にプログラムを組むことができるようになりました。
最近では、COBOLで組まれた銀行などのシステムをJavaなどに置き換える作業が続いています。

今でも活躍中

いま、みなさんが、お使いのスマートフォンやパソコンは、30年前の銀行などに使われていた大型コンピュータの数百倍から数千倍の能力を持っています。

オブジェクト指向の言語は、そのようなリッチな環境で動作することを前提に動作しているのですが、
家電、センサーなど、メモリーなど制約の多い分野でC言語は今でも使用されていて、今後も消えてゆくことはないでしょう。

なにより、機械語を出力できるというC言語コンパイラは、ハードウェアのプログラムを書く場合には、便利なのです。

まとめ

C言語がもつ、移植性で、コンピュータの発展が一気に進んだと思っています。
自分もCOBOLからC言語に出会うことで、文化の違う世界に足を踏み入れることができました。
そのおかげでまだ現役を続けられています。

いまさらC言語を学ぶことは、オススメしませんが、
「プログラミング言語C」(「The C Programming Language」)については、歴史書として読む価値があります。

プログラムを組んでて、壁に当たったりしている人は、別の言語にヒントが隠されている場合あるのでたまには、違う文化(コンピュータ言語)を除いてみて下さい。

では、また、次回 お楽しみに・・

プログラム言語 夜話 前夜祭

今週から新しく連載を開始いたします。 そのタイトルは、ズバリ! 「プログラム言語 夜話」 この連載では、星の数ほどあると言われているプログラム言語から、毎週1つをピックアップ プログラムの書き方をレク ...

続きを見る

AdSence 336x280

AdSence 336x280

-小僧の教えてIT
-,

Copyright© IT小僧の時事放談 , 2018 All Rights Reserved Powered by AFFINGER4.