言語Aは言語Bで書かれているという言葉をよく耳にします。たとえば、PHPはCで書かれ、C#はC ++で書かれています。
誰かがそれが何を意味するのか、それが正しいのかを説明してください。それは、言語で使用されるインタープリターのコンパイラーと関係がありますか?
さらに、実装言語の選択の基礎となる要因は何ですか?
s/written/implemented/
そして、それははるかに明確です。
言語Aは言語Bで書かれているという言葉をよく耳にします。たとえば、PHPはCで書かれ、C#はC ++で書かれています。
誰かがそれが何を意味するのか、それが正しいのかを説明してください。それは、言語で使用されるインタープリターのコンパイラーと関係がありますか?
さらに、実装言語の選択の基礎となる要因は何ですか?
s/written/implemented/
そして、それははるかに明確です。
回答:
ほとんどのプログラミング言語は、インタープリター言語とコンパイル言語の2つのカテゴリーに分類されます。
コンパイルされた言語は、コンパイラによってマシンコードに翻訳されます。これは、CPUが段階的に直接実行する言語です。一方、インタープリター言語では、インタープリターであるインタープリターを使用して言語コードを実行します。インタープリター自体は別のプログラムであり、通常はそれ自体がマシンコードにコンパイルされます。
PHPはインタープリター言語です。PHPコードを実行するには別のプログラムが必要です。コンピューターはプログラムを直接実行しません。この別個のプログラムであるPHPインタープリターは、それ自体がCで作成されています。
C#はコンパイルされた言語ですが、マシンコードにコンパイルされていません。代わりに、仮想マシンで実行するために、バイト言語の専門的な言語にコンパイルされます。Javaは、このようなセットアップの別の例です。仮想マシンがインタープリターであるコンパイルと解釈のハイブリッドとして見ることができます。C#の仮想マシン(CLI、または共通言語インフラストラクチャ)はC ++で記述されています。
他の例は次のとおりです。
あなたは基本的に正しいです。RubyがCで記述されていると言われている場合、これは言語インタープリターとコアライブラリの一部がCで記述されていることを意味します。
したがって、Rubyインタープリターは、テキストファイルを入力として受け取り、それを処理してから、別のテキストファイル(Rubyで記述されている場合)またはコンパイル済みのCコードである関数を呼び出す基本的な機能のCプログラムです。メモリ、ファイルシステムなどのシステムリソースに直接アクセスします。そして、非常に高いパフォーマンスを必要とするいくつかの機能。
そのため、他の言語で記述できる、または記述しなければならない言語のさまざまな部分があります。Cでインタープリターを作成し、C ++でライブラリーを作成することを妨げるものは何もありません(ただし、いくつかのことをさらに難しくするかもしれません)。複数のステップがあり、テキスト処理に非常に優れた言語を使用して中間データを生成し、それをCコードで処理することもできます。
決定の要因は、他の複雑なアプリケーションの場合とまったく同じかもしれません。パフォーマンスは1つです。別のシステムリソースに直接アクセスできるコードを記述する機能。そのため、ほとんどの場合、コンパイルされた言語である必要があります(理論上はPythonでRubyインタープリターを作成できます)。Linux、Win、OS Xなどで言語を実行する場合は、異なるシステムでの可用性が重要です。
これは単に、言語Aのコアのほとんどが言語Bで書かれていることを意味します。「言語Aのコア」とは言語によって異なる場合がありますが、一般的に言えば、それはコンパイラーまたはインタープリターであることを意味します。他の言語を作成する言語を選択する決定要因は、ほとんどすべてのプロジェクトと同様に、開発者がどの言語に慣れているかです。
とは言っても、「言語Aは言語Bで書かれている」ということは、ほとんどの現代言語の単純化のし過ぎです。Pythonを例にとると、リファレンス実装であるCPythonは実際にはCで記述されていますが、Jython(Javaで記述された)、IronPython(C#で記述された)、PyPy(Pythonで記述された)、CLPython(Common Lispで記述)、Stackless Python(CおよびPythonで記述)、Unladen Swallow(C ++で記述)。
プログラミング言語は定義であり、Pythonの例が示すように、コンパイラー、インタープリター、およびライブラリーを記述できる言語には実際には何の制限もありません。もちろん、言語自体を記述することも可能です。bootstrappingと呼ばれるプロセスを通じて。
string.lower(s)
にreturn s.lower()
、それをに委任するpython関数があります、それは正しいです。CPythonの3.3文字列ケース操作は Cで実装されている
プログラミング言語を使用するという観点から見ると、プログラミング言語は単なるプログラムです。コンパイラーであったり、インタープリターであったり、ある種の仮想マシンであったりします。これらはすべてコンピュータープログラムであるため、どの言語でも記述できます。
したがって、独自のバージョンのPHPを作成したい場合は、最も流な言語で始めることができます。その後、PHP形式のコードを読み取り、PHPの仕様でプログラムが実行すべきことを実行できるプログラムを作成します。 。したがって、言語XでPHP言語を作成しています。
完全に異なる意味を持つ非常によく似た言い回しは、「言語Bで言語Aを書く」、例えば「JavaでCを書く」です。
これは、ある言語では構文的に正しいが、別の言語の構造、イディオム、および規則を使用するコードを記述しています。「JavaでのCの記述」の例では、これの兆候は、列挙の代わりに整数定数を使用し、identifiers_with_underscoresを使用するなど、各メソッドの上にすべてのローカル変数を宣言することです。
通常、これは、誰かが長い間1つの言語で作業している場合(特にその言語でのみ作業している場合)に発生し、現在の言語では非常に新しい(またはクリーンコードの作成に興味がない)場合に発生します。
テクノロジーは本質的に反復的なプロセスです。シンプルなツールから始めて、それらのツールを使用してより良いツールを作成します。最初のアセンブリ言語は、チップの標準化された命令バイトコードのほぼ1対1の翻訳でした。8086アーキテクチャとそのアセンブラは、Z80、RISCなどの他のアーキテクチャよりも優位になったため、FORTRAN、COBOL、Pascal、Cなどの8086アセンブリにダイジェストできる言語の開発を開始しました。これらの言語は、より原始的なもので作成する必要があります。そうしないと、鶏と卵の議論になってしまいます。最初のCコンパイラのソースコードがCで記述されている場合、そのCソースコードをコンパイルしたのは何で、定義上、それは最初のCコンパイラではないでしょうか?
基本的に、「C#はC ++で書かれています」とは、C#言語の仕様に従う最初のおよび/または最も人気のあるコンパイラーおよびランタイム/コアライブラリー(Microsoftの.NET Frameworkおよびコマンドラインコンパイラー)プログラムCSC.exe)はC ++で記述されています。
「言語Aは言語Bで記述されています」とは、言語Aの唯一の実装(または広く使用されている唯一の実装)が実際に言語Bで開発されたプロジェクトであり、唯一の完全で最新のAの仕様は、ドキュメントとBプログラムが一致しない場合に、通常Bプログラムが正しいと見なされるように実装するBソースコードです。