このページは大阪弁化フィルタによって翻訳生成されたんですわ。 |
プログラムを実行する仕組み については、すでに説明しましたわ。あらゆるプログラムは、最終的に、 一連のバイト列、すなわちコンピュータの マシン言語 (machine language) で表現された命令として実行されなければならしまへん。 せやけどダンさん、人間は、こないなマシン言語は上手く扱えしまへん。 そないなことはもう極めて稀になり、ハッカーの間でも 黒魔術化してるんや。
カーネル自体の内部にあるハードウェアインターフェイスを直接サポートする少量の 部分を除くと、ほぼみなの Unix コードは、今日では、 高水準言語 (high-level language) で書かれとりまんねん。(この用語の「高水準」ちう部分は、古くさい言葉で、 「低水準」の アセンブラ言語 (assembler languages と区別する意味で 使用されるもんや。アセンブラ言語とは、基本的にマシン語を若干分かり易く したような言語のことや)。
高水準言語には、いろいろな種類がおます。こないなプログラム言語について 話す際は、プログラムのソースコード (source code) (すなわち、人間が作成したもんで、変更が可能なコード) は、何らかの変換処理を 経ることで、マシンが実際に実行できるマシンコードに変換される必要がある のやちうことを是非頭の片隅で覚えといておくんなはれ。
コンピュータ言語の中で最も伝統的なのが、コンパイル型言語 (compiled language) や。コンパイル型言語は、その名の通りコンパイラ (compiler) と呼ばれる特別なプログラムによって、実行ファイルである バイナリ形式のマシンコードへと変換されはります。一旦バイナリが生成されると、 もっかいソースファイルを参照せずとも、直接そのバイナリを実行するっちうことが できまんねん。(大部分のソフトウェアは、コンパイルされたバイナリ形式で配布され、 その元になっとるコードを見ることはでけへんのが一般や。)
コンパイル型言語は、パフォーマンスに優れ、OS リソースへのアクセスも最も効率 よう行うことができまっけど、プログラムするんがややこしいちう傾向がおます。
C 言語は、Unix を記述してん言語なんやし、(その派生言語である C++ とともに) コンパイル言語のなかで圧倒的な重要性を持っとりまんねん。FORTRAN もまたコンパイル 型の言語なんやし、いまでもエンジニアや科学者の間では利用されとりますが、 C よりも古く、旧式なもんや。Unix の世界では、それ以外のコンパイル言語は、 メインストリームとしては利用されてへんねん。それ以外では、COBOL が、 金融やビジネス用ソフトウェアとして広く利用されとりまんねん。
よりどエライ昔は、いろいろなコンパイル型言語がおましたが、ほとんどはすたれたか、 研究用のツールとしてしか使われなくなっとりまんねん。読者がコンパイル言語を 使う新人の Unix 開発者やったら、使用言語は C か C++ であることがほとんどや。
インタプリト型言語 (interpreted language) とは、ソースを解釈する プログラム (interpreter program) を必要とする言語や。そのプログラムが、 実行の際そのソースコードを読み込んで、演算やシステムコールが可能な形式に 変換する仕組みになっとりまんねん。この場合、コードが実行されるたびに、( ソースを解釈するプログラムが起動されて、) ソースコードの変換が行われ なければならしまへん。
インタプリタ型言語は、コンパイル型言語よりも実行速度が遅く、下部階層にある オペレーティングシステムやハードウェアへのアクセスも制限されることが多いの 傾向がおます。その反面、コンパイル型言語に比べてプログラムが容易で、 コードにアヤマチがあっても深刻な事態になりにくかったりしまっせ。
シェルや bc(1), sed(1), awk(1) を含むようけの Unix ユーティリティは、ごっつう 小型のインタプリタ型言語や。BASIC も通常はインタプリタ型なんやし、 Tcl もさいです。歴史的に見て、最も重要なインタプリタ型言語は、LISP や(何世代もん開発者たちにより、大幅な改善がほどこされてきましたのや)。 現在では、Emacs エディタ内で使用できるシェルと LISP が、ワイが思うには 最も重要な純粋インタプリタ型言語である思われはります。
1990 年以来、コンパイルとインタプリタの両方を使う一種のハイブリッド言語 の存在が重要になってきとりまんねん。P-code 言語ちうんは、ソースコードが コンパクトなバイナリコードに変換されて、それが実際に実行されるゆう点では コンパイル型言語と似とりますが、変換されたコードの形態がマシンコードでは んという点で異なるんですわ。そら、疑似コード (pseudocode) (もしくは p-code) なんやし、こら実際のマシンコードよりもシンプルかつパワフルなもんや。 プログラムの実行時には、この p-code が (インタプリタにより) 変換されはります。
p-code は、コンパイル型言語のバイナリとほぼ同じくらいの実行速度を持ちまんねん (単純かつ小型で、スピーディな p-code インタープリタを作成するっちうことが できるさかいや)。ゴチャゴチャゆうとる場合やあれへん、要は、p-code は、柔軟かつパワフルなインタプリタ型言語 の長所も保持してんわけや。
重要な p-code 言語としては、Python, Perl, および Java がおます。