GHCによるHaskellの3つの実行方法とHello World
昨日のエントリーでHaskell処理系であるGHCをインストールしたので、実際にこれを使ってみましょう。
まずはオーソドックスに、ソースコードを作成してコンパイルしてみます。(Haskell本 P.17)
hello.hs
main = putStrLn "Hello, World!"
コンパイルして、実行します。
$ ghc -o hello hello.hs
$ ./hello
Hello, World!
おおおおお、表示出来ましたね!(某サイト風 笑)
さて、GHCには普通にコンパイルするだけではなく、ほかにインタプリタと対話式の実行方法があります。
例えば、インタプリタはコンパイルせずにちょっとソースコードを試してみたいとき、対話式の実行方法(Rubyではirbと言うコマンドがありますね)は、ちょっとした実験をしてみるときに便利です。
では、インタプリタを実行してみましょう。コマンドは「runghc」です。
$ runghc hello.hs Hello, World!
最後に対話式です。コマンドは「ghci」です。
$ ghci ___ ___ _ / _ \ /\ /\/ __(_) / /_\// /_/ / / | | GHC Interactive, version 6.6.1, for Haskell 98. / /_\\/ __ / /___| | http://www.haskell.org/ghc/ \____/\/ /_/\____/|_| Type :? for help. Loading package base ... linking ... done. Prelude> putStrLn "Hello, World!" Hello, World!
対話式環境から抜けるときは、:quitコマンド、もしくはCtrl-Dを押します。
Prelude> :quit
Leaving GHCi.
コンパイル>インタプリタ>対話式 の順に、実行までの手順が多いですが、もちろんトレードオフになるのは「実行速度」です。
コンパイル済みの実行ファイルを実行
$ time ./hello Hello, World! real 0m0.004s user 0m0.000s sys 0m0.004s
インタプリタで実行
$ time runghc hello.hs Hello, World! real 0m0.259s user 0m0.120s sys 0m0.124s
やはり、大きな差がつきます。対話式では時間が測りにくいですが、実際一番遅いと思われます。
この3つのモードは、開発時に使い分けることで効果を発揮するんでしょうね。特に、対話式があるのは、RubyやJRubyのときもそうですが、ちょっとした言語特性を見るときに大変便利です。