4

言語設計について私が行った議論によると、多くの人が「1 つの真の言語」は存在せず、今後も存在しないと主張しているようです。これらの人々によると、別の方法は、いくつかの言語に精通し、仕事に適したツールを選択することです。 これは、非常に狭く明確に定義されたインターフェースを介してプロジェクトの残りの部分とやり取りするだけでよいプロジェクト全体または大規模なサブプロジェクトのレベルで完全に理にかなっています。

一方で、多くの小さなサブ問題をエレガントに解決しようとすると、多くの異なる言語を使用することは非常に厄介なことのように思えます。言い換えれば、IMHO、すべてに適した汎用言語は依然として重要です。些細な例として、次のことを行う必要があるとしましょう。

  1. ファイルから任意の形式で一連のデータを読み取ります。エラーなどがないかチェックしてください (Perl などで行うのが最適です)。
  2. このデータを行列にロードし、一連のハードコアな行列演算を実行します (Matlab などで行うのが最適です)。
  3. その上で、高速でスペース効率の高いカスタムの計算集約型ルーチンを実行します (C または C++ で実行するのが最適です)。

これはかなり単純なプロジェクトであり、計算量の多いカスタム マトリックス処理ルーチンを作成することを除けば、どの言語を使用するかについての唯一の適切な答えは、すべてにおいてまともな汎用言語であるように思われます。

ここで何が欠けていますか?複数の言語を効果的に使用して、それぞれの長所を活用するにはどうすればよいでしょうか?

4

6 に答える 6

3

私は、かなり多様な言語の組み合わせを含む多くのプロジェクトに取り組んできました。.NET プロジェクトでない限り、通常、これらの異なる言語を異なる層または異なるプロセスで使用します。Web アプリケーションは PHP で、アプリケーション サーバーは Java である可能性があります。そのため、メソッド レベルで実際に「組み合わせ」を行うことはありません。

.NET および一部の Java VM 言語では、より自由に混合できるため、ルールが少し変更されています。しかし、これらの言語の機能の大部分は、一般的なクラス ライブラリによって定義されています。したがって、.net で言語を切り替える動機は、通常、開発者がどの言語を知っているかなど、他の要因によって決まります。F# は実際には、その言語に固有のかなりの数の言語機能を提供するため、.NET 内では少し例外のようです。一部の Java VM 言語は、標準の Java ライブラリにメソッドを追加し、Java では利用できない機能を追加します。

すべての言語が優れた IDE サポートを備えている限り、実際には複数の言語を扱うことにかなり慣れています。それがなければ、私は本当に迷子になると思います。

于 2009-01-27T20:41:07.213 に答える
1

選択肢は、a)すべてを1つの言語で記述して効率を落とすか、b)ジョブの各セクションに最適な言語を使用するために、多数の異なる実行可能ファイルをまとめることです。

ほとんどの実用的なプログラマーはオプションcを選択します。IT部門が本番環境でサポートする言語を使用して、できる限り最善を尽くします。一般に、プログラマーは、JVMやCLRなどの特定のフレームワーク内で言語の選択肢が限られているため、ツールボックスのユートピアでも単一言語のゲットーでもありません。

LAMPとRailsでさえ、さまざまなレベルでさまざまな言語をサポートしています(Railsの場合はHTML、Javascript、Ruby、C)。ソフトウェアサービス(最近、興味深い作業のほとんどが行われている場所)を作成している場合、1つの言語だけで作成することはほとんどありません。しかし、あなたの選択も無限ではありません。

于 2009-02-16T05:48:18.487 に答える
1

Luaのような組み込み言語はこれを非常に簡単にします。Luaは、RubyまたはPythonに沿った優れた動的言語であり、高品質のコードをすばやく開発できます。また、Cと緊密に統合されているため、C / C ++ライブラリを利用し、CまたはC++で記述することでパフォーマンスクリティカルセクションを最適化できます。

科学計算では、たとえばMatlabでデータ処理を行い、Perlを使用して出力を再フォーマットし、それをMatlabやCなどで記述された別のアプリに渡すスクリプトがあることも珍しくありません。ただし、これは、ゼロから何かを開発する場合よりも、さまざまな人が作成したアプリを統合する場合によく見られます。

于 2009-01-27T20:58:31.313 に答える
0

複数の言語での私の作業には、C#とC ++ / CLIの単純な組み合わせが含まれています(聞いたことがない場合は、C ++と.NETのようなものです)。.NETとVisualStudioで多くの異なる言語を組み合わせることができるということは、2つの言語を組み合わせるときに通常期待するほどのオーバーヘッドが発生しないことを意味すると言う価値があると思います-VisualStudioはすべてを維持します一緒。さまざまな言語(F#、IronPython、IronRuby、JScript.NETなど)の.NETクローンが多数あることを考えると、Visual Studioは、さまざまな言語を組み合わせることができる非常に優れた方法です。

興味のある技術レベルに至るまで、Visual Studioで行う方法では、個別の言語ごとに1つのプロジェクトが必要であり、各プロジェクトはアセンブリにコンパイルされます。つまり、基本的には、使用する他のプロジェクト。すべてを駆動し、他のライブラリを呼び出す1つのメインプロジェクトがあります。それぞれの異なる言語が異なるプロジェクトである必要があるということは、メソッドレベルで言語を変更しないことを意味しますが、論理的に複数のプロジェクトに分割できる十分な大きさのアプリケーションを実行している場合、実際には非常に便利です。特に、分離と抽象化は全体的に物事を容易にすることができます。

于 2009-01-27T21:18:49.947 に答える
0

あなたの仕事の最も難しい部分を考えてください。ファイルの解析は最も複雑な部分ですか?ファイルを読み取り、それらを操作するための優れた言語が最も適切な選択かもしれません。

数学の変換は最も難しい部分ですか?それを吸い上げてmatlabを使用し、スクリプトやその他の自家製ツールを使用することをお勧めします。

パフォーマンスは最も重要な部分ですか?変換と解析に対してどのくらいの計算が行われますか?実行される作業の90%が計算であり、他の部分が一時的なものである場合は、C /C++ソリューションを検討してください。

単純なソリューションで複数の言語の長所を活用することに本質的に問題はありません。特に、スクリプトと一緒に接着することを気にしない場合はそうです。ただし、統合する言語とモジュールが多いほど依存関係が高まり、依存関係が増えるほど、アプリの配布と保守がますます困難になります。ここに本当のトレードオフがあります。アプリを実行するために必要なテクノロジー、ライブラリ、ソフトウェアのビットが少なければ少ないほど、アプリはシンプルになります。アプリがシンプルであるほど、保守性、配布性、デバッグ性、および使用性が向上します。

複数のテクノロジーを統合することによる余分なオーバーヘッドを気にしない場合、またはそのオーバーヘッドによって同等以上の開発時間を節約できる場合は、先に進んでください。

于 2009-01-27T20:59:11.373 に答える
0

大丈夫だと思います。各レイヤーが同じ方法(SOAP / XML / COMなど)でその下にあるものにアクセスするn層セットアップとしてセットアップした場合、最終的には見えないことがわかりました。

あなたの例では、フロントエンドに1つの言語を選択します。これは、簡単、迅速、柔軟で、com、corba、xml、.netなどのさまざまなインターフェイスに対して多くの種類の呼び出しを行うことができます。カスタムdllライブラリ、ftp、およびカスタムイベントゲートウェイ。これにより、他の言語に簡単に電話をかけたり、やり取りしたりできるようになります。

このために私が選んだツールは、ASP / PHP/Javaと少しのRubyを使用するColdfusionです。すべてが1か所にあるようで、非常にシンプルです。特定のケースでは、COldfusionを使用すると、Webコードで呼び出すことができる独自のライブラリタグをコンパイルできます。タグの中には、好きなcコードをすべて入れて、好きなように実行させることができます。

Coldfusionには無料のオープンソースバージョンがあり、1つのコードベースからJavaと.NETの呼び出しを素朴に行うのに最適です。ぜひチェックしてみてください。このような企業向けソリューションに最適なのかもしれません。

状況によっては、PHPもこれにかなり適していると思いますが、Asp.netはそれほど遅れていないと確信しています。

于 2009-01-27T21:03:48.230 に答える