web-dev-qa-db-ja.com

同じプロジェクトでの異なる言語の使用

私は6か月前に大学でプログラミングを始めました。 Python、C、Javaを学びました。プロジェクトを作成し、これらの言語を使用したいと考えています。たとえば、パーツの検索にはCを使用する必要があります。他のパーツよりも高速だからです。設計するにはJava etc ...同じプロジェクトで異なる言語をどのように使用しますか?それらを最適化するための特別な方法はありますか?この主題をどのように研究できますか?キーワードはありますか?

注:たとえば、ゲームをダウンロードするSteamは、C++、Objective C、Javaで作成されました。 Steamや他のプログラムのように同じプログラムで異なる言語を使用するのはなぜですか?

4
claymorehack

あなたがする必要がないときは、それをしないでください!特にあなたが提案したように言語が境界を越える場合、それは非常に苦痛になります(境界についてのクリーンアーキテクチャを参照)。

本当にやりたい場合は、各ソフトウェアにいわゆる相互運用レイヤーがあります(JavaなどのNDK)。ただし、常にメモリ内の変数と概念の表現に注意する必要があります。基盤となるプラットフォーム。

ここで最悪の場合:3つの完全に異なる種類のプログラミング言語があります。Cはコンパイルされており、ハードウェアのすぐ近くにあります。Javaはコンパイルと解釈の混合で、もう少しプラットフォームから離れて(あちこちからリークしている)、最後にpythonでインタープリター言語があり、ハードウェアを隠しています。

それを行うことについてのあなたの議論は、時期尚早の最適化のように私に聞こえます:現在のアプリケーションのパフォーマンスに関する問題を測定するときだけ、パフォーマンスを改善すべきです。私の意見では、JavaはJITを介して本当に高速です(Kafkaを参照してください-信じられないほどです)。

注:本当に別の言語を使用したい場合は、Javaなどのように、GroovyやJythonのように、すべてがJVM上にあることを確認してください。

[編集]:コメントで言及されました:異なる言語が理にかなっているユースケースがあります。最良の例は、1つのプロジェクトにHTML、Javaコード、SQLコードが含まれるWebアプリケーションです(3つの異なるパラダイム(Just Markup、Imperative、Declarative)でも)。しかし、非常に明確な境界があります(HTMLのファイル拡張子は異なります)。この明確なシナリオでさえ、言語を境界を越えて混在させないことは困難です。たとえば、ビジネスロジックからすべてのSQLコードをプッシュして、HTMLを分離する必要があります。要するに、それを避けようとしますが、それをしなければならないときは、自分の境界に注意してください。

7
Thomas Deniffel

「1つのプロジェクト」の概念を改良しようとするかもしれません。明確に定義された境界に沿って言語を使用している場合、連携する複数のプロジェクトがあるように思えます。その場合は、おそらくそれらを個別のプロジェクトに分割するのが最善です。配布または配置として、結合または配置をビルドプロセスに追加できます。このアプローチには明確な利点がいくつかあります。これにより、依存関係を明確に区別でき、懸念事項の分離が維持され、コードの移植性/モジュール性が向上します。

このアプローチは、Webおよびモバイルアプリケーションでよく見られます。たとえば、私が取り組んでいる1つのソフトウェアにはPHPバックエンド、JSアプリのフロントエンド、およびいくつかのpub/subルーチンを処理するnodejsアプリケーションがあります。物事を整理しておくために、nodejsは完全に独立しています(そしてPHPとJSは現在一緒になっていますが、明確な分離を維持するためにそれらを分離することにも取り組んでいます。別の利点により、アプリの個々の部分を他の部分に干渉することなく個別にデプロイする機能です。

頭に浮かぶもう1つの例は、モバイルアプリ、特にiOSです。そのスタックでは、C、Objective C、またはSwiftを同じプロジェクトで使用できます。ただし、実際には、ほとんどの開発者はそれらを分離し、代わりに他の言語で子プロジェクトであるライブラリを作成することを好みます。これらはビューの依存関係マネージャーを維持し、ビルド時に結合されます。

TLDR:整理してください。

2
zquintana
  • トップ言語、GUI、およびすべてとして、Javaを使用できます。
  • 大量のデータ処理には、[〜#〜] c [〜#〜]を使用できます。
  • スクリプティングにはPythonを使用できますが、おそらくJava Scripting APIを使用します。

それは理にかなっており、責任と領域が明確に定義されています。 Pythonはもちろん、単なるスクリプト作成だけではありません。

ただし、切り替えが原因で、拷問の進行が遅くなります。 APIを2つの言語側で拡張することに不安を感じているのです。詳細をデバッグします。ユニットテストとは切り離してパーツを開発する、テスト駆動開発をお勧めします。

最良(最も流暢)なのは、すべてJava開発をCとPythonに適合させ、パーツを交換することです。

Java 9 for FX for GUIは、すでにかなりの労力を必要とします。熱狂しすぎないでください。プロジェクトが限定的であればあるほど、クリエイティブになり、ビジネスに集中できます。手ではなく、技術的なプログラミング機能。

1
Joop Eggen