1 つのプロジェクトで複数の言語でプログラムを作成する人もいると聞きました。言語同士がどのように相互作用するのか想像できません。
つまり、次のようなJavaメソッドはありません
myProgram.callCfunction(parameters);
決して起こらないか、私は間違っていますか?
1 つのプロジェクトで複数の言語でプログラムを作成する人もいると聞きました。言語同士がどのように相互作用するのか想像できません。
つまり、次のようなJavaメソッドはありません
myProgram.callCfunction(parameters);
決して起こらないか、私は間違っていますか?
1 つのプロジェクトで複数の言語を使用することは、実際には非常に一般的ですが、背後にある原則は必ずしも単純ではありません。
単純なケースでは、異なる言語が同じコードにコンパイルされます。たとえば、C および C++ コードは通常、マシン アセンブラーまたは C# にコンパイルされ、VB.Net は IL (.NET ランタイムが理解する言語) にコンパイルされます。
言語/コンパイラが異なる型システムを使用している場合は、さらに困難になります。さまざまな方法があり、integer、float、double などの基本的なデータ型が内部的に表現され、文字列を表現する方法はさらに多くあります。異なる言語間で型を渡す場合、両側が同じ型を解釈するか、そうでない場合は型が正しくマッピングされていることを確認する必要があります。この種の型マッピングは、マーシャリングとも呼ばれます。
異なるプログラム言語間の相互運用性の古典的な例は次のとおりです (主に Windows の世界から)。
使用されている複数の言語は、略して「相互運用性」または「相互運用性」と呼ばれます。
あなたの例は間違っています。Java は C 関数を呼び出すことができます。
この言語は、相互運用性のためのメカニズムを提供します。
.NET の場合、言語は CLI の一部として IL にコンパイルされます。したがって、任意の .NET 言語は、他の .NET 言語で定義されたモジュールと相互運用 (によって定義されたメソッドを呼び出す) ことができます。
例として:
C# でメソッドを定義できる
static void Hello(){ Console.WriteLine("Hello World");}
そして、Python (IronPython) から呼び出すことができます
Hello()
そして、期待される出力を取得します。
一般的に言えば、特に言語の作成者が特に言語の機能に相互運用性を持たせた場合、一部の言語は他の言語よりも相互運用性が高くなります。
複数の言語が以下と対話できます。
ほとんどの場合、通信を交換する前に共通の形式に変換する必要があります (例外は、同じランタイム上の言語です)。これが、1 つのプロジェクトで複数の言語が使用されることがほとんどない理由です。
1 つのプロジェクトでさまざまな言語を使用するさまざまな方法があります。2 つの主なカテゴリが思い浮かびます。
異なる言語を組み合わせて 1 つのアプリケーションを構築する。たとえば、Java を使用して GUI を構築し、JNI を使用して C API にアクセスします (質問に答えて、Java から C 関数を呼び出すことができます ;))
同じアプリケーションの一部でない場合、1 つのプロジェクトで異なる言語を一緒に使用する。例えば。私は現在、大量のテキストを使用する iPhone アプリに取り組んでいます。私は現在、Python (テキストの元のソースを操作するため)、SQL (Python アプリの結果を iPhone sqlite3 API から簡単にアクセスできる形式にするため)、Objective C を使用して実際のアプリを構築する 3 つの言語を使用しています。最終製品は Objective C のみですが、最終製品に到達するために他の 2 つの言語を使用しました。
作業の大部分が Java で行われるアプリを作成することもできますが、データ パーサーや何かが Python で作成されているなど、その一部が存在する可能性もあります。実際にはほぼ 2 つの別個のアプリです。おそらく、パーサーがファイルに対していくつかの作業を行っているだけで、Java のメイン アプリがそれらを何かに使用しています。このプロジェクトで何を使用したかを誰かに聞かれたら、「Java と Python」と答えるでしょう。
1 つのプロジェクトで複数の言語を使用するには、さまざまな方法があります。いくつかの例:
ひどく。緊急の必要がない場合は、1 つの言語に固執してください。依存関係と複雑さが増しています。しかし、興味深い機能を提供する既存のコードがある場合は、再作成するよりもそれらを結合する方が簡単な場合があります。
言語のコードが直接対話できる方法がいくつかあります。コード間で渡されるデータがビットとバイトのレベルで正しい形式である限り、異なる言語が相互運用できない理由はありません。このアプローチは、従来の Windows DLL 開発で使用されます。異なるプラットフォームでも、正しい形式を取得できれば (興味がある場合はビッグ/リトルエンディアンを見てください)、リンカー (コンパイラーではない) がコードを結合する方法を知っている限り、それは機能します。
それ以外にも、言語が互いに対話できる方法は数多くあります。.Net の世界では、コードはすべての言語で同じ IL コードにコンパイルされます。このように、C# と VB.Net は内部ですべて同じであり、相互にシームレスに呼び出し/動作できます。
プロジェクトの種類によって異なります。試してみたい場合は、.NET で Web プロジェクトをセットアップし、ページごとに言語を変更できます。疑似コードで示されているようには機能しませんが、複数の言語です。もちろん、実際のコード ディレクトリは単一の言語でなければなりません。