この記事を読むのに必要な時間:およそ 1 分
CPUのマルチコア化が関数型普及の引き金
「関数型プログラミング言語は難しい?」――とよく言われますが,どうなんでしょうか。
現在,皆さんが使っているパソコンを見てください。ちょっと昔のを使っているんでしたらCore2 Duo,今どきの新しいものでしたら,Corei7とか5とか3とか。CPUの性能を示すシールが貼られていませんか。それはCPUのコア数を表しています。コアとはCPUの重要な計算機能部分のことで,Core2 Duoならば2個分のCPUをまとめて1つとしたCPUだよ,という意味です(かなりおおざっぱな説明ですが,わかりやすくということでご容赦ください)。
CPUの数を増やせば,コンピュータの計算能力が向上するのはわかりやすいと思いますが,Pentiumが主流だった時代は,マザーボード側に2個以上のCPUを載せることで性能向上を図っていました。業務用のサーバなどは2個以上のCPUを搭載可能なものもありました。銀行・金融関係では緻密な処理を短時間に達成せねばならず,そうした需要があったのです。さらに速度を追求する場合,マザーボードを経由するよりも,2つのCPUを1つにしたほうが速度と効率が良いのは明らかです。一方,CPUの中身の配線の問題でこれ以上の集積化は難しくなってきたので,CPUコア数を増やす方向で処理能力を上げることになりました。それが,Core iシリーズです。Core i7は1つのCPUの中に4コア入っています。コア数が複数個あるので,マルチコアCPUと言われています。そしてコアごとに平行して処理ができるのでマルチスレッドとも呼ばれています。そんな超高機能なCPUが普通に使えるというスゴイ時代になりました。
昔からあった関数型プログラミング言語
さて,話を戻します。そうしたマルチコア・マルチスレッドCPUのパワーを引き出せるのが,関数型プログラミング言語だと言われています。CPUのマルチコア・マルチスレッド化で今もっとも注目され,再評価が進んでいます。実は関数型プログラミング言語とは,突然現れたものではありません。1970年代頃からあるもとしてLisp(リスプ)が有名です。この言語は今でもファンがとても多いです。最近流行りつつあるものとしては,Scala(スカラ),Ocaml(オーキャムル),本書の題材であるClojure(クロージャ),Erlang(アーラン)などが挙げられます。それぞれに使いどころがありますが,関数型の特徴として非常に抽象度が高いコードになるので,一見判読しにくいことがあります。しかし,ほんの数行コードを書くことで,スゴイ処理を実行できるので,プログラマーや研究者達の知的好奇心が沸き立ちます。それが魅力なのです。
まずは試してみよう!
本書はそんな関数型言語であるClojureの使い方を示した本です。ClojureはJava VM(仮想マシン)上で動くLispです。Java言語がいろいろなところで使用されていますので,そのおかげで現代に甦ったLispとも言えます。関数型言語の本質やその技術的な素晴らしさを解説しだすとページが足りませんので割愛させていただきます。
本書は「Clojureのパワーをまず使ってみよう!」そんなコンセプトの本です。しかも筆者はフランス人なのです。JavaVM上で使えるということは,Javaができることはほぼ実行できます。よって,いろいろな言語を結びつけて操作したり,コンピュータの周辺機器も利用することができるのです。いろいろなことができて,その範囲は広大です。本書は,そうしたClojureの使い方をフランス料理のメニューに見立てて解説しました(ニコラさんは,あるものは使うというスタンスでプログラミングするので,日本人と違ったスタイルで興味深いのです)。
こんなレシピを試してみませんか!
まずは,環境設定から説明します。LeiningenというClojureのツールをインストールします。それからスタートです。まずはJavaとの連携を確認します。
さて,まずはできることから挙げていきましょう。たとえばJSONデータの出力,DSLの作成,RedisやMongoDBとの接続,テスト現場で役立つSelenium連携,Hadoopとの連携,クラウド環境では,HerokuやGoogle Apps Engineの操作などなど。さらには,音声認識やサウンドプログラミング,OpenCLを使ったグラフィクスもできます。そしてAndroidアプリの開発も可能です。その応用で手軽にできる組込プログラミング環境で人気のArduinoも操作できます。かなり満腹になりそうな掲載サンプルですが,これらを筆者らのGitHubからダウンロードし,ぜひ試してください。関数型言語を深く勉強しようという意欲がモクモクとわき上がり,関数型脳を育てること請け合いです!