クローズ。この質問は
オフトピックです。現在、回答を受け付けていません。
コメント
エッジ"-現在、大きなルネッサンスを経験している'、主に感謝a)OpenJDKが標準実装になるb)ScalaやClojureなどの新しいJVM言語c)ビッグデータ/クラウドプロジェクトがターゲットプラットフォームとしてJVMを選択することが増えているという事実、およびd)Android。 2012年の初めの時点で、'はおそらく最もエキサイティングなプラットフォームの1つです…..
@mikera:同意しました。これは、OracleがSun Microsystemsを買収した直後の1年以上前のことであり、Javaの将来が、より支配的な企業が支配権を握ることによって危険にさらされることについて心配し、推測することがすべてありました…幸い、JVMは現時点ではかなり安全なようです!
回答
実用的が必要なため 言語:
HaskellとLispは業界で他よりも多く使用されていますが、最近、ClojureとF#に関心が集まっています。
しかし、Schemeをミックスに追加するとどうなるか見てみましょう。
うーん、今はアカデミック言語のようには見えませんか?
実際、上のグラフはおそらく嘘です。「スキーム」という言葉がヘルプに表示されることがあります。プログラミング言語以外のコンテキストで広告が必要でした。:)
ここに、おそらく(少し)より代表的な別のグラフがあります:
Schemeの本当にキックアスな方言を探求したい場合は、ラケット。
コメント
回答
関数型プログラミングを学びたいのであれば、最初にHaskellを学び、次に好きな言語を使うほうがよいかもしれません。他の言語を使用して関数型プログラミングを学ぶことはできますが、それでも命令型のオブジェクト指向コードを使用できます。 Haskellで実際のプログラムを作成すると、他のパラダイムに頼ることができないため、関数型プログラミングをより早く学ぶことができます。
Haskellプログラムを作成すると、モナドやテクニックなどのツールが手に入ります。選択した言語にもたらすポイントフリーコーディングのようなものです。概念はSchemeに特によく対応しているようです。
コメント
回答
実際、Schemeでかなり複雑なシステムを実装できた場合は、次のようになります。あなたがおそらく働きたいと思う会社ではかなり望ましい。私のキャリアの早い段階で、Schemeでかなりの量の作業を行った学生に出くわしました。それが不利だったのは、彼らが自分の作業を説明できないか、基本的なデータを実装するのに十分に理解していなかったときだけでした。構造とアルゴリズムを妥当な時間内に。私は常に候補者に自分の好きな言語でそのような質問に答えさせます。私は、Schemeが得意だと思っていて、簡単なはずのことでかなり苦労している人に出くわしました。リンクされたリストに要素を追加するようなもので、私は不思議に思いました。
しかし、平均的なWebアプリでも十分にSchemeを「取得」できれば、それはせいぜいかなり良いセールスポイントになります。真面目なソフトウェア会社。
「ブラブ」ショップでインタビューをしていて、Scheme、Haskell、F#に習熟しているために開発者が変だと思った場合は、おそらくそこで働きたくないでしょう。ほとんどの場合、有能な開発者がギグを選択できるので、将来想像できる唯一の選択肢が企業である場合を除いて、「実用性」に汗を流さないでください。有能で柔軟性があり、問題を解決するように努めてください。
大学は実用性についてではありません。それは「探索して学ぶための安全な環境を作ることです。それは、あなたが残りのキャリアのために普通のソフトウェアを書くことになったとしても、実際には役に立ちます。
そうは言っても、私はしません」すぐにこれらの選択肢の1つだけに制限したい理由がわかります。約4週間で、4つの言語すべてを簡単に理解し、現在の気まぐれに最適なメッシュに集中するために1つを選択できます。別の選択肢に戻って、似たようなものを実装してみてください。もっと複雑なものに移り、選択肢をもう一度検討してください。実験は良いです。来月生計を立てようとしているのでない限り、そうする必要はありません。まだスペシャリストになります。
私はScheme、F#、Emacs Lisp、Common Lispでいくつかを書き、少なくとも過去数年間に時々、少なくとも少しHaskellを読みました。私はそれらのいずれかの専門家であるとは言えませんが、これらの言語への各エクスカーションは、私が専門的に作業する他のすべての言語(C#、Java、Ruby、場合によってはBoo、Perl、Python)で私に利益をもたらしました。好奇心は、他の何よりも永続的で充実したキャリアを築きます。
コメント
回答
回答
実用的な汎用関数型プログラミング言語が必要であるという観点から、1〜2年前にすべての主要な関数型言語を評価しました。
結局 Clojure を選びましたが、これはその後優れた選択肢であることが証明されました。
大まかに言えば、主な理由は次のとおりです。
-
ライブラリエコシステム-言語を有用にするには、アクセスする必要があります良いライブラリに。 JVMを使用しているということは、最大のオープンソースライブラリとツールエコシステムに簡単にアクセスできることを意味します。したがって、JVM言語を選択することは、実用的な観点からは簡単でした。 Scalaもここで高得点を獲得しました。
-
マクロメタプログラミング-この側面Lispのは、特に私がかなりのコード生成を行うことを期待していたので、常に私にアピールしました。ポール・グレアムの短いエッセイ「平均を破る」でなされた議論に非常に感謝しています。ここでは、さまざまなLispがすべて高得点を記録しました。
-
パフォーマンスは「良好」でした十分」-Clojureは常にコンパイルされ、JVMJITオプティマイザーと優れたGCの利点を活用します。いつものように、関数型言語の使用にはいくらかのオーバーヘッドがありますが、Clojureを使用すると、少しの努力でそれぞれJavaの速度に近づけることができることは明らかでした(ClojureはJavaプリミティブとオプションの静的型付けを必要な状況でサポートします)。私の見積もりでは、Clojureは、最適化されたJavaまたはC ++コードで達成できるよりも2〜5倍遅いと推定されます。これは、欠陥のあるベンチマークに見られるものと一致しています。 、そして時間の経過とともに、そのギャップはさらに狭くなると思います。また、特にパフォーマンスに敏感なコードを純粋なJavaで記述し、Clojureから呼び出すだけでも十分簡単です。
-
同時実行性 -Clojureは、特に高度にマルチコアの同時実行性に対して、非常にユニークで強力な同時実行性アプローチを備えています。説明するのは少し難しいですが、このビデオは、原則を味わうのに最適です。現在、Clojureは、「関数型プログラミング言語で共有、並行、および可変の状態をどのように管理する必要があるか」という難しい質問に対する最良の答えを持っていると思います。
-
言語デザイン -ClojureはIMOであり、非常によく考えられた言語デザインです。例としては、通常のLisp括弧に加えて、ベクトル[]およびマップ{}リテラル、不変の永続データ構造の使用、シーケンス抽象化による言語全体の遅延のサポート、さまざまな問題を解決するためのさまざまな直交機能の提供などがあります。 。 抽象化の芸術とシンプルで簡単なをご覧ください。
-
コミュニティ-常に主観的ですが、Clojureコミュニティで見たものが気に入りました。態度は非常に役に立ち、建設的で実用的でした。多くのClojureの人々(Rich Hickey自身を含む)が複雑なエンタープライズシステムを構築した背景から来ているという事実を反映して、「物事を成し遂げる」という強い強調があります。 ClojureコミュニティがJavaコミュニティにも強力にリンクしているという事実は、Clojureが「ニッチ」に陥るリスクを冒さないことを私に納得させる上で重要でした。
Clojureのマイナーな欠点をいくつか挙げる必要がある場合、次のようになります。
-
動的型付け-多くの場合、これは生産性の点で利点ですが、平均して、これをより強力な型チェックと推論と交換すると思います。ほとんどの場合、これは優れた自動テストスイートを使用することで軽減されますが、コンパイラーによって静的に検証されたタイプが好きな場合は、HaskellまたはScalaがお勧めです。
-
最先端 -Clojureは非常に急速に開発されています。多くの革新が進んでいます-これの欠点は、多くの実験があり、一部のライブラリとツールはまだ未成熟であり、Clojureのメジャーバージョン間で時折、注意が必要な重大な変更があることです。
しかし、全体として、優れた実用的な最新の関数型言語が必要な場合は、Clojureを間違えることはないと思います!
コメント
回答
それ宿題を済ませたように見えるので、おそらくすでにこれを知っていますが、SchemeはCommon Lispと同じようにLispの方言です。Schemeについて多くのことが好きで、その学術的性質が気に入らない場合は、Commonを試してください。舌足らずの発音。 TIOBEインデックスによると、これは26位のSchemeに対して13番目に人気のある言語です。
あなたが使用した言語はほとんどありません。言及されたものは、最近見た仕事の説明に表示されますが、それは私の小さなサンプルセットにすぎないかもしれません。仕事で直接その言語を使用することは期待していませんが、個人的にHaskellを学習します。関数型プログラミングの概念は、言語自体の直接的な市場性よりも、将来のプログラム設計にとって価値があります。
コメント