BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース 現実世界のアプリケーションでHaskellを学習価値があるようにさせるもの

現実世界のアプリケーションでHaskellを学習価値があるようにさせるもの

Real World Haskell(リンク)のオンラインプレビューにおよそ750人がコメントを残した。その共著者の一人John Goerzen氏がO’Reillyへの最近のインタビューで説明しているとおり、その書籍は、ビジネス環境で使用できるように実コード、実例およびコツを盛り込みながら、Haskellを紹介している。 そのインタビューで、Goerzen氏はこの言語がなぜ学ぶ価値があるのか(リンク)を説明している。その特異性への洞察を述べ、リラクタンスの原因になりそうな問題のいくつかに対処している。

John Goerzen氏は、Haskellは基本の再学習が必要であり、命令および/またはオブジェクト指向プログラミング出身の人びとに対する最大の気持ちの転換として、purityや lazinessを特定することを認めている。

Haskellでは「ひょっとしたら現状を変えることができることは、しっかりと孤立している」そして「タイプシステムと印が付けられている」ことを強調している。これは、実装のバグを回避するのに役立つ。コードの不純エレメントが静的に型付けされ、エラーがコンパイル時に特定されるからである。この点については、HaskellがPythonのような言語と差別化されている。purityはたとえば、QuickCheckなどを通じてテストを促進する。プログラムが、多くのちょっとした機能が結びついて構成されている場合は特にそうである。

Haskellに関する別の主な概念は、lazinessである。「lazinessが現実世界のプログラムのどこで役立つのか?」と尋ねたら、John Goerzen氏は、I/Oとの関連を強調した。

Haskellでフィルタやパーサーを記述する場合、行ごとのやブロックごとの入力を読み取ることについて細かく気を揉む必要はない。 getContentsを使って、全機能をつなぎ合わせることができるからである。HaskellでUnixフィルタを記述するのが好きである。

入力でlazinessがあると、出力でlazinessが出る。なぜなら、何かを記入するしても、それがすぐさま評価される必要はないからである。

結局非常に単純な設計のプログラムとなって終わる。なぜなら、行を介してバッファリングやイテレーションを処理する必要がないからである。

またJohn Goerzen氏は、パターンの適合によって実現される、表現性という観点から見たHaskellのメリットについて、また簡潔であるが読み取り可能なやり方で、機能が表現することができることが、問題を提示し「そのロジックについて推論すること」が簡単になることを話している。さらに、インタビュアーによって強調されたように「機能や言葉の語彙を強化し、その語彙の言語でソリューションを記述することができる」。特にHaskellは「Perlがストリングを操作するほど簡単に、機能を操作する」とGoerzen氏は言う。

しかしながら、この言語のいくつかの機能は、命令および/またはオブジェクト指向プログラミング出身の人びとにとって、リラクタンスの原因になる場合がある。たとえば、再帰的方法は「やや恐ろしい」。Cのような言語では「変数のインクリメントがかなりちんけな操作」だからだ。それにもかかわらず、 Goerzen氏は「高位言語はCほど高速にならない傾向にある」けれども、反復からイテレーションに書き換えるGHCコンパイラは「反復の観点で表現したものをCPUにとってかなり効率的な形式に最適化するのに非常に有効である」ことを主張している。

またlazinessは「型や純度について推論できることや、時間や空間の複雑性について推論できないこと」を交換すると、信じることができる。John Goerzen氏は、それを概念的にとらえている。

即座にファイル全体を読もうとし、それから処理をする言語のプログラムを見ているかのようである。ファイルを開き、読み出しを呼び出せば、好みに応じてファイル全体をメモリに読み出すことが可能である。100K程度のファイルしか扱わないのだろうと思いながら、これをする人もいるかもしれない。2ギガのファイルを処理しようとしたら、そのアプローチはまったく動作しない。

この経験に基づき、John氏は、Haskell IOシステムはお粗末で、習得が困難であるという信念に反論している。氏によると、Haskellでおそらくもっとも恐ろしいのはモナドであるが、「モナドやその動作によってひどく邪魔されることなく、IOを処理する完璧なHaskellプログラムを記述することができる」ことを強調している。IOモナドを使用するために、モナドを理解する必要はないが、それを「純と不純なコードを区別するこの種のボックス」として見ることができる。

もっと一般的に言えば、John Goerzen氏は「Haskellで呼び出されることに関し学習曲線が多少あった」としても、学習は促進される。なぜなら「機能タイプは、それが実行する非常に多くのことを提示するからである」。氏によると、Haskellの良さが分かることは、「心が開放されるような経験」であり、たとえこの言語が次の大物にならなくとも「違っていて、面白いし、いずれにせよ学ぶ価値のあるものである」ということだ。

 

原文はこちらです:http://www.infoq.com/news/2009/01/rwh-book-interview

この記事に星をつける

おすすめ度
スタイル

BT