本日は,主なプログラミング言語のひとつであるC言語について解説したいと思います.
昔を知らない人にとって、C言語は謎のひとつになりつつあります。
なぜ存在するのだろうか? 何に役立つのだろうか?
私は、約20年前にC言語からプログラミングを始めました.
当時は、C言語とJAVAくらいしか学ぶ言語がなかったからです。
C言語からプログラミングを学び始めたことは,良かったと思っています.
ですが、C言語はすでに生きた化石だと思います。
しかも、C言語はプログラミング初心者には向いていないと一般には言われています。
プログラミング言語Cは初心者には難しいと言われる理由
C言語が難しいと思われる原因をあげてみます。
- コンピュータに関する知識が要求される(あった方が理解しやすい)
- わかりやすい書籍が少ない
- 単体ではGUIなどのグラフィカルなソフトウェアをつくることができない
はじめに,C言語の文法を習得するだけならばコンピュータに関する知識はあまり必要ないのですが,文法で出てくる「配列」,「ポインタ」を使いこなそうとするとCPUとメモリに関する知識がある方が良いです。
本質的に理解するためには,プログラムをコンパイルした際に,配列はどうなるのか,あるいはポインタはどうなるのかということについて理解することが理想的です.
次に、初学者に向く書籍も少ないです.現在はかなり改善されていますが、ひと昔前では難しい書籍が多数出版されていました。
最後に,今となってはC言語が一番弱い部分だと思いますが、GUIを備えたソフトウェアを作成することに向きません.
GUIは、OS専用のAPIを使う必要があります。
例えば、Windowsの場合、Windows専用のAPIを使用する必要があります。
なぜC言語は絶滅しないのか?
C言語は45年近くの歴史がありかなり古い言語ですが,いろいろと良い言語が出現しているにもかかわらずなぜなくならないのでしょうか?
その主な理由は,下記のとおりです.
カーネル空間で動作するソフトウェア
①ハードウェアにアクセスすることができる
②ツールチェンがC言語で記載されていることが多い
カーネル空間という言葉はご存じでしょうか?
一般に、我々が開発したソフトウェアはユーザ空間で動作します。
ユーザ空間のプログラムは仮想アドレスというメモリ空間を持っていますが、カーネル空間のプログラムは物理アドレスにアクセスできます。
例えば、Pythonで機械学習をするとか、統計解析で解析プログラムを書くと、それらはユーザ空間で動作しています。
ユーザ空間というのは、いわばOSの管理下で動作すると捉えてもらえば良いです。
上記の①が,主にC言語が絶滅しない理由です.
C言語はポインタという文法を使って,ハードウェアを制御するプログラムを書くことができます.
カーネル空間からハードウェアにアクセスするプログラムは,「デバイスドライバ」と呼ばれています.
皆さん,プリンタドライバって知ってますよね?あれのことです.
プリンタドライバは、カーネル空間で動作するプログラムです。
プリンタドライバはカーネル空間の中にインストールされていて,OSの命令を受けて,プリンタを制御しています.(例えばプリンタに印刷する文字列を送信したり,停止させたり)これがほかの高級言語にはない特徴です.
C++はC言語を拡張したものなので,ほとんど同じ機能を持つため,この言語だけは例外です.
そのような理由で,ロボットなどの機械に組み込まれるソフトウェアはC言語でつくられていることが多いのです。
②に関しては,例えば組み込みOS系のプログラムはほとんどC言語が使われていることが多いことが挙げられます。
組み込みOSというのは家電などに組み込まれているOSです。
基本的にパソコンのように複雑な処理が必要ないため、タスクスケジュラー機能を中心として実装されているものです。
例えばこのようなOSに機能追加やデバイスドライバを追加しようとすると、C言語で書かれている資産を流用できるという強みがあります。
また、C言語は他言語で書いたプログラムよりも一般的に速度がはやいという利点があります.
そのため、PythonやRなどのライブラリで実行速度が重要な部分では、すべてC言語で書かれています。
そのため,他の言語のために用意されたライブラリなどはC言語で記述され,コンパイルされていることが多いのです.
このように,C言語は確実な基盤を築いていますので,今後需要がなくなる可能性は極めて低いです。
ですが、疫学研究や統計解析に興味がある方にはお勧めしません。
コンピュータサイエンスを学びたい方にはおすすめです。
コメント