異なる言語を最大限に活用するために、複数の言語を一緒にコンパイルすることは可能ですか?
7 に答える
コンパイラとリンカがすべて互換性がある場合は、別々にコンパイルした後、それらをリンクすることは間違いなく可能です(適切にプログラムされている場合)。例えば:
g77 -c one.f
gcc -c two.c
gcc -o together one.o two.o
これにより、Fortranファイル、次にCファイルがコンパイルされtogether
、GCCツールスイートを使用して、(相互に適切に呼び出されると仮定して)という名前の単一の実行可能ファイルにリンクされます。
Microsoftの.NETは、C#、F#、IronPython、IronRubyなどの複数の言語を一緒に使用するための一般的な方法です。Visual Studioは、互換性のあるコードへのコンパイルとアセンブリでの結合を処理しますが、必要に応じて「手動で」実行することもできます。
「一緒にコンパイルする」とは、同じファイル内に複数の異なる言語を含めることを意味する場合、それも可能ですが、まれです。たとえば、一部のCコンパイラには、同じファイル内で「インライン」アセンブリ言語を表現できる拡張機能があります。
はい、それは可能ですが、多くは特定の言語に依存します。たとえば、PythonからのC関数またはC++クラスの呼び出しは日常的に行われます。
CでAlgol-68サンクをきれいに扱うのは本当に難しいです。実行可能ですが、毎日やりたくないと思います。
.Netプラットフォームは多言語対応です。Parrotは、Perl、Python、Rubyの混合に最適です。あなたは何をしようとしているのですか?
言語を組み合わせるもう1つの良い例は、Javaプラットフォームです。Groovy、Jython、JRuby、Scala、Clojure、およびその他の言語をJavaと混在させることができます。言語が異なれば、必要なコンパイラも異なりますが、通常、ある言語から別の言語に呼び出すことができます。GroovyとScalaは、相互運用に特に適しています。
ああ、Java Native Interface(JNI)を使用すると、JavaからC、C ++、アセンブリ、およびその他の言語を呼び出すことができます。
(他の投稿者が指摘しているように、.NETプラットフォームはこれらの同じ属性を共有しています。)
.netを使用している場合は、プロジェクトをさまざまな言語でnetmodulesにコンパイルしてから、それらを単一のdll/exeにリンクできます。Visual Studioはこれをサポートしていませんが、msbuildはサポートしています。コンパイルを取得する最も簡単な方法は、.csprojファイルのコピーを編集し、出力タイプを「モジュール」に変更して、それに対してmsbuildを実行することです。次に、「link」コマンドを使用して、モジュールを最終的なexe/dllにリンクします。
Swigを見てください。コードをラップC/C++
して、事実上他のどの言語からでも呼び出すことができるようにします。