1つのプロジェクトで複数の言語でプログラムする人もいます。言語が互いにどのように相互作用するか想像できません。
Javaのようなメソッドはありません
myProgram.callCfunction(parameters);
決して起こらないか、私は間違っていますか?
1つのプロジェクトで複数の言語を使用することは実際には非常に一般的ですが、その背後にある原則は必ずしも単純ではありません。
単純な場合、異なる言語が同じコードにコンパイルされます。たとえば、通常、CおよびC++コードはマシンアセンブラーにコンパイルされ、C#およびVB.NetはIL(.NETランタイムが理解できる言語)にコンパイルされます。
言語/コンパイラが異なる型システムを使用している場合は、さらに難しくなります。さまざまな方法があり、整数、浮動小数点数、倍精度などの基本的なデータ型は内部的に表現され、文字列を表現する方法はさらにあります。異なる言語間で型を渡す場合、両側が同じ型を解釈するか、そうでない場合は型が正しくマップされることを確認する必要があります。このタイプのマッピングは、 マーシャリング とも呼ばれます。
異なるプログラム言語間の相互運用性の古典的な例は、次のとおりです(主にWindowsの世界から)。
一般に、適切なサイズのWebプロジェクトでは、HTML、CSS、Javascript、サーバー側の「取得」言語(ASP、JSP、Perl、PHPなどのCGIスクリプト)、およびいくつかのバリアントの約5つの言語を使用します。データベース接続のためのSQLの。
(もちろん、これはHTMLとCSSがプログラミング言語としてカウントされるかどうかについての議論を手放します-私は「チューリング完全言語ではないが、チューリング完全言語ではない」キャンプですが、それはまったく別のスレッドです。 )
これらすべてがどのように連携するかのいくつかの例:
ベストプラクティスの方法を採用している場合、Webページの構造はHTMLであり、表示方法の手順はCSSにあります。CSSは同じファイル内にある場合がありますが、そうである必要はありません。 CSSには、HTMLが参照するクラスの束が含まれており、それらを一緒にクリックする方法を判断するのはブラウザ次第です。
そのすべてをさらに一歩進めると、そのページのJavaScriptスクリプトは、存在するHTML/CSSのいずれかを変更できます(HTMLエンティティのコンテンツの変更、CSSクラスの別のクラスへの交換、CSSの動作の変更など)。 )これは、ドキュメントオブジェクトモデルと呼ばれるものを介してこれを行います。これは、本質的に言語とプラットフォームに依存しないAPIであり、オブジェクトのような方法でHTMLページを操作します(この時点で、ゆっくりと戻って、 関連するwiki記事 。)
しかし、その後、すべてのHTML/CSS/Javascriptはどこから来たのでしょうか?それがサーバーサイド言語の機能です。最も単純な形式では、サーバー側言語は、出力としてHTMLページを保持する巨大な文字列を返すプログラムです。これは明らかに、はるかに複雑になる可能性があります。HTMLフォームとクエリ文字列パラメーターをサーバー側プログラムの入力として使用すると、javascriptが送信するAJAXデータをサーバー言語に直接送信することもできます。また、サーバー言語がHTML、CSS、およびJavaScriptをカスタマイズして吐き出すこともできます。基本的に、ある言語のプログラムで別の言語のプログラムを記述します。
サーバー側の言語からSQLへの接続はほぼ同じように機能します。それをより複雑で安全にする方法はたくさんありますが、最も簡単な方法は、サーバー言語がSQLコマンドを含む文字列を動的に構築し、何らかのコネクタを介してデータベースに渡し、戻ることです結果セット。 (これは、someValue = database.executeThisSQLCommand(SQLString)に要約される関数を実際に持っている場合です。)
そのため、この場合の異なる言語は、実際にプログラムを互いに記述したり、誰もが理解できる非常に簡単で解析しやすい形式でデータを処理したりして通信します。 (主に文字列。)
使用中の複数の言語は、略して「相互運用性」または「相互運用性」と呼ばれます。
あなたの例は間違っています。 JavaはC関数を呼び出すことができます。
この言語は、相互運用性のメカニズムを提供します。
.NETの場合、言語はCLIの一部としてILにコンパイルされます。したがって、すべての.NET言語は、他の.NET言語で定義されたモジュールと相互運用(定義されたメソッドの呼び出し)できます。
例として:
C#でメソッドを定義できます
static void Hello(){ Console.WriteLine("Hello World");}
そして、Python(IronPython)から呼び出すことができます
Hello()
そして、期待される出力を取得します。
一般的に言えば、一部の言語は他の言語よりも相互運用性が高く、特に言語の作成者が相互運用性を言語の機能として明確にした場合はそうです。
複数の言語が以下と対話できます。
ほとんどの場合、通信を交換する前に、すべての通信を共通の形式に変換する必要があります(例外は、同じランタイムの言語です)。これが、1つのプロジェクトで複数の言語がほとんど使用されない理由です。
私は(最後の数で)約8言語で構成される大規模なエンタープライズプロジェクトに取り組んでいます。通信の大部分は、複数の言語のバインディングを含むエンタープライズレベルのメッセージバスを介して行われ、データを利用してデータをやり取りします。 tibco と呼ばれます。
作業の大部分がJavaで行われるアプリを作成できますが、データパーサーや何かがPythonで書かれているものなど)ほぼ2つの独立したアプリです。おそらく、パーサーはファイルに対していくつかの作業を行ってから、Javaのメインアプリがそれらを何かのために使用しています。 「JavaとPython」と言います。
1つのプロジェクトで異なる言語を使用できる多くの異なる方法があります2つの主なカテゴリが思い浮かびます
1つのプロジェクトで複数の言語を使用できるさまざまな方法があります。いくつかの例:
例のリストに追加するだけで、CまたはC++でPythonコードを最適化するか、Cライブラリを記述して別のライブラリをPythonにバインドするのが一般的です。
プロジェクトの種類によって異なります。実験する場合は、.NETでWebプロジェクトをセットアップし、ページごとに言語を変更できます。擬似コードで示すようには機能しませんが、複数の言語です。もちろん、実際のコードディレクトリは単一の言語でなければなりません。
言語のコードが直接やり取りできる方法はいくつかあります。コード間で渡されるデータがビットとバイトレベルで正しい形式である限り、異なる言語が相互運用できない理由はありません。このアプローチは、従来のウィンドウで使用されますDLL開発。異なるプラットフォームでも、正しいフォーマットを取得できれば(必要に応じてビッグ/リトルエンディアンを見てください)、リンカ(コンパイラではなく)コードを結合する方法を知っています。
それ以外にも、言語が相互に通信できる方法は他にも多数あります。 .Netの世界では、コードはすべての言語で同じILコードにコンパイルされます。このように、C#、VB.Netはすべて内部で同じであり、相互にシームレスに呼び出し/作業できます。
ひどく。緊急の必要がない場合は、単一の言語に固執します。依存関係と複雑さが増しています。しかし、興味深い機能を提供する既存のコードがある場合、再作成するよりも簡単に接着することができます。