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

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

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

機能

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

歴史

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

中レベル言語

中レベル言語は「高レベル言語のような多くの構文と機能を持つが、言語内で(アセンブリ言語と同様に)機械の機能への直接アクセスも提供するもの」である。最初期の中レベル言語は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に格納せよ」という意味になる[2]

高レベル言語

PL360は、構文レベルではアセンブリ言語と同等であったが、より高いレベルの構文を持つプログラミング言語でも、システムプログラミングに適した特定の拡張を行えるものもあった。その種の言語の初期の一例としては、LRLTRANがある[3]。この言語は、Fortranに、文字とビットの操作、ポインタ、アドレスの直接指定によるジャンプテーブルの機能を追加したものである。

その後、C言語のようなプログラミング言語が開発されると、システムソフトウェアを書くのに十分な機能のセットが開発され、適切なハードウェア上で効率よく実行できるオブジェクトプログラムを生成できるコンパイラが作られるようになった。一般に、こうした言語では、効率よく実装できない少数の機能を直接は書かず、ハードウェアの特定の機能にアクセスする必要があるマシン依存の機能を使用するために、インラインのアセンブリコードが埋め込まれる。C言語のasm文などは、この目的でよく使用される。同様の言語が数多く開発されてきたが[4]、現在まで生き残っているのはC言語とC++である。

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

主なプログラミング言語

言語設計者誕生年影響を受けた言語用途
ESPOLBurroughs Corporation1961Algol 60MCP
PL/IIBM, SHARE1964Algol, FORTRAN, some COBOLMultics
PL360Niklaus Wirth1968Algol 60Algol W
CDennis Ritchie1969BCPLMost operating system kernels, including Windows NT and most Unix-like systems
PL/SIBM196xPL/IOS/360
BLISSCarnegie Mellon University1970Algol-PL/I[5]VMS (portions)
PL/8IBM197xPL/IAIX
PL-6Honeywell, Inc.197xPL/ICP-6
SYMPLCDC197xJOVIALNOS subsystems, most compilers, FSE editor
C++Bjarne Stroustrup1979C, SimulaSee C++ Applications[6]
AdaJean Ichbiah, S. Tucker Taft1983Algol 68, Pascal, C++, Java, EiffelEmbedded systems, OS kernels, compilers, games, simulations, CubeSat, air traffic control, and avionics
DDigital Mars2001C++Multiple domains
NimAndreas Rumpf2008Ada, Modula-3, Lisp, C++, Object Pascal, Python, OberonOS kernels, compilers, games
RustMozilla Research[7]2010C++, Haskell, Erlang, RubyServo layout engine, Redox OS
SwiftApple2014CObjective-CRustmacOSiOS向けアプリ開発[注釈 1]

脚注

注釈

参考文献

外部リンク

関連項目

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

この記事は2008年11月1日以前にFree On-line Dictionary of Computingから取得した項目の資料を元に、GFDL バージョン1.3以降の「RELICENSING」(再ライセンス) 条件に基づいて組み込まれている。