システムプログラミング言語は、システムプログラミングに使用されるプログラミング言語です。このような言語は、通常、アプリケーションソフトウェアと比較して異なる開発アプローチを必要とするシステムソフトウェアの作成用に設計されています。エドガー・ダイクストラは、これらの言語をマシン指向高階言語、またはモホルと呼びました。[1]
汎用プログラミング言語は、その言語で書かれたプログラムがさまざまなプラットフォームで同じコードを使用できるように、汎用的な機能に重点を置く傾向があります。そのような言語の例には、ALGOLやPascal などがあります。この汎用性は通常、マシンの内部動作に直接アクセスできないという代償を伴い、パフォーマンスに悪影響を与えることがよくあります。
対照的に、システム言語は互換性ではなく、パフォーマンスと基盤となるハードウェアへのアクセスのしやすさを重視して設計されており、構造化プログラミングなどの高レベルのプログラミング概念も提供します。例としては、ESPOLやSPLがあり、どちらも構文はALGOLに似ていますが、それぞれのプラットフォームに合わせて調整されています。その他の言語はクロスプラットフォームですが、BLISS、JOVIAL、BCPLのようにハードウェアに近いところで動作するように設計されているものもあります。
一部の言語はシステム領域とアプリケーション領域にまたがり、これらの使用間のギャップを埋めています。標準的な例はCで、システムプログラミングとアプリケーションプログラミングの両方で広く使用されています。 RustやSwiftなどの一部の最新言語でもこれが行われています。
特徴
アプリケーション言語とは対照的に、システムプログラミング言語は通常、マシンの物理ハードウェアへのより直接的なアクセスを提供します。この意味での典型的なシステムプログラミング言語はBCPLです。システムプログラミング言語には、組み込みの入出力( I/O) 機能がないことがよくあります。これは、システムソフトウェアプロジェクトでは通常、独自の I/O メカニズムを開発するか、基本的なモニター I/O または画面管理機能に基づいて構築されるためです。システムプログラミングとアプリケーションプログラミングに使用される言語の区別は、PL/I、C 、およびPascalが広く普及するにつれて、時間の経過とともにあいまいになりました。
歴史
最も初期のシステムソフトウェアは、主に他に選択肢がなかったため、アセンブリ言語で書かれていましたが、オブジェクトコードの効率、コンパイル時間、デバッグの容易さなどの理由もありました。FORTRANなどのアプリケーション言語はシステムプログラミングに使用されていましたが、通常、いくつかのルーチンはアセンブリ言語で記述する必要がありました。[2]
中級レベルの言語
中級言語は「高級言語の構文や機能を多く備えているが、言語内で(アセンブリ言語も提供し)マシン機能に直接アクセスできる」[2] 。これらの最も古いものは、1960年頃のBurroughsメインフレーム上のESPOLであり、その後Niklaus WirthのPL360(最初はBurroughsシステム上でクロスコンパイラとして書かれた)が続き、 ALGOL 60の一般的な構文を持ちながら、ステートメントでCPUレジスタとメモリを直接操作しました。このカテゴリの他の言語には、MOL-360とPL/Sがあります。
例えば、典型的なPL360ステートメントはR9 := R8 and R7 shll 8 or R6、レジスタ8と7をAND演算し、その結果を8ビット左にシフトし、その結果をレジスタ6の内容とOR演算し、最終結果をレジスタ9に格納することを意味します。[3]
高級言語
PL360 はアセンブリ言語のセマンティック レベルにありますが、別の種類のシステム プログラミング言語はより高いセマンティック レベルで動作しますが、システム プログラミングに適した言語にするために特定の拡張機能が設計されています。この種の言語の初期の例としては、LRLTRAN [4]があります。これは Fortran を拡張し、文字とビットの操作、ポインタ、直接アドレス指定されたジャンプ テーブルなどの機能を追加しました。
その後、Cなどの言語が開発され、機能の組み合わせはシステムソフトウェアを書くのに十分であり、控えめなハードウェア上で効率的なオブジェクトプログラムを生成するコンパイラを開発することができました。このような言語は、一般的に効率的に実装できない機能を省略し、特定のハードウェア機能にアクセスするために必要な少数のマシン依存機能を追加します。Cのステートメントなどのインラインアセンブリasmコードは、この目的によく使用されます。このような言語は数多く開発されましたが、[1] CとC++は生き残ったものです。
主要言語
参照
注記
- ^ Swiftは自動参照カウントを使用する
参考文献
- ^ ab van der Poel, WL; Maarssen, LA, 編 (1973 年 8 月 27 ~ 31 日)。マシン指向高水準言語。IFIP マシン指向高水準言語に関するワーキング カンファレンス (MOHL)。ノルウェー、トロンハイム: 国際情報処理連盟。1974 年に出版された議事録。
- ^ ab Sammet, Jean (1971年10月). 「システム実装に使用される言語の簡単な調査」. ACM SIGPLAN Notices . 6 (9): 1–19. doi : 10.1145/942596.807055 .
- ^ Wirth, Niklaus (1968). 「PL360、360台のコンピュータのためのプログラミング言語」Journal of the ACM . 15 (1): 37–74. doi :10.1145/321439.321442.
- ^ Mendicino, Sam F.; Hughes, Robert A.; Martin, Jeanne T.; McMahon, Frank H.; Ranelletti, John E.; Zwakenberg, Richard G. (1968). 「LRLTRAN コンパイラ」. Communications of the ACM . 11 (11): 747–755. doi :10.1145/364139.364154.
- ^ Wulf, WA; Russell, DB; Haberman, AN (1971 年 12 月). 「BLISS: システムプログラミング言語」. Communications of the ACM . 14 (12): 780–790. CiteSeerX 10.1.1.691.9765 . doi :10.1145/362919.362936.
- ^ 「ケーススタディ、BAEシステムズ ユーロファイター タイフーン」(PDF)。
- ^ 「航空機搭載機器にはどのようなプログラミング言語が使用されていますか?」
- ^ 「TGVweb - TGV信号システム」。
- ^ 「アイアンクラッド」.
- ^ 「M2OS。小型マイクロコントローラ向けのシンプルなタスクサポートを備えた RTOS」。
- ^ 「Jgrivera67/HiRTOS」。GitHub。
- ^ 「Modular Inc.」www.modular.com . 2024年3月25日閲覧。
- ^ 「Mozilla Research Projects」。2014年1月4日時点のオリジナルよりアーカイブ。
外部リンク
- Corbató, Fernando (1969-05-06). 「システムプログラミングツールとしてのPL/I」。Datamation : 68–76。2012-09-21にオリジナルからアーカイブ。2012-01-23に取得。
