8

私は、多くの Web ベースの AI 作業を含む大きなプロジェクトに取り組んでいます。私は Python に非常に慣れていますが、唯一の関心事は、並行プログラミングと、このプロジェクトをクラスター上で動作させるためのスケーリングです。したがって、Clojure for AI と Java 関数呼び出しのサポートにより、並行プログラミングが可能になります。

Python ですべての Web ベースの API 作業を行い、Clojure に並行 AI 作業のほとんどを処理させるのは良い考えですか?

編集:相互作用を詳しく説明しましょう。Python は汚い作業 (スクレイピング、画像処理、データベースの改善など) のほとんどを行っていました。可能であれば、Clojure はデータベースを処理するか、Python からデータを取得します。私は、Python と Clojure とリンクする CPython のようなものを除いています。

Edit2: 聞くのはばかげた質問かもしれませんが、これはかなり長期的なプロジェクトであり、かなり進化し、いくつかの反復が行われます.Clojureはここにとどまる言語ですか? 携帯性は十分ですか?

4

4 に答える 4

14

私は、Clojure のバックエンド (任意の数のマシン上) と Ruby on Rails のフロントエンドを使用して、恥ずかしいほど並列に計算するアプリケーションを構築しました。私は RoR が特に好きというわけではありませんが、これは当時予算ゼロのプロジェクトであり、無償で喜んで作業してくれる Rails プログラマーが手元にいました。

Clojure の部分は、(大まかに) コントローラー、数値処理ノード、および Rails Web アプリへのインターフェースである JSON-over-HTTP API を実装するサーバーで構成されていました。Clojure ノードは、RabbitMQ を使用して相互に通信しました。アプリケーションのさまざまな部分の間に明確な API を定義したため、後で Clojure でフロントエンドを簡単に書き直すことができました (Clojure の方がニーズに合っているため)。

長いライフ スパンと継続的な開発努力を伴う分散プロジェクトに取り組んでいる場合、明確に定義された API (json、bson、... over AMQP、 HTTP、... またはデータベース)。つまり、使い慣れた言語を使用してすぐに開始し、必要に応じて後の段階で別の言語で部分を書き直すことができます。

于 2012-05-11T21:32:07.477 に答える
6

Web アプリに Python を使用し、並行データ処理 / バックエンド コードに Clojure を使用することに大きな問題があるとは思えません。2 つの間の通信には JSON over http のようなものを使用すると思いますが、これは正常に機能するはずです。

私は個人的に両方にClojureを使用します(たとえば、優れたNoirをWebフレームワークとして使用し、Kormaをデータベース用に使用します)が、あなたの経験がほとんどPythonであると言うなら、生産性からPythonに固執することはおそらく理にかなっています視点(少なくとも短期的には)。

Clojure の将来に関する質問に答えるには:

  • それは間違いなくここにとどまります。これには非常に活発なコミュニティがあり、おそらく現在 (Scala や Groovy と並んで) 「最もホットな」JVM 言語の 1 つです。ビッグデータ/分析分野で特にうまくいっているようです
  • Clojure は、任意の Java ライブラリを簡単に利用できるため、ライブラリ サポートの点で特に有利です。これは、新しい言語のエコシステムを軌道に乗せるための最大の問題の 1 つであるものがすぐに解決されるため、実用的な観点から見ると、新しい言語にとって大きな利点です。
  • Clojure は、まだかなり多くの開発が行われている新しい言語です。Clojure を使用する場合は、Clojure の最新バージョンでコードを最新の状態に保つための努力が必要になることに注意してください。個人的にはこれが問題だとは思っていませんが、Java のような「安定した」言語に慣れている人にとっては驚くかもしれません。
  • Clojure は非常に移植性が高く、基本的に、最新の JVM を入手できる場所ならどこでも実行できます。
于 2012-05-12T02:26:50.233 に答える
4

データとPure(ish)関数を使用して通信するために両側を構築できる場合、これは非常にうまく機能するはずです。JSON(またはより好ましくはclojureフォーム)を取得して再実行するWebサービスでclojure関数をラップすると、Pythonベースのフロントエンドにアクセスできるようになり、余分な手間がかかりません。

もちろん、Clojureでずっと書くほうが楽しいです。;)

これがクリーンなFunctional(テイクとリターンの値のように)インターフェースを構築するよりも長期的なプロジェクトである場合、データを交換するインターフェースは、コンポーネントを独立して進化させる能力を与えるため、さらに重要になります。

于 2012-05-11T20:22:37.007 に答える
0

そのようなシナリオでは、私は個人的に以下の順序で始めるのが好きです。

  • システムをサブシステムに分割し、各システムの機能を「非常に明確に」定義します。その定義は、「1つのことを実行してシンプルに保つ」という原則に従う必要があります。この段階では、言語などについては考えないでください。
  • これらのサブシステムが実行されるプラットフォーム(言語ではない)を選択します。例:JVM、Python VM、NodeJ、CLR(Mono)、その他のVM。いくつかのプラットフォームを選択するか、可能であれば1つだけを選択してみてください。そうすることで、複雑さの点で将来の生活が楽になります。
  • それらのプラットフォームをプログラムする言語を選択してください。これは非常に主観的ですが、JVMの場合は、ClojureまたはJythonを使用できます(私のように動的言語が好きな場合)。

Clojureの将来に関する限り、これは「素晴らしいプログラマーのコミュニティ」によって開発された言語であり、一部の企業によって開発されたものではありません。これで、Clojureの「長期的な」懸念についての疑問が解消されることを願っています。ちなみに、ClojureはLISPなので、言語を好きなように変更して、誰かがあなたに代わってそれをしなくても、自分で修正することができます。

于 2012-05-12T09:07:17.743 に答える