Python、Perl、Rubyなどが最小限の思考で他の言語のモジュールをプラグインするのに最も簡単だと思う理由を教えてください。
明確にするために、例:Pythonでビジネスロジックを記述したいが、Perlモジュールとして便利に存在する機能を使用します。
言い換えれば、どの言語がほとんどのモジュールで「正しく機能する」のでしょうか。
Python、Perl、Rubyなどが最小限の思考で他の言語のモジュールをプラグインするのに最も簡単だと思う理由を教えてください。
明確にするために、例:Pythonでビジネスロジックを記述したいが、Perlモジュールとして便利に存在する機能を使用します。
言い換えれば、どの言語がほとんどのモジュールで「正しく機能する」のでしょうか。
Perlは、モジュールのインラインセットを介して他の言語を非常によくサポートしています。
Inline :: Pythonを使用すると、Pythonモジュール、クラス、および関数をPerlコードにインポートし、ネイティブであるかのようにPerlから呼び出すことができます。関数のインポートを参照してください。
Inline::Rubyは実質的に同じように機能します。
Parrot VMは、この目的のための方法のように見えます。
Parrotは現在、Tcl、Javascript、Ruby、Lua、Scheme、PHP、Python、Perl 6、APL、.NETバイトコードトランスレーターなど、さまざまな言語実装を完了のさまざまな段階でホストしています。
これらの言語のどれを「メインドライバー」として使用し、どの言語をこのモジュールの「ゲスト」として使用するか、またはその言語はそれほど重要ではないと思います。Parrotの実装が完全で成熟している言語を選択することを確認してください(Parrotのかなり新しいプロジェクトであり、その上にこれらの言語実装のいくつかもあります)。
Perlモジュールをプラグインする場合、これに最適な言語はPerlです。Perlは、Perlで記述されたコードのセマンティクスと機能を正しく表すことができます。これは本当にショックではないはずです。
常に相互作用するのではなく、独自のプロセスで別のプログラムから呼び出したい自己完結型のプログラムがある場合、これらの言語のいずれも、任意の言語で記述されたプログラムでそれを行うことができます。その時点では、プログラム内で他の言語を実際に使用しているのではなく、他の問題を呼び出すだけです。
互換性のために幅広い言語のプラットフォームを提供しようとするさまざまなペアとプロジェクト(Parrotなど)を組み合わせるプロジェクトと、以前は互換性がなかった言語間の互換性をほぼ偶然に提供するプロジェクト(.NETなど)がいくつかあります。ただし、これらのほとんどは、堅牢で成熟しており、通常のコードを組み合わせるのに適しているとは思いません。
3つの言語すべてに、サブプロセス内の実行可能ファイル(python somethingelse.py
またはなどの実行可能ファイルを含むruby somethingelse.rb
)を呼び出すための非常に優れた明確な機能があります。
あなたが最もよく知っているものを使用してください。
ここでは、よりアーキテクチャレベルで回答します。問題は、何をしようとしているのかということです...ビジネスロジックをPythonで記述し、PythonからPerl関数を呼び出しますか?または、スクリプトを実行しようとしていますか?もしそうなら、2つはどのように通信しますか?
Parrot VMでそれができるのではないかと思いますが、Mikeが指摘しているように、問題があります。何らかの形の緩い結合(言語にそれほど結びついていない)を使用しない限り、プログラム間のIPCが難しいのと同じように、言語間の作業は困難です。そのためには、コントローラーを1つの言語でセットアップし、他のすべての人にdbusキュー、または使用しているプラットフォームに適したメカニズムを介して会話させることを検討してください。それをどのように行うかは実際には重要ではありませんが(最良のメカニズムについての議論の手がかり)、適切に設計されているため、言語間での会話やプラグインの構築が非常に簡単になります。たとえば、次のキューがある場合がありますprocess_new_user
、 例えば。そのキューに登録するスクリプトはすべてデータにアクセスできるため、新しい開発者はプログラムの自分の部分に機能を簡単に追加できます。次のように解釈します。別のスクリプト言語を使用して、そのビットを簡単に実装できます。
動的言語ランタイムは、ある動的言語が別の動的言語で定義されたオブジェクトと関数を使用できるように特別に設計されました。現在、PythonとRubyにはDLR実装がありますが、Perlについては何も聞いていません。
DLRを使用するには、.NETまたはMonoのいずれかが必要です。
ほとんどのスクリプト言語は(他の言語で書かれた外部プログラムを実行することで)この種のことを処理できますが、最善の策はある種のシェルスクリプトであるように思われます(Windowsユーザーはこれを「バッチスクリプト」と呼びますが、DOS構文は恐ろしく、お勧めできません。)UNIXプログラマーは、長い間、このように自由に言語を混合してきました。Windowsでは、Cygwinをインストールして、完全に機能するBASHシェルを取得できます。
シェルは元々ユーザーインターフェイスとして意図されており、他のプログラムを起動したり、興味深い方法でそれらを組み合わせたりするために使用されていました。ただし、多くのシェル(特に、Bourneシェルまたはその最新の子孫であるBASH)も、本格的なプログラミング言語です。各「モジュール」は、シェルスクリプトによって実行される個別のスタンドアロンプログラムとして作成できます。