見出し画像

C言語:システムプログラミング

C言語の勉強を本格的に始めたので、C言語について調べてみた。

システムプログラミング

オペレーティングシステムやデバイスドライバなどのハードウェアを直接操作するソフトウェア、およびOSカーネルを直接呼び出すlibcなどのライブラリをシステムソフトウェアという。

これらのシステムソフトウェアのプログラミングを一般的に「システムプログラミング」と呼ぶ。

C言語や機械語が使われることが多い。

C言語

C言語は次のようなプログラミング言語である。

・システムプログラミング

> 実行環境が単純であり、OSなしで実行可能にすることが容易である。つまり、低レイヤでの開発が可能になる。
> ハードウェアの直接操作に必要なメモリアクセスの記述が可能
> 機械語と組み合わせることが容易

・速度や省資源を重視するプログラミング

> 実行時のオーバヘッドや資源消費が小さく、効率が良い

また、Javaと比較すると次のような特徴がある。

Java
•オブジェクト指向
•強い型付け
•ポインタは無い(参照そのものはある)
•GC(ゴミ集め)がある(メモリ管理はJava 任せ)
•Java VM 上で実行(基本的には)
C
•型付けは弱いので,何でもあり
•ポインタで何でもできる
•GC がない(メモリ管理は自分で気をつける)
•機械語にコンパイルしてCPU が直接実行

C言語の歴史

1973年ごろにKen ThompsonとDennis Richieが開発。

当初の目的はUNIXオペレーティングシステムの記述であった。

その後、UNIXとともに大学や研究所に普及した。

さらにその後、UNIX以外の開発にも普及し、1990年ごろにはISOで標準化された。


2019年現在でも人気は根強く、"Top Programming Languages"で第三位(IEEE Spectrum調べ)である。

ちなみに、1位から順に、Python, Java, C, C++, R, JavaScript, C#, Matlab, Swift, Goである。

一番人気のPythonは機械学習の実装やデータアナリティクスなど、現在様々なホットな場面で利用されている。

このような、応用範囲の広い高級なプログラミング言語は身に着ければお金を稼ぐことができるかもしれないが、C言語のような低級なプログラミングの技能を身に着け、システムの深い知識を持つ人材も求められている。

GAFA(Google, Amazon, Facebook, Apple)といった世界的なIT企業の成長も、低レイヤの開発で活躍するエンジニアに支えられたものなのである。

C言語の仕様

ISO規格が存在し、C89、C99、C11などがある。

この89、99という数字は、1988年、1999年に発表されたという意味である。

C言語にはgcc, clang, Intel C++, Microsoft Visual C++などのコンパイラが存在し、その仕様はコンパイラによって異なり、それぞれが独自に拡張している。

よろしければサポートをお願いします!