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

システムプログラミング言語とは、システムプログラミングでよく使用されるプログラミング言語のことである。このような言語は、システムソフトウェアを書くために設計されており、アプリケーションソフトウェアを書く場合とは異なる設計アプローチが求められる。

システムソフトウェアとは、コンピューターのハードウェアの操作・制御のために設計されたコンピューターのソフトウェアであり、アプリケーションソフトウェアを実行するためのプラットフォームを提供する。システムソフトウェアのカテゴリーとしては、オペレーティングシステム、ユーティリティソフトウェア、デバイスドライバ、コンパイラ、リンカなどがある。

 機能 
アプリケーション向けの言語とは違い、システムプログラミング言語は、典型的には、物理的なハードウェアへのより直接的なアクセス手段を提供する。BCPLは、この意味での典型的なシステムプログラミング言語だった。システムプログラミング言語はしばしばビルトインの入出力（input/output; I/O）機能を欠いていた。かつては、システムソフトウェアが独自の基本的な入出力メカニズムを開発したり、基本的なモニタ入出力やスクリーン管理機能の上に作られることが普通だったためである。PL/I、C、Pascalなどの言語が広く普及するにつれ、システムプログラミング向け言語とアプリケーションプログラミング向けの言語の境界はぼやけていった。

 歴史 
コンピュータの黎明期のシステムソフトウェアは、他のプログラミング言語が存在しなかったため、アセンブリ言語で書かれていた。同時に、効率的なオブジェクトコードの存在、コンパイル時間の短縮、デバッグのしやすさなどの理由もあった。FORTRANなどのアプリケーション向け言語もシステムプログラミングのために使用されることがあったが、アセンブリ言語として書き出すために追加のルーチンが必要だった。

 中レベル言語 
中レベル言語は「高レベル言語のような多くの構文と機能を持つが、言語内で（アセンブリ言語と同様に）機械の機能への直接アクセスも提供するもの」である。最初期の中レベル言語は1960年頃にBurroughsメインフレームで使用されたESPOLである。次に現れたのがNiklaus WirthのPL360であった（もともとBurroughsシステム上でクロスコンパイラとして実装されたものである）。PL360は、ALGOL 60の一般的な文法を持っていたが、各ステートメントはCPUレジスタやメモリを直接操作するものだった。その他には、MOL-360やPL/Sがある。

一例として、よくあるPL360のR9 := R8 and R7 shll 8 or R6というステートメントを挙げる。このステートメントの意味は、「レジスタ8とレジスタ7をandし、その結果を8ビット左シフトした後、レジスタ6の中身とorし、さらにその結果をレジスタ9に格納せよ」という意味になるWirth, Niklaus. PL360, A Programming Language for the 360 Computers. Journal of the ACM, 15(1): 37-74.。

 高レベル言語 
PL360は、構文レベルではアセンブリ言語と同等であったが、より高いレベルの構文を持つプログラミング言語でも、システムプログラミングに適した特定の拡張を行えるものもあった。その種の言語の初期の一例としては、LRLTRANがあるMendicino, Sam F., Robert A. Hughes, Jeanne T. Martin, Frank H. McMahon, John E. Ranelletti, and Richard G. Zwakenberg. The LRLTRAN Compiler. C. ACM 11(11): 747-755.。この言語は、Fortranに、文字とビットの操作、ポインタ、アドレスの直接指定によるジャンプテーブルの機能を追加したものである。

その後、C言語のようなプログラミング言語が開発されると、システムソフトウェアを書くのに十分な機能のセットが開発され、適切なハードウェア上で効率よく実行できるオブジェクトプログラムを生成できるコンパイラが作られるようになった。一般に、こうした言語では、効率よく実装できない少数の機能を直接は書かず、ハードウェアの特定の機能にアクセスする必要があるマシン依存の機能を使用するために、インラインのアセンブリコードが埋め込まれる。C言語のasm文などは、この目的でよく使用される。同様の言語が数多く開発されてきたがPoel, W. L. van der, and Maarssen, L. A. Machine oriented higher level languages: proceedings of the IFIP Working Conference on Machine Oriented Higher Level Languages, Trondheim, Norway, August 27–31, 1973. International Federation for Information Processing, 1974.、現在まで生き残っているのはC言語とC++である。

System Programming Language（SPL）という名前のHP 3000コンピュータシリーズ上のプログラミング言語もあった。この言語は、オペレーティング・システムHP Multi-Programming Executiveや、その他のシステム・ソフトウェアのパーツを作るために使われていた。

 主なプログラミング言語 
言語設計者誕生年影響を受けた言語用途ESPOLBurroughs Corporation1961Algol 60MCPPL/IIBM, SHARE1964Algol, FORTRAN, some COBOLMulticsNiklaus Wirth1968Algol 60Algol WC言語Dennis Ritchie1969BCPLMost operating system kernels, including Windows NT and most Unix-like systemsIBM196xPL/IOS/360BLISSCarnegie Mellon University1970Algol-PL/IVMS (portions)PL/8IBM197xPL/IAIXPL-6Honeywell, Inc.197xPL/ICP-6CDC197xJOVIALNOS subsystems, most compilers, FSE editorC++Bjarne Stroustrup1979C, SimulaSee C++ ApplicationsAdaJean Ichbiah, S. Tucker Taft1983Algol 68, Pascal, C++, Java, EiffelEmbedded systems, OS kernels, compilers, games, simulations, CubeSat, air traffic control, and avionicsD言語Digital Mars2001C++Multiple domainsNimAndreas Rumpf2008Ada, Modula-3, Lisp, C++, Object Pascal, Python, OberonOS kernels, compilers, gamesRustMozilla Research2010C++, Haskell, Erlang, RubyServo layout engine, Redox OSSwiftApple2014C、Objective-C、RustmacOS、iOS向けアプリ開発

 脚注 

 注釈 

 参考文献 

 外部リンク 

 System Programming Languages

 関連項目 

 Ousterhout's dichotomy
 Language for Systems Development
 PreScheme
 低水準言語

Category:プログラミング言語の分類
Category:システムソフトウェア