web-dev-qa-db-ja.com

プログラミング言語は他の言語にコンパイルできるとどうやって言えますか?

プログラミング言語を他のプログラミング言語にコンパイルできることを英語でどのように言えますか?

例は Haxe です。ウェブサイトでは、言語は「マルチプラットフォーム」として説明されています。

マルチプラットフォーム:Haxeは、JavaScript、Flash、NekoVM、PHP、C++、C#、およびJava(近日))の高速コンパイラを使用して、すべての一般的なプログラミングプラットフォームにコンパイルできます。

ただし、マルチプラットフォームは、ハードウェアまたはソフトウェアプラットフォーム(win、mac、linux)と誤解される可能性があります。

それで、この能力を説明する最も適切な言葉は何ですか?

22
danilo2

通常の用語は「トランスコンパイル」です。これは一般的な用語ではなく、技術的に正しい用語です。それは流行の新しいスクリプト言語(CoffeeScript-> JavaScript)のためだけのものではありません。最初のC++コンパイラは、実際にはCへのトランスコンパイラでした。

41
Kilian Foth

申し訳ありませんが、この言葉は "compiled" です。これは、あるタイプのコードを別のタイプのコードに変換することを意味します。そのコードが英語、C++、x86マシンコード、ARMマシンコード、Java、 bytecode 、または英語に戻っても、実際には違いはありません。プログラミング言語からマシンコードへの移行を意味しますが、それはWordが時間をかけて獲得した側面です。そして、ねえ、十分な人々がWordを誤って使い始めれば、それは確かにその新しい意味を獲得します。 C++に入れ替え、Wordは "compiles" です。

マルチプラットフォーム:Haxeは、高速でコンパイルしてすべての一般的なプログラミングlanguagesコンパイラ– JavaScript、Flash、NekoVM、PHP、C++、C#およびJava(まもなく)

(また、私がMerriam-Websterを無視しているのは、彼らが私に同意しないために愚かだからです...うーん)

27
Philip

多分これは https://english.stackexchange.com/ の質問ですが、コンパイルのプロセスには別の高水準言語へのコンパイルが含まれ、ネイティブ向けにコンパイルするコンパイラだけに限定されないマシンコード。

言葉として、「コンパイル」はコンピュータコンパイラに固有のものではなく、非常に一般的です。 「テーブルのコンパイル」または「名前のリストのコンパイル」が頭に浮かぶので、それは多くの目的(ラテックスコンパイルなどのテキストプロセッサなど)に十分に対応できます。コンパイルのターゲットをより具体的にするために、to-source-compilerを使用します

具体的な例として、プラットフォームは適切なWordであると思います。人間の言語は本質的にあいまいであるため、疑わしい場合は要点を理解するために冗長性(例、言い換えると説明)を使用する必要があります。

私はまた、「Haxe」ステートメントを、標準のライブラリーや同様のものを含む方法で読みます。つまりその場合、plattformは「言語」のスーパーセットとなり、「ソフトウェア開発プラットフォーム」などと呼ぶことで、それを分離できます。

10
wirrbel

コンパイラには、翻訳として言語X、Y、およびZがあると言えますtargets、またはこれらのターゲットを念頭に置いて言語を設計します。

3
comingstorm

コンパイラーは定義によって異なるプログラミング言語に変換される(少なくとも、これは私が知っている定義です。ある言語を別の言語に変換するプログラムです)。たとえば、ほとんどのCコンパイラは、出力としてアセンブリを生成します。アセンブリコンパイラはこの出力を受け取り、それを言語でもあるバイナリコードに変換します(確かに-おそらく40年以上前にだれもそれを書き込んだりはしていませんが、技術的には言語です)。プロセッサによる操作(または、リンカーによってオブジェクトファイルに対して実行される特定の操作があります)。同様に、javapはバイトコードにコンパイルされます。通常、このようなチェーンの最後には、最終的なコード(CPU、GPU、実行されたプログラムなど)を実行するインタープリターがあります。最新のx86がプログラムを内部操作(micro-op)に再コンパイルするので、マシンコードのような「もの」はなく、ARMマシンコードをx86または逆方向(場合によっては、あるフォームから別のフォームに再コンパイルすることもあります)。

Haxeは source-to-source コンパイラーです。これは、前の例のように高レベルの言語を低レベルの言語に変換しないためです。マルチプラットフォームのあいまいさの問題に直接対処しているようには見えませんが、残念ながら、これら2つを区別する実用的な方法はないと思います。APIは、一般的に解釈、再コンパイルなどが可能な言語の一種です。

2

まず最初に、この機能に適したWordがすでにあるかどうかはわかりません。

しかし、多分それは多言語と呼ばれる可能性がありますか?または言語にとらわれない?これはプログラミング言語に関するものであるため、名前に「言語」という名前を付けると、マルチプラットフォームよりもわかりやすくなります。

もちろん、言語も曖昧です。ソースコードは実際の言語であればどれでも記述できることが理解できるためです(たとえば、変数をUnicodeで記述できるためです)。

一方で、熟練したプログラマーはおそらく、そのような構造をローカリゼーションや国際化とは異なるものとして認識し、より簡単に「理解」できるでしょう。

ちょうど私の2セント。

1
Enduriel