最近、社内向けにFirefoxアドオンを作る機会がありました。基本はXMLとJavaScriptを書くだけで作れるので、複雑な機能がないのであれば比較的簡単なのですが、作ったことがない人から見ればなんとなく難しいイメージがあるようです。
一見難しそうに思えるものも、調べてみると案外シンプルであったりすることが多いです。昨今流行っているもので言うと、MapReduceがそうでしょう。map関数とreduce関数を組み合わせることで大規模な処理をこなすことができます。
『Scalaスケーラブルプログラミング』(インプレスジャパン)や『Real World Haskell』(オライリー・ジャパン)など、関数型言語ScalaやHaskellの書籍が相次いでいます。これらの言語にはパーサコンビネータのライブラリがついているのが特徴の一つとなっています。パーサコンビネータを使うと、外部DSL(Domain Specific Language、ドメイン特化言語)やデータフォーマットを解析する機能を、yacc(YetAnother Compiler-Compiler)や正規表現などの特別な言語を使わず、自身の言語のみで記述できます。以前は日本語での情報が少なかったり関数型言語自体の敷居の高さがあったりなど、個人的にとても難しいというイメージがあり敬遠していたのですが、DSLの勉強やHaskellの本を読んで試していくうちに、使う分にはそれほど難しくないように思えてきました。
調子に乗って、パーサコンビネータ自体の実装も案外簡単にできるのではないかと調べてみましたが、これはまだ自分の頭が追いつかないようです。