関数型言語の普及について

このQ&Aのポイント
  • 関数型言語の普及について
  • 関数型言語の魅力とは何か、なぜ普及していないのか
  • 関数型言語と従来の言語の違いと利点
回答を見る
  • ベストアンサー

関数型言語の普及について

関数型言語の普及について 趣味でプログラミングを勉強しているものです。今までにJavaやRuby等、オブジェクト指向言語を中心に勉強してきました。 今日、あるきっかけで関数型言語のHaskellを勉強し始めました。 そして、実際にプログラミングをしてみたり、関数型言語について調べてみると、まだ大きなアプリは書けないものの、今までのやり方(手続き指向、オブジェクト指向)が不要なのではないかと危惧する程の斬新さ、強力さが感じられました。 しかし、そんな関数型言語も未だに普及しているとは到底言えません。Haskellは関数型言語の中でも新しいもののようですが、それでもJava、Rubyよりも昔に発表されている言語です。 どうしてHaskell等の関数型言語は主流になっていないのか、関数型言語が従来の言語に劣っている点を中心に、皆さんの意見を聞かせてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • morchin
  • ベストアンサー率16% (212/1281)
回答No.3

難しいからではないでしょうか? 簡単で性能(パフォーマンス、保守性)が良ければ普及すると思います。開発に求められているのは、安定性、保守性、開発スピードなどだと思いますので、これらに対し効率が良ければ使用されるはずです。 ドキュメントやライブラリは後で充実させていけば良いのです。ある一定の水準に達すれば、実用になると思います。 あとは、資産も重要で、過去に作ったアプリやライブラリがCならC/C++で作るのが良いでしょう。 また、資産という意味では、手続き型の考え方がインプットされているという点も重要だと思います。 但し、開発にリソースを避けられるなど、必ずしも過去にこだわる必要がない場合もありますので、その場合は重要でないかもしれません。 例えば、趣味でフリーソフトを作るという場合は、必ずしも資産が重要でないと思います。 最近は関数型言語が注目されて、書籍やウェブの情報が充実してきているので、徐々に普及すると思いますが、C/C++やPythonレベルには行かないと思います。 また、C++は真面目に考えれば難しいですが、難しいことをしなければ簡単です。 関数型言語が強力と言っても、性能を引き出すのは難しいと思います。Ruby、Python、C#でもある程度関数型言語の機能を取り入れているため、Haskellで書くメリットはなかなか出てこないと思われます。 良いプログラミングをするには、単に書ければ良いのではなく、言語を知り尽くして初めて出来るものだと思います。

その他の回答 (3)

  • morchin
  • ベストアンサー率16% (212/1281)
回答No.4

適用領域が狭いからではないでしょうか? C/C++が普及している = 適用領域が広い Haskellが普及していない = 適用領域が狭い 言語はそれぞれ得意分野を持ちます。不得意分野に対して、その言語で開発しないでしょう。Haskellが得意な分野というのは極端に狭いと思います。

回答No.2

個人的な意見でいいんですか? 1:静的型付けはメンド臭い。 Rubyと敢えて比較すると、単に動的型付けの方がプログラミングがラクだから。 2:スピードが遅い。 まあ、これは良く言われていますね。 3:副作用だらけでも困るけど、副作用が全くない、ってのも困る。 しかもモナドはややこしい。イスラエルの諜報機関もビックリです。 4:プログラマは理系のフリをしてるけど、実際は数学が嫌い。 ......。 参考までに。

ktoss319
質問者

お礼

静的型付けはJavaやC++等、むしろ主流なのではないでしょうか? スピードが遅いというのは知りませんでした。参照透過性によって最適化がしやすいとか 書いてあるのも見かけたのですが、Cより速くなることはあまりないみたいですね。 副作用については確かにそうですね。たかがIOにモナドという仕組みが必要なのは確かに 入門者には難しいです。 プログラマは数学が嫌い、はちょっと同意するところがあります(笑)

  • hoge_piyo
  • ベストアンサー率57% (15/26)
回答No.1

ある意味、いままでの手続き型やオブジェクト指向で今現在は間に合っているからではないでしょうかね。実際の業務で使用するプログラムとなると、やはり信頼性、安定性などがもとめられますし。 実際中身が優れているとしても、今まで使用している言語で、ある程度の水準のものが作成できるなら、無理に変化をもとめて新しい言語を使おうとは思わないからではないでしょうか。 あとは言語の普及には、単にその言語が優れているだけではなく、ドキュメントが整備されていたり、ライブラリが充実していたりなど、色々な要因が関係していますし。

ktoss319
質問者

お礼

早速の回答有り難うございます。 > 手続き型やオブジェクト指向で今現在は間に合っているから Haskellが新しい言語であれば僕もそう思います。 しかし、Haskellはかなり昔からある言語ですし、関数型の概念はさらにその昔からあるようです。やはり関数型に明白な欠点(関数型の考え方が人の思考に合わなしていたり等)があるから、普及していないのだと思えるのです。 > ドキュメントが整備されていたり、ライブラリが充実していたりなど 確かにそうですね。しかし、僕の好きなRubyという言語は後発ということもあり、10年ほど前はかなりドキュメント、ライブラリ共に貧弱だったようです。それが今では少しずつ大きくなってきたコミュニティによって整備されてきたために、使いやすくなっています。 なので、もし良い言語であればライブラリもドキュメントもおのずと整備されていくのだと思っています。

関連するQ&A

  • プログラミング言語の質問です

    プログラミング言語の質問です プログラミング言語を今から勉強しようと思います。 そこで、オブジェクト指向の言語として(というより、今の社会で役立つ言語として)習うべきなのはどの言語でしょうか? 私は候補として、javaとC++を知っていますが、どう違うのかは分かりません。 どちらもCからの派生みたいなことは知っています。 そこで、javaとC++を比較して (1)どう違うのでしょうか?(できることの違い) (2)どちらの方がより優れていると思いますか? 今のところjavaとC++を考えていますが、他の言語の方が良いなら教えてください。 その他、プログラミング言語に関して知っておいたほうが良いことがあれば、 ぜひ教えてください。 回答よろしくお願いします。

  • プログラミング言語の質問です。

    プログラミング言語の質問です。 プログラミング言語を今から勉強しようと思います。 そこで、オブジェクト指向の言語として(というより、今の社会で役立つ言語として)習うべきなのはどの言語でしょうか? 私は候補として、javaとC++を知っていますが、どう違うのかは分かりません。 どちらもCからの派生みたいなことは知っています。 そこで、javaとC++を比較して (1)どう違うのでしょうか?(できることの違い) (2)どちらの方がより優れていると思いますか? 今のところjavaとC++を考えていますが、他の言語の方が良いなら教えてください。 その他、プログラミング言語に関して知っておいたほうが良いことがあれば、 ぜひ教えてください。 回答よろしくお願いします。

  • 関数型言語を独学で勉強している学生です

    情報系の大学3年生です。 僕は関数型言語に興味がありhaskellやlispを勉強しています。 しかしこれらの言語で何か作るのは結構しんどいと思います。 ぶっちゃけ、javaとかrubyとかpythonの方が作りやすいでしょう。 haskellは出力するにも一苦労だしlispはリストが面倒。 関数型言語は実用的だとは思えません。 しかし、楽しいです。 どう表現すればいいかわかりませんが、とにかく関数型言語は面白いです。 そこで質問です。 昨今のIT企業は新卒採用の際、学生時代に作ったプログラムを評価し採用の是非を決めると思います。 もし関数型言語で何か作っても評価されるのでしょうか。 僕ができることといえば、本やサイトに載ってあるサンプルを少し改良するぐらいです。 そんな作品を企業側が積極的に評価し、採用してくれるでしょうか。 それともこんな浮世離れしたことやるよりrubyとかpythonで奇抜なアイデアのプログラムを組んで、twitterやブログで奇を衒っていかにもギークっぽく振舞ったほうがいいんでしょうか。 文章がめちゃくちゃですみません。 とにかく僕はこのまま今の勉強を続けてもいいのか、それがわからないんです。 自分で考えるべきことでしょうが、調べるばかりで頭が混乱して日常生活に支障がでてきてます。 誰がアドバイスください。 よろしくおねがいします。

  • オブジェクト指向が先?言語が先?

    これからプログラミングを勉強するとして、オブジェクト指向の本と言語の本があるとすれば、どちらを先に読むべきなんでしょうか? オブジェクト指向って考え方ですよね? どんな分野も考え方の部分って、やる前に教わるより、ある程度経験を積んでからの方が理解できることが多いと思います。 となると、プログラミングもまずは言語を覚えて、ある程度いろいろ作れるようになってからオブジェクト指向に手を出した方が良いんでしょうか? それともオブジェクト指向を勉強してからの方が、言語を理解しやすくなったりするのでしょうか? そもそも個人が趣味レベルでプログラムをするのに、オブジェクト指向って必要なんでしょうか?

  • 初めて関数型言語を学ぶとしたら、どの言語がお奨めですか?

    初めて関数型言語を学ぶとしたら、どの言語がお奨めですか? JavaScriptをやっていて、関数型言語に興味を持ちました。 いままで、勉強した言語はC < Java < Python < JavaScriptです。(右側の方が比重・興味が大きい) 現在、Web系志望の学生なので、その辺を踏まえてアドバイスいただけると助かります。 今のところ興味を持ってるのは、Common Lisp/Haskellあたりです。 よろしくお願いします。

  • lispとその他関数型言語について

    「lispを学べば悟りが開ける」という言葉をよく聞きます。 l他のプログラミング言語哲学とは一線を画すほどの教示をもった言語という印象を持ちます。 僕もlispを少し学んだだけですが「悟り」は開けませんでした。 しかし他の関数型言語(haskellとか)ではそういう話は聞きません。 なぜでしょうか。 やっぱ括弧ですか。

  • 独学で素人がRubyprogrammingを勉強

    どうも、はじめまして。 今、独学でオブジェクト指向プログラミング言語のRubyを勉強しています。 えー、プログラミングの知識ははっきりいってド素人といってもいい程です。 そこで有識者の方がいらっしゃいましたら、どうか教えて頂きたいのですが ビギナー向けの参考書など、お勧めはございませんか? これは分かり易かったとか、あればなんでも結構です。 あと、この知識が活かせるような資格やビジネスはありますか? どんな情報でもけっこうなんでよろしくおねがいします。

    • ベストアンサー
    • Ruby
  • 定義済み関数を用途別に逆引きしたい

    ボクはプログラミングに関してほぼ初心者で、 プログラミングの基礎はC言語だと聞いたので、C言語の入門本に取り掛かり変数や構造体や関数などの概念を学んだ上で、既存のウィンドウズ付属の定義済み関数を組み合わせてプログラミングしてみようと思ったのですが、一つの疑問が浮かび上がりました。 「定義済み関数を使うには、その関数を知っていることが前提条件なのか?それらは用途や目的など何らかの形で分類されていなくて、ただ漠然と並べられているのか?ボクはいくつ関数を覚えればいいんだ…?orz」という疑問です。 質問する前にボクなりに調べましたが、もしかしてこの「関数を用途や目的等別で分類する」とはオブジェクト指向の「クラス」にあたるのでしょうか?だとすれば、次にボクはオブジェクト指向のプログラミングを学ぶべきでしょうか?

  • オブジェクト指向の特徴

    プログラミングにおいて Java言語などのオブジェクト指向とは 「クラス(設計図)からインスタンス(実体)を量産できる。」がオブジェクト指向ではないプログラミング言語との決定的な違いなのでしょうか? またオブジェクト指向とオブジェクト指向ではない言語の決定的な違いや 実際に実務において経験した感覚的な違いなどがあれば教えてください。 インターネットに乗っていない些細なことでも構いません。

    • ベストアンサー
    • Java
  • オブジェクト指向のプログラミング言語の勉強法について

    オブジェクト指向のプログラミング言語の勉強法について お尋ねします。 iPhoneアプリを作ってみたいと思い、最近プログラミングの勉強を始め、C言語の入門書を一通り熟読しました。そして、次にオブジェクト指向の言語を勉強しようと思っているのですが、iPhoneアプリの開発に用いる言語は「Objective-C」で、他にも開発に使用できる言語として、「C++」や「Java」などいくつかあると聞き、どれから勉強すればいいのか迷っています。 Objective-CとC++やJavaでは、技術的(表現力?)に大きな差はあるのでしょうか?それとも、Objective-Cだけでも十分なのでしょうか? そのほか、まだC言語を勉強したばかりでわからないことが多いのですが、ゲームアプリの開発にどのような知識が必要なのか、また効率のよい学習順序、お勧めの書籍など助言を頂ければ幸いです(__) ちなみに、 ・プログラミングの経験は全くありません。 ・はじめはシューティングなど動的なゲームアプリを作ろうと思っています。 ・妥協せず、基礎からきちんと勉強したいと思っています。

専門家に質問してみよう