JVM に行き詰まった、Java にうんざり…どこに行けばよいでしょうか?

StackOverflow https://stackoverflow.com/questions/1473242

  •  16-09-2019
  •  | 
  •  

質問

今後 3 年間は、非常に特殊なサードパーティ API を使用して JVM (プロジェクト要件) を操作する必要があります。彼らは Java を望んでいますが、私には Java から離れる余地が与えられています。OCaml が大好きだったので、.NET Framework に戻って F# でコードを開発できるようになることを期待していました。.NET 開発はお客様によって中止されました。それはだめです。

私は、どの言語が自分にとってさらに魅力的なのかを理解するために、プログラミングのブログやフォーラムを探し、読んだり、調べたりすることにしました。Scala または Clojure。これらは最大のコミュニティ/ファンベースを持っているようです。ML 言語の経験があると、Scala と ML を比較する人をたくさん見かけます。ただし、この比較を行う際には、いくつかの真の否定論者がいます。Scala がそれほど ML に近いものであれば、この切り替えによって私の生産性と学習曲線は有利になるでしょう。

インターネットには誤った情報が溢れていて、私もそのようなことで苦しんでいるのではないかと思います。私は Lisp の構文が好きではありません (傷つけないでください!) が、Scala に私が読んでいるいぼがある (貧弱な IDE サポート、流動的な単体テスト フレームワーク、パフォーマンスの問題) があるとしたら、Clojure の方が優れているのではないかと考えています。オプション。関数をファーストクラスのオブジェクトとして使用し、同時実行による問題を最小限に抑えて、最初から生産性を高めたいと考えています。

とにかく、インターネットに時間を費やしすぎて仕事ができなくなる前に...JVM に行き詰まり、Java にうんざりし、どこに行けばよいのか迷っています。

役に立ちましたか?

解決

あなたはGroovyのと考えていますか? **私はそれがスカラ座/ Clojureのほど機能的であるとは思わないが、それは確かに多くの機能Java以外のです。一般的に、私はそれがJavaで私を取ると、コードの約50%とGroovyで行われ、同じ仕事を得ることができます。

のGroovyはJavaの構文的に似ており、JDKライブラリへのシームレスなアクセスを提供しますので、これはですが、言語機能(閉鎖、メタプログラミング、プロパティ)と動的型付けの多くの追加は、Javaに関連したほとんどすべての定型性を排除しますプログラミングます。

**私は「関数型プログラミング」の意味で機能的な意味ではなく、

「正しく動作します」

他のヒント

私の意見では、それが本当に重要である場合、Clojure と Scala はどちらも優れた IDE サポートを備えていません。そうは言っても、私の読書と経験から収集できることは次のとおりです。

Scala の長所

  • Clojureよりも速い 静的型付けが増えたおかげで
  • MLに近づく (構文、型指定プログラミング)
  • より大きな標準 API (Clojure の API は、公開する前に最適なイディオムを確実に見つけられるようにしたいため、拡張が非常に遅くなります。とはいえ、Clojure にはまだ半公式の補足 API があります)
  • より良い統合 実践 典型的な Java ツールセットを使用 (Clojure はまだいくつかの選択を行っているため、この点に関してはまだ確立されていません)
  • Clojureよりも古い (ただし、Clojure は非常に古く実績のあるコアの上に構築されています。舌足らずの発音)
  • 人々はそれが主流になる可能性があると言います, 、一方、彼らはClojureについては同じことを言いませんでした

Clojure の長所

  • 驚くほど簡単、高速、適切な同時実行 MVCCベースのSTMのおかげで そして 他の同時実行メカニズム
  • デフォルトでの不変性 最初に正しいことをするのに役立ちます
  • より安定した標準 API
    • 状況が変わっても、通常は既存のコードを書き直す必要はありません
    • (Scala のコレクションは 2.8 用に再度作り直されています)
    • (また、Scala のアクターの実装には再考と書き直しが必要であることは周知の事実であるとどこかで読みました。)
  • 学びやすくなる (小さな言語、(非常にクリーンな) Lisp である)
  • 何か違うことを学ぶことで成長できるチャンス
  • Clojure のパフォーマンスは時間の経過とともにさらに向上します。コンパイラにはまだ最適化の余地があります
  • Scala と Java の結びつきは、Clojure の結びつき (Scala と Java の静的型システム間の相互作用) よりも制限があるように感じられます。Clojure についても同じことが言えることがあります (オブジェクト指向のサポートは 1:1 に適合しませんが、これに対するサポートはすぐに改善されるでしょう)
  • Rich Hickey は、Clojure が今後数十年で他の言語に採用される技術的な先進的な機能を持つ立場に立つような選択をする才能を持っています。そして彼はまた贈り物を持っています それらを説明する. 。したがって、Clojure で今すぐ使用するか、数年後に別の言語で使用するのを待ってください。:)

分散同時実行性について

同時実行のニーズが分散されている場合、Terracotta または類似のものの上で実行しない限り、Clojure にはこれに対応する機能がまだありません。その場合、すべての同時実行機能を使用できます。そうすれば、Scala の Actor を使用した場合よりも優れた分散同時実行エクスペリエンスが得られることになります (IMO)。

結論

IMO Scala はすべてを実行しようと試み、そのほとんどを実行することに成功します。Clojure は同じことを試みているわけではありませんが、Clojure が焦点を当てているものは十分すぎるほどであり、非常にうまく成功しているため、Clojure を本当に知っているほとんどの人は他のものに戻りたくないと思うでしょう。 開示:私の個人的な好みは、もちろん Clojure です。自分が書いたものを客観的に書くことができれば幸いです。

Scala に関してあなたが指摘した点について説明します。

  • IDEのサポート:

    Scala には、Java と同じレベルや IDE サポートがありません。さらに言えば、F# が VS10 で備えているはずのレベルや IDE サポートもありません。

    そうは言っても、それは最高のものの1つを持っています(おそらく 最適?) IDE は Java 以外の JVM をサポートします。現時点では NetBeans で十分ですが、IDEA の方がまだ優れていると常に言われています (伝聞)。ただし、Eclipse プラグインは不安定です。

    しかし、3 年の範囲について言及しましたが、Scala 2.8 がリリースされれば、IDE にコンパイラ サポートが提供されるため、Scala の IDE サポートは大幅に強化されるはずです。発売日は決まっていないが、今後6か月以内、おそらく3か月以内になると思われる。Eclipse プラグインも同時に更新されます。

  • フラックス単体テストのフレームワーク:

    はい、停滞して放棄されたものではなく、活気があり、進化しており、十分にサポートされているという意味であれば、そうです。ScalaTest、Specs、ScalaCheck は最高品質のフレームワークであり、相互に互換性があり、JUnit や JMock などの他の Java フレームワークやライブラリとも互換性があります。

    実際、テスト フレームワークは、Scala で可能なことのほとんどの子ポスターです。

    編集: Scala には、標準ライブラリ (scala.testing.SUnit) に基本的な単体テストのサポートがあります。ただし、多くの優れた、積極的にサポートされている無料の代替案が登場していることを考えると、これは非推奨となり、Scala 2.8 に同梱されるライブラリには含まれない可能性があります。

  • パフォーマンスの問題:

    他の言語と同様に、ひどいコードを書くことができるという事実を除けば、私は何も知りません。関数型プログラミングに慣れていない人は、末尾再帰を使用しない、リストを連結しないなど、効率的ではないことを行うことがよくありますが、Scala が可能にするパラダイム シフトはそれを明らかにします。

    いずれにせよ、Scala コードは Java コードと同じくらい速く書くことができます (今後の機能を使用するとさらに速くなります)。また、Java コードとほぼ同じ速度で関数機能を備えた Scala コードを作成できます。

率直に言って、別の仕事を得ます。

あなたは何をやっているの不快を感じ、今後3年間を過ごすのであれば、あなたがより魅力的な代替を探して検討すべきです。

あなたは(私はあなたが推測)チームの一部である場合は、その言語を好まないかもしれないが、チームの残りの部分をお好きな言語を取得するために管理している場合でも。で、それらのJavaのコードとあなたの残りの部分は、プログラミング言語「が空白のの中に埋める」場合には、問題が発生する可能性があります。

これは結局それほど悪くはありません。

、あなたの上司と相談し、彼はあなたが感じています方法を知ってみましょう。代替案を探し始めるといいとプロの「休暇」を持っています。

あなたはまだあなたの現在の上司との良好な関係を持つことができない理由はありません。最終的には場合、彼らはあなたが戻ってくるかもしれ.NETの新しいプロジェクトを持っています。また、彼らとそれについて話しています。オープンあなたのドアを残します。

実際にはゼロサム ゲームではありません。すべてを学びましょう。
ps:私はに投票します クロージュア, 、それが一番楽しいと思います!

JVM は、Java に代わる代替プログラミング言語としてますます人気が高まっているため、JVM を使用できるのは幸運だと考える必要があります。

Java以外にも、 グルーヴィー, スカラ座, クロージュア (JVM 上の Lisp 方言)、 JRuby (JVM 上の Ruby)、 ジトン (JVM 上の Python)、 ジャスケル (JVM 上の Haskell)、 ファン (.NET CLR だけでなく JVM 上でも実行されます) など、その他にも多くの機能があります。 OCaml-Java, JVM上で動作するOCaml。

そのため、JVM には、純粋な関数型から単純なスクリプトや高度な OO 言語まで、プログラミング言語の選択肢がたくさんあります。

スカラ座とClojureのための

ツールのサポートは未熟かもしれないが、それは着実に向上しています。

あなたはF#のが好きなので、

、その後、Scalaは最も可能性の高いあなたの最善の策です。私はそれを試してみると自分の意見を形成すると言う - あなたは、人々がについての不満物事はあなたが回避することができ、あなたには関係ないもの、またはものであることを見つけるかもしれません。

jRuby を忘れないでください。また、非 Java では IDE はオプションであることに注意してください。

素晴らしい状況にあると思います。実装言語を選択する許可を得ている人は何人いますか?JVM で利用できるものはすべて揃っているため、環境を選択することはそれほど制限ではありません。

  • あまり冗長でない言語では優れた IDE サポートは必要ありません
  • 型宣言のない Ruby のような強力な言語では、IDE はまったく必要ありません。
  • Scala は、冗長な Java ブルースを治すために特別に開発されました。
  • 3 年間の仕事が予定されているのは幸運だと思ってください :-)
  • Clojure は楽しいかもしれないし、機能的な同時実行安全な設計パターンを提供します

NOOP? http://code.google.com/p/noop/ の(ただし実験)

IDEのサポート、あなたが抱えている他の疑問の点では、Clojureのは、Scalaのよりも良く行いません。そして、(静的FP言語を入力したか、一般的にその厳密で、)ML / F#の背景を持つ人のために、あなたは間違いなくあなたが慣れているものとに非常に近いスカラ座を見つけることができます。

あなたはMLのような場合は、

あなたが好きかもしれません CAL のハスケル98多かれ少なかれありますJVMます。

これは、高品質と非常に安定していない、とEclipseの良いIDEのサポートを持っていますが、悲しいことに積極的な開発の下にはなくなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top