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

ウィキペディアから

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

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

機能

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

歴史

要約
視点

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

中レベル言語

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

主なプログラミング言語

さらに見る 言語, 設計者 ...
言語 設計者 誕生年 影響を受けた言語 用途
ESPOL Burroughs Corporation 1961 Algol 60 MCP
PL/I IBM, SHARE 1964 Algol, FORTRAN, some COBOL Multics
PL360英語版 Niklaus Wirth 1968 Algol 60 Algol W
C言語 Dennis Ritchie 1969 BCPL Most operating system kernels, including Windows NT and most Unix-like systems
PL/S英語版 IBM 196x PL/I OS/360
BLISS Carnegie Mellon University 1970 Algol-PL/I[5] VMS (portions)
PL/8 IBM 197x PL/I AIX
PL-6 Honeywell, Inc. 197x PL/I CP-6
SYMPL英語版 CDC 197x JOVIAL NOS subsystems, most compilers, FSE editor
C++ Bjarne Stroustrup 1979 C, Simula See C++ Applications[6]
Ada Jean Ichbiah, S. Tucker Taft 1983 Algol 68, Pascal, C++, Java, Eiffel Embedded systems, OS kernels, compilers, games, simulations, CubeSat, air traffic control, and avionics
D言語 Digital Mars 2001 C++ Multiple domains
Nim Andreas Rumpf 2008 Ada, Modula-3, Lisp, C++, Object Pascal, Python, Oberon OS kernels, compilers, games
Rust Mozilla Research[7] 2010 C++, Haskell, Erlang, Ruby Servo layout engine, Redox OS
Swift Apple 2014 CObjective-CRust macOSiOS向けアプリ開発[注釈 1]
閉じる

脚注

外部リンク

関連項目

Wikiwand - on

Seamless Wikipedia browsing. On steroids.