質問

聞いた人のプログラムは複数の言語です。想像できない方の言語での相互作用する

しがないことを意味Javaメソッドのように

myProgram.callCfunction(parameters);

いうのは私が悪いのでしょうか。

役に立ちましたか?

解決

1つのプロジェクトで複数の言語を使用することは実際には非常に一般的ですが、背後にある原則は必ずしも単純ではありません。

単純なケースでは、異なる言語が同じコードにコンパイルされます。たとえば、CおよびC ++コードは通常、マシンアセンブラーにコンパイルされるか、C#およびVB.NetはIL(.NETランタイムが理解できる言語)にコンパイルされます。

言語/コンパイラが異なる型システムを使用している場合、より困難になります。さまざまな方法があり、整数、浮動小数点数、倍精度などの基本的なデータ型は内部的に表現され、文字列を表現する方法はさらにあります。異なる言語間で型を渡す場合、両側が同じ型を解釈するか、そうでない場合は型が正しくマップされることを確認する必要があります。この種類のマッピングは、マーシャリングとしても知られています。

異なるプログラム言語間の相互運用性の典型的な例は(主にWindowsの世界から)です。

  • .NETプラットフォームで使用できるさまざまな言語。これには、C#、VB.Net、J#、IronRuby、F#、XSLT、およびその他のあまり人気のない言語が含まれます。
  • C ++またはVBで記述されたネイティブCOMコンポーネントは、VBScript、VB、すべての.NET言語、Javaの非常に多様な言語で使用できます
  • Win32 API関数は、.NETまたはVBから呼び出すことができます
  • IPC(プロセス間通信)
  • Corba 、おそらく最も包括的な(そして最も複雑な)アプローチ
  • Webサービスおよびその他のサービス指向アーキテクチャ、おそらく最も近代的なアプローチ

他のヒント

一般的に、適切なサイズのWebプロジェクトでは、HTML、CSS、Javascript、何らかのサーバーサイドの“やること”の5つの言語を使用します。言語(ASP、JSP、Perl、PHPなどを使用したCGIスクリプト)、およびデータベース接続用のSQLのバリアント。

(もちろん、これはHTMLとCSSがプログラミング言語としてカウントされるかどうかについての議論を手放すことです– I’ m are“ the、but just just not Turing-complete言語”キャンプ、しかしそれは他のスレッド全体です。)

これらすべてがどのように連携するかの例:

ベストプラクティスの方法を採用している場合、Webページの構造はHTMLであり、表示方法の手順はCSS–にあります。同じファイル内にある可能性がありますが、そうである必要はありません。 CSSには、HTMLが参照するクラスの束が含まれており、それらを一緒にクリックする方法を見つけるのはブラウザー次第です。

さらに一歩進んで、そのページのJavaScriptスクリプトは、存在するHTML / CSSを変更できます(HTMLエンティティの内容を変更し、CSSクラスを別のCSSクラスに交換し、CSSの動作を変更し、これは、ドキュメントオブジェクトモデルと呼ばれるものを介してこれを行います。これは、本質的に言語とプラットフォームに依存しないAPIであり、オブジェクトのような方法でHTMLページを操作します(この時点で、私はゆっくりと戻り、 関連するWiki記事へのリンク。)

しかし、すべてのHTML / CSS / Javascriptはどこから来たのでしょうか?それがサーバーサイド言語の機能です。最も単純な形式では、サーバー側言語は、出力としてHTMLページを保持する巨大な文字列を返すプログラムです。これは明らかに、はるかに複雑になる可能性があります:HTMLフォームとクエリ文字列パラメーターは、サーバー側プログラムの入力として使用できます。また、JavaScriptがサーバー言語に直接データを送信するAJAX全体を取得できます。また、サーバー言語でHTML、CSS、およびJavaScriptをカスタマイズして、吐き出すことができます–基本的に、ある言語のプログラムで別の言語のプログラムを記述しています。

サーバー側の言語からSQLへの接続はほぼ同じように機能します。より複雑で安全にする方法はたくさんありますが、最も簡単な方法は、サーバー言語でSQLコマンドを含む文字列を動的に構築し、何らかのコネクタを介してデータベースに渡し、戻ることです結果セット。 (これは、someValue = database.executeThisSQLCommand(SQLString)に要約される関数を本当に持っている場合です。)

これをまとめると、この場合の異なる言語は、実際にプログラムを相互に記述するか、誰もが理解できる非常に簡単で解析しやすい形式でデータを処理することによって通信します。 (主に文字列。)

使用中の複数の言語は、「相互運用性」と呼ばれます。または" interop"要するに。

あなたの例は間違っています。 JavaはC関数を呼び出すことができます。

この言語は相互運用性のメカニズムを提供します。

.NETの場合、言語はCLIの一部としてILにコンパイルされます。したがって、どの.NET言語でも、他の.NET言語で定義されたモジュールを相互運用(定義されたメソッドを呼び出す)できます。

例:

C#でメソッドを定義できます

static void Hello(){ Console.WriteLine("Hello World");}

そして、Python(IronPython)から呼び出すことができます

 Hello()

そして、期待される出力を取得します。

一般的に言えば、一部の言語は他の言語よりも相互運用性に優れています。特に言語の作成者が相互運用性を言語の機能に明確にした場合は特にそうです。

複数の言語は以下と対話できます:

  1. パイプ入力/出力(どの言語でもこれを行うことができます 入力と出力は必然的にすべての非おもちゃで実装する必要があるため 言語)
  2. 1つの言語のコードをネイティブライブラリにコンパイルする もう一方はネイティブコードの呼び出しをサポートしています。
  3. ループバックネットワーク接続を介した通信。あなたはできる この方法でファイアウォール干渉の問題が発生します。
  4. データベース。これらは「ユニバーサル」と考えることができます。データ ストレージ形式であるため、ほとんどの言語でアクセスできます データベース拡張機能付き。これは一般的に 次のプログラムの前に操作を完了するために1つのプログラムが必要です データベースにアクセスできます。さらに、すべての「通信」は 通常はディスクに書き込まれます。
  5. 関連する言語が同じランタイムで実行される場合(つまり、.NET、 JVM)、通常は1つの言語からオブジェクトデータを渡すことができます 少しの障害で他の人に直接。

ほとんどの場合、コミュニケーションを共通に変換する必要があります 交換する前の形式(例外は、 同じランタイム)。これが、1つの言語で複数の言語がほとんど使用されない理由です プロジェクト。

(最後のカウントで)約8言語で構成される大規模なエンタープライズプロジェクトに取り組んでいます。通信の大部分は、複数の言語のバインディングを含むエンタープライズレベルのメッセージバスを介して行われ、データを利用してデータをやり取りします。 tibco と呼ばれます。

大部分の作業がJavaで行われるアプリを作成することもできますが、データパーサーや何かがPythonで書かれているなど、その一部があるかもしれません。ほぼ2つの独立したアプリです。おそらく、パーサーはファイルに対して何らかの作業を行っているだけで、Javaのメインアプリはそれらを何かに使用しています。このプロジェクトで何を使ったのかと聞かれたら、「JavaとPython」と言います。

多くの異な方法で利用できる異言語の一つのプロジェクト ですがカテゴリーを思い浮かべるかもし

  1. 違う言語を築くために全社一丸となって一緒にお申込みいただけます。例えば、Javaを利用して、GUIを使用JNIへのアクセスCのAPIでに回答のご質問はできるC関数の呼び出しからJava;))
  2. 異なる言語のプロジェクトなの同一アプリケーションります。現在、私が取り組んでいiphoneアプリを使用量が多くいます。私は現在、用いる言語のPython(はoriganal源のテキスト)、SQL付近に取りにきてください結果をpythonアプリの形式で簡単にづけから、iphone sqlite3api)Objectiv Cの構築、実際のアプリです。でも最終製品のみを使用しました外国語の中から二言語)、最終製品

1つのプロジェクトで複数の言語を使用できるさまざまな方法があります。いくつかの例:

  • たとえばCでDLLを記述し、VBプログラムなどからそのライブラリを使用できます。
  • サーバープログラムをC ++などで記述し、クライアントのさまざまな言語実装を多数作成できます。
  • Webプロジェクトでは多くの場合、多くの言語が使用されます。たとえば、SQL(クエリ言語)を使用してデータベースからデータを取得するJava(プログラミング言語)などで記述されたサーバープログラムは、結果をHTML(マークアップ言語)でブラウザに送信します。 JavaScript(スクリプト言語)を使用して対話する...

プロジェクトの種類によって異なります。実験したい場合は、.NETでWebプロジェクトをセットアップし、ページごとに言語を変更できます。擬似コードで示すようには機能しませんが、複数の言語です。もちろん、実際のコードディレクトリは単一の言語でなければなりません。

言語のコードが直接やり取りできる方法はいくつかあります。コード間で渡されるデータがビットとバイトレベルで正しい形式である限り、異なる言語が相互運用できない理由はありません。このアプローチは、従来のWindows DLL開発で使用されます。異なるプラットフォームでも、フォーマットを正しく取得できる場合(必要に応じてビッグ/リトルエンディアンを参照)、リンカ(コンパイラではなく)がコードを結合する方法を知っている限り機能します。

それ以外にも、言語が互いに対話できる方法は他にも多数あります。 .Netの世界では、コードはすべての言語で同じILコードにコンパイルされます。このように、C#、VB.Netはすべて内部で同じであり、相互にシームレスに呼び出し/作業できます。

悪い。緊急の必要がない場合は、単一の言語に固執します。依存関係と複雑さが増しています。ただし、興味深い機能を提供する既存のコードがある場合、再作成するよりも簡単に接着することができます。

例のリストに追加するだけで、CまたはC ++でPythonコードを最適化するか、Cライブラリを記述して別のライブラリをPythonにバインドすることはかなり一般的です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top