OCamlをすでに知っている場合、HaskellまたはF#を学ぶ必要がありますか? [閉まっている]

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

質問

OCamlの学習を続けるべきか、F#またはHaskellに切り替えるべきか迷っています。

私が最も興味を持っている基準は次のとおりです。

  • 長寿

    • どの言語が長持ちしますか?ユーザーや開発者によって数年で見捨てられるかもしれない何かを学びたくありません。
    • Microsoft、グラスゴー大学のInriaは、長期にわたってそれぞれのコンパイラを引き続きサポートしますか?
  • 実用性

    • this Haskellの使用を恐れさせてください。ハッシュテーブルは、高速検索に最適な構造です。そこのHaskell支持者は、バイナリツリーであるData.Mapの使用を提案しています。
    • メリットが大きくない限り、かさばる.NETフレームワークに縛られるのは好きではありません。
    • パーサーや数学プログラム以上のものを開発したい。
  • よく設計された

    • 言語が一貫しているのが好きです。

記事からの論理的議論と引用であなたの意見を支持してください。ありがとう。

役に立ちましたか?

解決

  

長寿

  • Haskellは、機能プログラミング研究の主要な言語である事実上のです。 Haskell 98は安定した形でさらに何年も続き、Haskellと呼ばれるものは10〜30年続くことがありますが、言語は進化し続けます。コミュニティはHaskellに大規模な投資を行っており、主要なGHC開発者が明日バス(有名な「ケンブリッジでのバスエラー」の問題)に見舞われたとしても、プレートに踏み込むことができる他の多くの人がいます。他にも、それほど複雑ではないコンパイラがあります。

  • Camlは、フランス国立研究所INRIAの小グループによって管理されています。彼らはまた、かなりの投資があり、他の人もCamlに投資されており、コードはオープンソースであり、コンパイラはあまり複雑ではないので、あまりにも長い間維持されます。 INRIAの人々は新しい言語のアイデアを探索する手段としてCamlを使用していないように見えるため、CamlはHaskellよりもはるかに安定すると予測しています(少なくとも、以前よりも少ない速度でそうしています)。

  • 会社が何をするかを知っているのは誰ですか? F#が成功すれば、Microsoftは20年間サポートできます。成功しなかった場合、2012年に彼らはプラグを抜く可能性があります。推測も試行もできません。

  

実用性

     
    

ハッシュテーブルは、高速検索に最適な構造です。そこのHaskellの支持者は、バイナリツリーであるData.Mapの使用を提案しています。

  

検索対象によって異なります。キーが文字列の場合、多くの場合、 3次検索ツリーはハッシュテーブルよりも高速です。キーが整数の場合、OkasakiとGillのバイナリパトリシアツリーはハッシュと競合します。本当にしたい場合は、IOモナドを使用してHaskellでハッシュテーブルを作成できますが、必要になることはまれです。

遅延評価には常にパフォーマンスの低下が生じると思います。しかし、「実用的」 「できるだけ早く」と同じではありません。パフォーマンスについては次のとおりです。

  • Camlプログラムの時間と空間の動作を予測するのが最も簡単です。

  • F#は真ん中にいます(.NETとJITが何をするのか、誰が本当に知っているのでしょうか?)。

  • Haskellプログラムの時間と空間の挙動を予測することは最も困難です。

  • Haskellには最高のプロファイリングツールがあり、長期的にはこれが最高のパフォーマンスをもたらします。

  

パーサーや数学プログラム以上のものを開発できるようにしたい。

Haskellで可能なことの範囲については、 xmonad ウィンドウマネージャーとパッケージの膨大な配列 < code> hackage.haskell.org

  

メリットが大きくない限り、かさばる.NETフレームワークに縛られるのは好きではありません。

コメントできません:

  

よく設計された

     
    

言語の一貫性が必要です。

  

一貫性を評価するいくつかのポイント:

  • Haskellの具体的な構文は非常によく設計されています。 Haskell委員会の素晴らしい仕事に絶えず感銘を受けています。 OCaml構文は問題ありませんが、比較すると問題があります。 F#はCamlコア構文から始まり、多くの類似点があります。

  • HaskellとOCamlはどちらも演算子のオーバーロードについて非常に一貫したストーリーを持っています。 Haskellには、自分で拡張できる一貫した強力なメカニズムがあります。 OCamlにはオーバーロードがありません

他のヒント

  

OCamlを知っているなら、F#またはHaskellを学ぶべきですか?

答えは確かにイエスだと思います。理想的には、3つの言語すべてを学習する必要があります。それぞれが提供するものがあるため、F#のみが重要な未来を持っているため、1つの言語しか実行できない場合は、F#私の Visual F#2010 for Technical Computingの本または F#.NET Journal

長寿

Microsoftは、4月にVisual Studio 2010の一部としてF#をリリースしたときに、F#のサポートに取り組んでいます。そのため、F#には少なくとも数年間はバラ色の未来が保証されています。 F#は、高性能ネイティブコードREPL、.NET 4に組み込まれた並列処理の高レベルコンストラクト、および生産品質のIDEモードなど、実質的に重要な機能の強力な組み合わせにより、 long 現在、現実世界での適用性の点で、他の関数型プログラミング言語をはるかに超えています。率直に言って、近い将来F#と競合できるものに取り組んでいる人は誰もいません。私自身のオープンソース HLVM プロジェクトはそうしようとしていますが、準備ができました。

対照的に、OCamlとHaskellは非常に非生産的な方向で開発されています。これは現在、数年前からOCamlを殺し続けており、Haskellが今後数年にわたって追随することを期待しています。以前のプロのOCamlおよびHaskellプログラマーのほとんどはすでにF#(例:Credit Suisse、Flying Frog Consultancy)に移行しており、残りのほとんどは間違いなく近い将来ClojureやScalaなどのより実用的な代替手段に移行するでしょう。

具体的には、OCamlのQPLライセンスにより、増大する基本設計上の欠陥(32ビットマシンでの16Mb文字列と配列の制限、共有メモリ並列処理、値型、型消去によるパラメトリックポリモーフィズム、解釈されたREPL) 、面倒なFFIなど)、オリジナルのパッチの形で派生物をのみ配布する必要があり、Debianパッケージメンテナは代替のアップストリームの承認を拒否するためです。 OCaml 3.12のファーストクラスモジュールなど、言語に追加されている新機能は、マルチコア機能ほど価値がありません。

OCamlを保存するためにいくつかのプロジェクトが開始されましたが、手遅れであることが判明しました。 パラレルGC は実質的に役に立たず、David Tellerは batteries included プロジェクト(カットダウン形式でピックアップおよびリリースされていますが)。その結果、OCamlは最も人気のある機能言語からなくなっています。 2007年にに大幅に減少し、 caml- 2007年以来50%以上のトラフィックをリストアップ

HaskellはOCamlよりも工業ユーザーが少なく、マルチコアをサポートしていますが、まだ非常に非生産的な方向で開発されています。 Haskellは、ほぼ完全に、ケンブリッジ(英国)のMicrosoft Researchの2人によって開発されています。純粋に関数型のプログラミングは設計上のパフォーマンスに悪いという事実にもかかわらず、彼らは大量の不要なコピーがメモリ壁にぶつかり、スケーラブルな並列性の希望を破壊するとき、マルチコア向けの並列Haskellのソリューションを開発しようとし続けていますマルチコア。

これは基準の1つではありませんでしたが、ジョブの可用性を考慮しましたか? Haskellは現在144件のジョブをリストしています。Ocamlリスト12とC#リスト26,000です。これらの数字は完璧ではありませんが、F#が出荷されると、雇用リストの数がHaskellとOcamlを超えてしまうのはもうすぐではないでしょう。

これまでのところ、Visual Studioに含まれるすべてのプログラミング言語には、数千のジョブリストがあります。関数型プログラミング言語を日々の仕事として使用する最高の機会が欲しいなら、F#がすぐにそれになるでしょう。

  

長寿

将来を予測することはできませんが、

  • OCamlとHaskellは何年もうまく機能しており、これは彼らの将来にとって良い兆候です
  • F#がVS2010に同梱されると、MSはそれを少なくとも5年間サポートする法的義務を負うことになります
  

実用性

Perf:Haskellの直接的な経験は十分ではありませんが、中古およびサードハンドの情報に基づいて、OCamlまたはF#はより実用的だと思います。 Haskellでは、F#のOCamlで実行するのと同じ実行時パフォーマンスを取得できます。

ライブラリ:.Net Frameworkへの簡単なアクセスは、F#の大きな利点です。 「このかさばるものに縛られている」と見ることができます。必要であれば、「信じられないほど便利なものの巨大でかさばるライブラリにアクセスできる」ことを忘れないでください。 .Netへの「接続性」は、F#の大きなセールスポイントの1つです。 F#はより若いため、サードパーティのライブラリが少なくなっていますが、すでに FsCheck FParsec 偽物、およびその他多数ライブラリへの追加&quot; in the box&quot; .Netで。

ツール:比較するのに十分な個人的な経験はありませんが、F#とのVSの統合は、現在OCaml / Haskellで見つけることができるものよりも優れていると思います(そして、F#は今後も少し改善し続けます)年)。

変更: F#はVS2010でサポートされる最初のリリースに近づいているため、まだ変更されているため、近い将来に耐えなければならない言語/ライブラリにいくつかの重大な変更があります。

  

よく設計された

Haskellは間違いなく美しく、一貫しています。私は十分なOCamlを知りませんが、私の考えでは同様に魅力的です。 F#はそれらのどちらよりも「大きい」と思います。これは、より埃っぽいコーナーと矛盾(主にFPと.Netの間のインピーダンスの不一致を仲介した結果として)を意味しますが、全体的なF#はまだ私にとって「きれい」だと感じています存在する矛盾は、少なくとも十分な理由/意図があります。

  

全体

私の意見では、これら3つの言語のいずれかを熟知していれば「良い形」になります。あなたがそれを使用したい大きな長期プロジェクトを知っている場合、目立つかもしれませんが、スキルの多くは移転可能であると思います(Haskellとの間でよりもF#とOCamlの間でより簡単ですが、これら3つのうち、たとえばJavaを使用した場合)。

その質問に対する簡単な答えはありませんが、考慮すべきことがいくつかあります:

HaskellとOCamlは両方とも強力な実装を備えた成熟した言語です。実際には、Haskellには複数の優れた実装がありますが、それがあなたの目的に有利な主なポイントだとは思いません。

F#はずっと若いので、Microsoftがそれを採用する場所を誰が予測できるでしょうか?あなたがそれについてどう感じるかは、誰もがプログラミング言語についてあなたに伝えることができるものよりも、Microsoftについてどのように感じるかに依存します。

OCaml(または一般的にML)は、不快な方法で作業を強いることなく、クールで機能的な作業をサポートする実用的な言語選択です。代数的データ型、パターンマッチング、型推論、他のすべての人の好きなものなどを最大限に活用できます。ああ、そしてオブジェクト。

Haskellはすべてを提供しますが(オブジェクトを除き、ほとんど)、プログラミングについて知っていると思うすべてを再考することを強要します。あなたが何か新しいことを学びたいなら、これは非常に良いことかもしれませんが、それはあなたが噛みたくなる以上のものかもしれません。これは、生産的で幸せなHaskellプログラマーになるための道の途中にいる人だと言っています。

OCamlとHaskellはどちらも、コンパイラやAIなどだけでなく、さまざまな種類のプログラムを作成するために使用されています。 Googleはあなたの友達です。

最後の注意点:OCamlはハッシュテーブルを提供しますが、本当に関数型プログラミングを採用したい場合、コードで使用するのは賢明ではありません。永続的なツリー(Data.Mapなど)は実際にはHaskellに適したソリューションであり、多くの優れたプロパティを持っています。これは、Haskellを習得するときに学ぶべきクールなものの1つです。

F#とOCamlは構文が非常に似ていますが、明らかに、.NETではF#の方が優れています。

学習または使用するものは、目的のプラットフォームに依存する必要があります。

VS2010 F#に含まれる予定であり、.NETバイトコードにコンパイルされるため、使用した.NETバージョンをサポートするWindows OSで使用できます。これにより大きな領域が得られますが、OCamlにはないF#には現在制限があります。F#はマシン上のすべてのプロセッサを利用していないように見えますが、それはおそらくF#がまだ開発中であるためです、これはまだ重要ではない機能です。

Erlangのような他の関数型言語を見ることができますが、基本的に、あるFP言語が得意であれば、別のFP言語をすぐに選択できるはずなので、好きな言語を選択してくださいその中で興味深く、やりがいのあるアプリケーションを開発してみてください。

やがて言語のライターは、OO言語をマルチコアでうまく動作させる方法を見つけ、FPが再び脇道に落ちるかもしれませんが、それはすぐには起こらないようです。

これは、F#を学習するかどうかに関するOPの質問に直接関連するのではなく、金融セクターでの実際のOCamlの使用例です。 http://ocaml.janestreet.com/?q=node/61

非常に興味深い話。

寿命に関しては、言語の人気を判断することは非常に困難ですが、ここで簡単に確認するだけで、これらは適切な(機能的な)言語でタグ付けされた質問の数です:-

2672 Scala、 1936ハスケル、 1674 F#、 1126 Clojure、  709スキーム、  332 OCaml

これは、現在人々がどの言語を積極的に学習しているのかを示す良い指標であり、したがって、今後数年間でどの言語が普及するかを示す良い指標になると思います。

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