システム
プログラミング言語は、
オペレーティングシステム(OS)、
デバイスドライバ、
コンパイラ、リンカなどの
システムソフトウェア開発に特化した
プログラミング言語です。これらの言語は、
アプリケーションソフトウェアとは異なり、ハードウェアの直接的な操作や制御を目的として設計されており、パフォーマンスと効率が重視されます。
特徴
システム
プログラミング言語は、物理的なハードウェアへの直接的なアクセスを提供する点が大きな特徴です。初期のシステム
プログラミング言語であるBCPLは、この特徴をよく表しています。また、独自の
入出力(I/O)機能を持たない場合が多く、
システムソフトウェア自体が独自のI/Oメカニズムを開発したり、既存のモニタI/Oや画面管理機能を活用したりしていました。しかし、
PL/I|PL_I、
C言語、
Pascalなどの普及により、システム
プログラミング言語とアプリケーション
プログラミング言語の境界は曖昧になってきています。
歴史
コンピュータ黎明期には、
アセンブリ言語が
システムソフトウェア開発に用いられていました。これは、当時の
プログラミング言語の選択肢が限られていたことに加え、効率的なオブジェクトコードの生成、短いコンパイル時間、デバッグの容易さなどが理由として挙げられます。FORTRANなどのアプリケーション向け言語もシステムプログラミングに利用されることがありましたが、
アセンブリ言語で記述された追加のルーチンが必要でした。
中レベル言語
中レベル言語は、高レベル言語のような構文と機能を持ちながら、
アセンブリ言語のようにハードウェアの機能に直接アクセスできる言語です。初期の中レベル言語としては、1960年代にBurroughsメインフレームで使用されたESPOLや、Niklaus WirthのPL360などが挙げられます。PL360は、ALGOL 60の文法を持ちながら、CPUレジスタやメモリを直接操作できました。
例えば、PL360の`R9 := R8 and R7 shll 8 or R6`というステートメントは、「レジスタ8とレジスタ7の論理積を計算し、その結果を左に8ビットシフトした後、レジスタ6の内容と論理和を計算し、最終的な結果をレジスタ9に格納する」という意味になります。
高レベル言語
より高度な構文を持つ
プログラミング言語でも、システムプログラミングに適した拡張が施されることがありました。初期の例としては、Fortranに文字・ビット操作、ポインタ、ジャンプテーブル機能を追加したLRLTRANがあります。その後、
C言語が登場し、
システムソフトウェア開発に必要な機能を提供し、効率的なオブジェクトプログラムを生成できる
コンパイラが開発されました。
C言語では、効率的な実装が難しい機能やハードウェア固有の機能へのアクセスが必要な場合、インラインアセンブリコードが埋め込まれることがあります。
C言語の`asm`文などがその例です。同様の言語が数多く開発されましたが、現在では
C言語と
C++が主流となっています。
HP 3000シリーズでは、System Programming Language(SPL)という言語が
オペレーティングシステムHP Multi-Programming Executiveやその他の
システムソフトウェアの作成に使用されていました。
システム
プログラミング言語は、ハードウェアとソフトウェアの橋渡しをする重要な役割を担っており、その進化はコンピュータ技術の発展に大きく貢献しています。