Haskellクイックスタート

文:Nick Gibson(Builder AU)  翻訳校正:原井彰弘
2007-12-13 10:00:00
  • このエントリーをはてなブックマークに追加

 Haskellは、純粋数学的な単純さを求めて副作用を取り除いた関数型プログラミング言語である。関数型言語でプログラミングを行うことは、標準的な命令型の手法に慣れた開発者にとっては多少の挑戦であるかもしれない。しかし心配は無用。今回は、Haskellの簡単なクイックスタートを提供しよう。

 関数型言語では、(Java、C、それらから派生した言語のような)昔ながらの命令型スタイルとは多少異なるプログラミングスタイルを用いる。関数型言語では、「レシピ」のようにそれぞれのステップを実行して欲しい順番に全て書き出して並べるのではなく、パーツを用いて一本の式を構成することによってプログラムを記述するのである。

 関数型のパラダイムをベースにした言語は、プログラミングの世界では現在ホットな話題となっている。関数型言語のファンは、関数型のコードはずっと短く、理解するのも容易で、エラーを引き起こしにくいと主張している。しかし一方で関数型言語に懐疑的な人は、関数型のコードは簡潔すぎるし動作も遅く、内部で何が起こっているのか理解するのも困難だと主張している。

なぜHaskellを使うのか?

フリーである
Haskellはオープンソースの技術なので、無料でダウンロードして使用できるコンパイラやインタプリタが多数存在する。
活発に開発が続けられている
Haskellはアカデミックな世界で非常に好まれており、Haskellの動作速度を向上させたり、コードを読みやすくしたり、またはより強力なものにしたりといったテーマで多数の博士論文や修士論文が執筆されている。このように関数型言語の最適化に関する研究が行われた結果、Haskellはここ5年で単なるアカデミックな遊び道具から、高性能アプリケーションを開発する際の重要な選択肢の一つとなった。
十分に速い
最適化されたCのコードほどではないが、動作速度に関してはそれほど問題はない。「The Computer Language Shootout」によると、HaskellはCと比較して2倍遅い程度である(ちなみにJavaは1.5倍、Rubyは50倍Cよりも遅い)。
遅延評価
値は必要になった時点で初めて計算されるため、Haskellでは要素を無限に含むリストを自由に生成して使用することができる。このときコンパイラでは、使用される分についてのみコンパイルが行われる。この評価方法のトレードオフは、どの程度のメモリが使用されているのかを見極めるのが難しい場合があるということだ。
高階関数
関数型言語では、関数は常にファーストクラスオブジェクトである。実際にHaskellでは、簡単かつ明快なコードを書くためには、変数ではなく関数を用いるのが最もよい選択肢である場合がしばしばある。
エラーが起こりにくい
Haskellのコンパイラは型に関して厳格であり、しかも関数には副作用が含まれていないのが普通なので、一度コンパイルさえ通ってしまえば、メモリ関係のバグは含まれていないと考えてもよい。Haskellのウェブサイトではこのことを「コアダンプがない」と宣伝しているが、実際にはもっと強力で、原因を突き止めるのが困難な多くの種類のメモリ関連のバグが除去される。
コンパイラもインタプリタも使用可能
Haskellのコードは実行速度を優先するためにネイティブのマシン語にコンパイルすることも可能であるし、インタプリタを用いてインタラクティブな環境で実行することもできる。それらは、状況に応じて自由に選択できる。Haskellはコンパイラとインタプリタ両方が利用可能な数少ない言語の一つである。
このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。 これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。
Cookieなどの設定や使用の詳細、オプトアウトについては詳細をご覧ください。
[ 閉じる ]