web-dev-qa-db-ja.com

同じプログラムで複数のプログラミング言語を一緒に使用するにはどうすればよいですか?

そのような単純な質問ですが、これに対する合理的な答えは見つかりませんでした。

私は現在、インタープリター言語であるPythonでプログラミングしています。同じプログラムで複数の言語を使用している人の話をいつも聞いていますか?次に、スクリプト言語を使用してそれらを聞いています。ここにいる誰かが平易な英語で私に、プログラミング言語とスクリプトとして知っていることと、地球上で人々がどのように複数の言語を一緒に使用するかとの違いを説明してくれませんか。それだけでは意味がありません。

どうすればJavascript、PHP、およびASPを一緒に使用できます。または、C/C++でゲームをプログラムして、スクリプトとしてpythonを使用しますか?私には意味があります、それらは理由があるために異なる言語であると思いますが、どうやってそれらはお互いに役割を果たすのですか?

6
user3712563

多くの場合、複数の言語が一緒に使用されているのを見ると、一方がコンパイルされた言語であり、もう一方がスクリプト言語であることがわかります。

コンパイルされた言語は通常C/C++ですが、他の多くの言語(Haskell、Erlang、Javaなど)にすることもできます。コンパイルされた言語は、基本アプリケーションを提供します。ベースは、基盤となるオペレーティングシステムへのインターフェイスと、アプリケーションが実行する作業の基盤を提供します。多くの場合、アプリケーションは、スクリプトインターフェイスを使用して開発を容易にする低レベルの機能を提供します。

スクリプト言語は、アプリケーションのカスタマイズを提供するために最もよく使用されます。カスタマイズは、ベンダーが独自に提供するアプリケーションの一部にすることも、スクリプトインターフェイスがエンドユーザーにカスタマイズを提供することもできます。

多くの場合、スクリプトインターフェイスは、アプリケーションに固有の便利な機能と高レベルのインターフェイスを提供することにより、ほぼドメイン固有の言語を提供し、より簡単にカスタマイズできます。

よく知られている例をいくつか示します。 EmacsはCで記述され、Emacs LISPを使用してカスタマイズされます。 TextMateは、Rubyを使用してカスタマイズされたコンパイル済みアプリケーションです。 Atomは、ノードで実行するためにJavaScriptで記述された新しいテキストエディターです。Atomは、より間接的です。アプリケーションは、(ほぼ?)すべてのJavaScript .jsは、C++で記述されたV8を使用します。Worldof Warcraftには、Luaを使用するスクリプトインターフェイスがあります。

個人的な例として、AppleScriptを使用してカスタマイズしてMacOSのUI要素にアクセスするために、ベースコードがObjective-C/C++であるブランド対応のインストーラーに取り組みました。 AppleScriptインターフェースは、お客様ごとにアプリケーションをブランド化するために私たちだけが使用しました。

他の人が言ったように、適切なアプリケーションに適切な言語を使用してください。

6
Bill Door

Bill Doorは、「メインプログラム」がCまたはC++で記述され、カスタマイズ用にスクリプト言語が含まれているいくつかの良い例を示しましたが、「メインプログラム」がいくつかの「 「スクリプト言語」(そのWordを使用するときに頭に浮かぶものは何でも)は、CまたはC++で記述されたモジュールによって拡張されます。たとえば、Pythonでは、一般的な使用例は Cで拡張機能またはモジュールを実装する です。これは、パフォーマンスが向上するため、通常はこの方法で実現できます。 Pythonモジュールのコア部分は、ほとんどがC、PyGame、またはPython Imaging Library(PIL))で記述されているのはそのためです。

2
Doc Brown

相互運用性は通常、データを転送することによって実現されます

一般に、各言語は独自のプログラムであると考えることができます。しかし、これは必ずしもそうではありません...

いくつかの例:

  1. SQLクエリをデータベースに送信する
  2. pHPでjson_encode()を使用して、データ構造を文字列表現にエンコードします。これは、Javaスクリプトによってデコードできます。
  3. 組み込みインタープリターから呼び出すことができるAPIを公開します。このAPIは、メモリアドレスによって公開される可能性があります(C++に関連付けられたLuaを考えてください)。別の例は、Jython、python、JVMで実行できる)です。

これを実行するいくつかの理由:

  1. 一部の問題は他の言語で解決する方が簡単です
  2. バイナリプログラムを再コンパイルせずに拡張できます
  3. 既存のソリューションを利用して、ゼロから作成する必要がないようにします。
2
Justin