10

動的言語(PythonまたはRuby)とコンパイル型言語を組み合わせたアプリケーションを構築することを検討しており、これが良いアイデアであると自分自身に納得させるための支援が必要です。

私の考えでは、動的言語を使用して大量のコードをすばやく記述し、c /c++などのコンパイル言語にドロップダウンしてパフォーマンスが重要なコードを実装できます。

このアプローチには多くの利点があります。

  1. 主に動的言語でコーディングすることによる生産性の向上
  2. 両方の言語からのライブラリの可用性

しかし、いくつかの欠点もあります。

  1. 2つの言語間の架け橋を維持する
  2. 1つではなく2つの言語と言語/ライブラリのバグへの依存

このアプローチの他の長所/短所は何ですか?誰かがこれに関するリソースやベストプラクティスについて知っていますか?

4

11 に答える 11

12

あなたのアプローチは非常に賢明だと思います。欠点に対処する方法は、プロジェクトで動的言語を使用するかどうかを決定する前に、動的言語と C または C++ とのインターフェイスがどれほど簡単かを事前に調べることです。

また、アプリケーションをクロスプラットフォームにするかどうかについても考慮する必要があります。動的言語は、コンパイル済み言語よりもプラットフォームへの依存度がはるかに低い可能性があります。これは、アプリのどの部分を C または C++ で行うべきかを決定する要因になる可能性があります。

于 2008-09-26T20:18:31.173 に答える
6

私はあなたの質問を読み直しました - パフォーマンスが重要なコードに C を使用するというあなたの提案。価値のある動的言語には、ネイティブ コードに効率的にアクセスできるツールがあります。そのため、すべてを動的言語で記述することから始めます。結局のところ、C は必要ないことに気付くかもしれません。

しかし、そうする場合は、プロファイラーを分割し、最適化するものを慎重に選択して、それを実行してください。

于 2008-09-26T20:54:53.490 に答える
5

Ja, bien sur, mein freund. それは確かにun'idea meravigliosaです。ボアソート。

もちろん冗談です。Web 開発者は、Java、JSP、EL/OGNL、HTML、CSS、Javascript、ant、XML、XSLT など、無意識のうちに毎日それを行っています。

多言語プログラミングは自然で、強力で、効率的で、何よりもクールだと思います。もちろん、すべての言語の能力を最大限に引き出し、チームの他のメンバーを混乱させないように、正しい方法で使用する必要があります。

于 2008-09-26T20:29:38.870 に答える
3

はい。多くのプログラムは、PythonやRubyなどの高級言語と、Cなどの低水準言語が混在しています。ガベージコレクションされたオブジェクト指向言語でロジックをコーディングするメリットがあり、タイトな内部ループ内でレジスタを手動で管理できます。 。

于 2008-09-26T20:15:27.000 に答える
2

Gambit Scheme と Chicken (およびその他のいくつかの実装) はインタープリター モードで実行され、C にコンパイルできることに注意してください。

于 2008-09-27T00:28:06.487 に答える
2

後ほどまで、パフォーマンスに重要な要素を実装する必要がないことに気付くかもしれません。したがって、パフォーマンスに重大な影響を与える主要な変更のいずれかが導入されると、それが必要であると確信できるまで、私は懸命に戦います。

それ以外の場合は、ルート言語を選択するだけです。perl と Ruby は c を使用するため、組み込みは非常に簡単です。Java VM で python (jython) または ruby​​ (jrunby) を実行することもできます。これにより、バックエンドとして Java が提供されます。私はそれぞれの言語のこれらのバージョンに対する開発に慣れていないため、他の問題が発生する可能性があります。

ただし、すべてのパフォーマンスの問題で低レベル言語に移行する必要があるわけではありません。そのため、すぐに別の言語にジャンプする前に、まず 1 つの言語で問題に取り組むようにしてください。

幸運を、

于 2008-09-26T20:31:50.877 に答える
2

私は仕事に最適なツールを使用することに賛成です。ソフトウェア工学の場合、多言語であることを意味します。大工さんが何を作っていようと、ハンマーだけを使うとは思わないでしょう。なぜ私たちにとって異なる必要があるのですか?

于 2008-09-26T20:35:23.897 に答える
2

@ゾーカーマン

私は Jython と JRuby の両方の経験があります... JRuby ではもっと多くの経験があります。

これらは優れたプラットフォームであり、動的言語の大きな利点、Java の豊富なサードパーティおよびファースト パーティ ライブラリのサポート、高度にプラットフォームに依存しないベース コンパイル言語、両方の言語でのガベージ コレクション (理解することが重要です) を得ることができます。メモリ管理は必要ですが、ドライバーやカーネル レベルの作業を行っている場合や、必要なパフォーマンスをすべて必要とする作業を行っている場合など、本当に必要な場合を除き、避けたほうがよいと私は考えています)。

簡単に逸話を述べたいと思います。最近、Solr インスタンスにインデックスを付けるための ruby​​ スクリプトを作成していましたが、DB2 データベース (インデックスを作成するデータのソース) にアクセスする必要がありました。正直な Ruby は惨めに失敗しました... DB2 Express Edition のフル インストールを必要とするひどい DB2 サポートがあります...それでも宣伝どおりには動作しませんでした (インストールが完了した後、Ruby ドライバーをコンパイルできませんでした)。解決策は、JRuby に切り替えて Ruby 側から JDBC を使用することでした。インストールが簡単ないくつかの jar (および DB2 インストールよりもはるかに小さいファイル) を使用します。

C をバックエンドとして使用する代わりに、JRuby または Jython を検討することを強くお勧めします... 通常、アルゴリズムとリソースのパフォーマンスは、選択した言語よりもアプリケーションのパフォーマンスにはるかに大きな影響を与えることがわかりました。提供するものはたくさんあります (そして、人々が C/C++ よりもはるかに遅いと非難していた初期の頃から、長い道のりを歩んできました)。アルゴリズム的にリファクタリングできない非常に重い計算集約的なことを行っていない限り、選択に関係なく、コンパイル済み言語にドロップダウンする必要はほとんどありません。


PS JRuby での Java との統合は非常にシームレスであるため (とにかく JRuby から Java 側へ)、ブリッジの維持は問題になりません。Jythonも同じだと思いますが、私の経験ははるかに少ないです。

于 2008-09-26T20:51:47.193 に答える
1

一部の人々は、私たちプログラマーはあまりにも多くの言語を習得しなければならないと主張しています。彼らは、言語を追加することは悪いことだと主張しています。

SQLでのデータアクセス全体、HTML/CSSでの表示は元に戻せないようです。

XMLのことは少し面倒です。まるで、XMLがソフトウェアをより良くする魔法の力を持っているかのように、XMLですべてをやろうとする人もいます。

また、複数の言語があるため、かなりの冗長性があります。すべての言語間バインディングは、各言語で1回ずつ、2回書き込まれることを意味します。

于 2008-09-27T01:00:20.637 に答える
1

これは良い考えだと思います。

ほとんどの (ほぼすべて?) OS は C または C++ で記述されているため、すべての動的言語またはインタープリター言語は、あるレベルで、低レベルのもの用にコンパイルされ、最適化された言語にフォールバックします。

于 2008-09-26T20:24:41.393 に答える
0

これは非常に一般的なことですが、なぜそのように設計しているのかを確認してください。

1 つの例として、ゲームのプログラミングがあります。多くのゲームでは、パフォーマンスが重要なゲーム エンジンは C で記述されていますが、レベル スクリプトなどは Python、Scheme、自家製の言語などで行われています。

これは、パフォーマンスオタクが好きな言語で作業していて、必要な低レベルの制御を提供している一方で、レベルデザイナーは、メモリの管理などを心配する必要がない高レベル言語で作業できることを意味します。

于 2008-09-26T20:38:03.063 に答える