アカウント名:
パスワード:
大学で、関数型言語の研究をしている方と話す機会があったとき、「関数型言語が優れていることは分かった。が、関数型言語みたいな厄介な言語を、君らみたいなコンピュータサイエンスをがっつり学んだ人でなく、そこらへんの人に使うことなんてできるのか」といったようなことを聞いてみたのですが。
そしたら「今の関数型言語が素人に向いていないのは、関数型言語そのものの本質的な欠点じゃなく、アカデミックに近い人向けの使い勝手の悪い言語しか作られていないからだ。Rubyのような、使い勝手重視の関数型言語が必要」らしいです。
まさに、designerが作った言語が必要、とのことです。
その方が、関数型言語を知り尽くしている故にそのように感じるのか、頭がよすぎる故に関数型言語の難しさが分からないのか、難しいところではありますが。Ruby, Python, Scalaなどの言語にも関数型の機能は一部取り入れられているし、マルチスレッドとも相性いいらしいし、もしかしたらいずれ、使いやすい関数型言語というものが現れて、他の人気言語と肩を並べるなんてこともあるのかな、と思ったり思わなかったり。
業務系のプログラムを見てきた経験によると, ボリュームゾーンのプログラマは関数の概念を理解していません. 手続き型言語での関数については, いわゆる関数ではなく, 言語に備わった命令として理解しています. おそらくは, 関数に代表される, 操作やデータの抽象化という所に大きな壁があるのだと思われます.
ですから言語としての出来・不出来とは関係なく, コピペと置換のみでプログラム構築が可能でない限り, 広く使われることはないでしょう.
そしてそういったコードは品質悪く保守しづらいので今のボリュームゾーンのプログラマを全員切っても生産性が変わらないような開発手法(あえて言語に限定しない)が求められてるのかなぁ、と割と思います。
誰でも出きるようにというより、個人の品質と生産性を最大化するような方向。
関数型言語、特に純粋で遅延評価なものは数学のセンスを要求しますので、今より普及するでしょうが万人向けになることはないでしょう。ある教員によると「プログラミング入門コースでは、再帰と高階関数で1/3ずつくらい脱落して、継続や遅延評価になると大半が脱落する」らしいです。もっともその後でそれなりに身につけるわけですが。
Schemeでいいんじゃね?という意見も出ていますが、SchemeはHaskellよりはるかにCに近いですので、いくはないです。
おそらく、重要なのは「言語仕様の使いやすさ」ではなく、「言語の使いやすさ」でしょう。Haskell が威力を発揮するのは、おそらくメタプログラミングとかでしょうが、そんなのを必要とする場面というのは、めったにない。なので、blockやProcやlambdaやmethod を使い分けないといけなくて困ることなんて、ほとんどない。
普通のことが普通に(見慣れた構文で)書けて、それでいてちょっときれいに書ける気がして、その一方でダーティな書き方も許してもらえる。その辺のころあいをうまくとるのが、designer と言っているゆえん。
一般に原理主義に走ると、だいたい使いにくくなる。例えば pure LISP とか。
私はHaskellerとしてはまだ駆け出しですが、今のところ同じ感想を抱いています。演算子の表現として採用している文字が、数式という見慣れたものを比較的見慣れた形で記述出来るように選ばれているようなので、先入観の無い人にとっては他の言語より書きやすいのでは?とすら思います。
自分はTDDは好きでは無いのですが(正しさについていいとこ取りをしているだけにしか見えない)、テストしやすい様にアプリケーションプログラムを作るのは良いと思います。
そうすると、・変数はパブリックの方がテストしやすい。・無名関数なんてもってのほか・至る所にデバック用のログ出力を置きたいので、イテレータなんか嫌・RDBは組み込みで接続できた方が、不具合箇所が減る・制御を軸としないで、HTMLストリームを軸として見た方がテストが楽・抽象化もテストの天敵となります。
あっ。よく見るとPHPではないか!
> その辺のころあいをうまくとるのが、designer と言っているゆえん。
本人のブログにはdesignerなんて言葉は出てこないんだが…なんでみんな思い込みで書く
> 一般に原理主義に走ると、だいたい使いにくくなる。> 例えば pure LISP とか。
なるほど君はpure lispを実用プログラミングに用いた経験があるのか学問や産業どころか、趣味のプログラマですらないワナビーなんじゃないの?
おまえは誰と戦ってるんだ?
使い勝手重視の関数型言語
変数があったりループがあったり…って、それってSchemeでいいんじゃね?
こういう人は大体がカッコつけすぎなんですよ
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
日々是ハック也 -- あるハードコアバイナリアン
関数型言語の時代はくるのか (スコア:4, 興味深い)
大学で、関数型言語の研究をしている方と話す機会があったとき、
「関数型言語が優れていることは分かった。が、関数型言語みたいな厄介な言語を、君らみたいなコンピュータサイエンスをがっつり学んだ人でなく、そこらへんの人に使うことなんてできるのか」といったようなことを聞いてみたのですが。
そしたら「今の関数型言語が素人に向いていないのは、関数型言語そのものの本質的な欠点じゃなく、アカデミックに近い人向けの使い勝手の悪い言語しか作られていないからだ。Rubyのような、使い勝手重視の関数型言語が必要」らしいです。
まさに、designerが作った言語が必要、とのことです。
その方が、関数型言語を知り尽くしている故にそのように感じるのか、頭がよすぎる故に関数型言語の難しさが分からないのか、難しいところではありますが。
Ruby, Python, Scalaなどの言語にも関数型の機能は一部取り入れられているし、マルチスレッドとも相性いいらしいし、もしかしたらいずれ、使いやすい関数型言語というものが現れて、他の人気言語と肩を並べるなんてこともあるのかな、と思ったり思わなかったり。
1を聞いて0を知れ!
Re:関数型言語の時代はくるのか (スコア:3, 参考になる)
業務系のプログラムを見てきた経験によると, ボリュームゾーンのプログラマは関数の概念を理解していません. 手続き型言語での関数については, いわゆる関数ではなく, 言語に備わった命令として理解しています. おそらくは, 関数に代表される, 操作やデータの抽象化という所に大きな壁があるのだと思われます.
ですから言語としての出来・不出来とは関係なく, コピペと置換のみでプログラム構築が可能でない限り, 広く使われることはないでしょう.
Re: (スコア:0)
そしてそういったコードは品質悪く保守しづらいので
今のボリュームゾーンのプログラマを全員切っても生産性が変わらないような
開発手法(あえて言語に限定しない)が求められてるのかなぁ、と
割と思います。
誰でも出きるようにというより、個人の品質と生産性を最大化するような方向。
Re:関数型言語の時代はくるのか (スコア:2, 興味深い)
関数型言語、特に純粋で遅延評価なものは数学のセンスを要求しますので、今より普及するでしょうが万人向けになることはないでしょう。
ある教員によると「プログラミング入門コースでは、再帰と高階関数で1/3ずつくらい脱落して、継続や遅延評価になると大半が脱落する」らしいです。
もっともその後でそれなりに身につけるわけですが。
Schemeでいいんじゃね?という意見も出ていますが、SchemeはHaskellよりはるかにCに近いですので、いくはないです。
Re:関数型言語の時代はくるのか (スコア:2)
言語仕様の使いやすさでいえば、すでに Haskell は既存の言語をはるかに上回ると自分は考えています。 たとえば Ruby が使いやすいという人は、イテレータ(笑)があるからとか、すべてがオブジェクトである(もちろん嘘)からとか、楽しい(具体的にどこ?)からとか、よくわからない理由ばかり挙げているように思います。block と Proc と lambda と method を使い分けなければならない言語のどこが使いやすいのか、理解に苦しみます。関数型が流行らない理由は使い勝手ではないように思います。
>もしかしたらいずれ、使いやすい関数型言語というものが現れて、他の人気言語と肩を並べるなんてこともあるのかな、と思ったり思わなかったり。
F# が出た時に、これが流行らなかったら関数型はもう流行ることはないだろうな、と思いましたがやっぱり流行らなかった……。残念です。
Re:関数型言語の時代はくるのか (スコア:1)
おそらく、重要なのは「言語仕様の使いやすさ」ではなく、「言語の使いやすさ」でしょう。
Haskell が威力を発揮するのは、おそらくメタプログラミングとかでしょうが、そんなのを必要とする場面というのは、めったにない。
なので、blockやProcやlambdaやmethod を使い分けないといけなくて困ることなんて、ほとんどない。
普通のことが普通に(見慣れた構文で)書けて、それでいてちょっときれいに書ける気がして、その一方でダーティな書き方も許してもらえる。
その辺のころあいをうまくとるのが、designer と言っているゆえん。
一般に原理主義に走ると、だいたい使いにくくなる。
例えば pure LISP とか。
Re:関数型言語の時代はくるのか (スコア:2)
ちなみに、潔癖で知られる Haskell にも使い勝手のために取り込んだダーティな部分はたくさんあります。例えば数学の漸化式 f(n+1) = f(n) + k みたいに書くための n+1 パターン(ダーティすぎて最新版で廃止)。ありがちな定義を自動で補完する deriving やフィールドラベル。数学の集合っぽく書くためだけのリスト内包表記。実は関数型言語も使い勝手のために "designer" による工夫は結構してるんですよ。
Re: (スコア:0)
私はHaskellerとしてはまだ駆け出しですが、今のところ同じ感想を抱いています。
演算子の表現として採用している文字が、数式という見慣れたものを比較的見慣れた形で記述出来るように選ばれているようなので、先入観の無い人にとっては他の言語より書きやすいのでは?とすら思います。
Re:関数型言語の時代はくるのか (スコア:1)
自分はTDDは好きでは無いのですが(正しさについていいとこ取りを
しているだけにしか見えない)、テストしやすい様にアプリケーション
プログラムを作るのは良いと思います。
そうすると、
・変数はパブリックの方がテストしやすい。
・無名関数なんてもってのほか
・至る所にデバック用のログ出力を置きたいので、イテレータなんか嫌
・RDBは組み込みで接続できた方が、不具合箇所が減る
・制御を軸としないで、HTMLストリームを軸として見た方がテストが楽
・抽象化もテストの天敵
となります。
あっ。よく見るとPHPではないか!
Re: (スコア:0)
> その辺のころあいをうまくとるのが、designer と言っているゆえん。
本人のブログにはdesignerなんて言葉は出てこないんだが…なんでみんな思い込みで書く
> 一般に原理主義に走ると、だいたい使いにくくなる。
> 例えば pure LISP とか。
なるほど君はpure lispを実用プログラミングに用いた経験があるのか
学問や産業どころか、趣味のプログラマですらないワナビーなんじゃないの?
Re: (スコア:0)
おまえは誰と戦ってるんだ?
Re: (スコア:0)
使い勝手重視の関数型言語
変数があったりループがあったり…って、それってSchemeでいいんじゃね?
Re: (スコア:0)
こういう人は大体がカッコつけすぎなんですよ