SpockとOpiumのベンチマーク

思い立って、HaskellとOCamlそれぞれでWebアプリを開発するにあたって、どれくらいの性能が出る ものなのか、まずはベンチマークをとってみることにした。フレームワークとして、Haskellに ついてはSpock, OCamlについてはOpium を選んだ。

Spockは、GHC7.6.3とcabal-installを使用してビルドした。Spockは0.10.0.1を使用した。 まずは、src/Main.hsを示す(ほぼGitHubにあるもののまま)。

{-# LANGUAGE OverloadedStrings #-}
import Web.Spock

import qualified Data.Text as T

main =
  runSpock 7777 $ spockT id $
    do get ("echo" <//> var) $ \something ->
        text $ T.concat ["Echo ...
more…

Haskellにて変更可能配列(mutable vector)の実験

自分用のメモ。Haskellにてmutable vectorを使う方法。STモナドの中であれば変更できる。STモナドは PrimMonad ST, PrimState STとなっている。実装はここ. DctQuantという名前なのにDCTしか実装していない。ijgjpegのfloatバージョンを元にして変更。あまり確認していないので、計算に間違いがあるかも。

more…

Haskellって

最近Haskellで趣味のプログラムを作成することが増えた。一度型のラクさに慣れてしまうと、Lisp系言語でプログラムを作るのはおっくうになってしまう。自分も歳を取ったものだ。しかも、少なくともWebアプリに限ってだが、プログラムのメモリ使用量や実行速度でもJavaに勝っていると思う。 その割には、Webで調べてみても、あまりHaskellでガチにアプリを作りました、という記事を多く見つけられない。どちらかというと、Haskellを触ってみましたという記事が多いように感じる。もちろん、探せば多少はあって、HFTシステムをHaskellで実装しました、とか。でも他の言語と比べて全般的に記事が少ないと感じる。 もっとHaskellが使われてもいいのではないのかな、と思った次第。それだけ。

more…

blaze-htmlでのname属性

blaze-htmlでname属性の値を設定するときに、コンパイルエラーが出てしまった。次のようなエラー。

    Couldn't match expected type H.AttributeValue'<br />                with actual type[a0]'
In the return type of a call of concat'<br /> In the second argument of($)', namely
`concat ["s", show y, "-", show m, ....]'
In the expression: A.name $ concat ["s", show y, "-", show m, ....] 

concatを使って、name属性の値になってほしい文字列を作っているのだが ...

more…

Haskell雑感

以前clojureで作成した自分用WebアプリをHaskell(GHC)で作ってみている。感じた点を並べてみる。

言語としての違い

ソースの単純な見た目としてはclojureの方が自分好み。Haskellの方は"$, ->, ., <-, !"といった記号が乱発され、とにかく読む気が失せる。しかも一目見ただけでは関数の適用順さえ理解しにくい。Lispライクな文法にしなかったのはHaskellの一番いけてない点だと主張したい。

case all of
[] -> res
(x:rs) -> case Data.Map.lookup (qname x) res of
Nothing -> formatByKamoku' rs $ insert (qname x) ((V.replicate 12 0) V.// [((month x)-1, cost x)]) res
Just v -> formatByKamoku' rs $ insert (qname ...

more…

HaskellのMySQLバインディングについて調査

HaskellでMySQLを使うのにどのライブラリが良いか調べた。結果としてはmysql-simpleが良さそうだ。HDBC-mysqlも試して見たが、こちらは日本語が文字化けしてしまった。ソースを見る限りちゃんとUTF8の変換を行っているように思えたのだが。とりあえず使えるものが見つかったので今日の所はここまで。

2012/2/14 追記

Mac OS Xの方でmysql-simpleをインストールしたが、コンパイル/リンクされたファイルを実行しようとしたら、libmysqlclient.18.dylibが見つからないというエラーが発生した。このファイルがあるディレクトリをDYLD_LIBRARY_PATH環境変数で指定してみたが、なぜか解決しなかったので、"Library not loaded: libmysqlclient.18.dylib"の解消方法にあった方法を使って、/usr/libにシンボリックリンクを作成して逃げた。

どうにもMac OS XはLinuxと比べて面倒に遭遇する場合が多いと感じる。

more…

Mac OS XでGHCのコンパイルエラー

あるプログラムをMac OS X(10.6)上のGHC7.0.4(Haskell Platform 2011.04でインストールした)でコンパイルしようとしたら、

Linking main ...
Undefined symbols:
  "_locale_charset", referenced from:
      _localeEncoding in libHSbase-4.3.1.0.a(PrelIOUtils.o)
  "_iconv_close", referenced from:
      _hs_iconv_close in libHSbase-4.3.1.0.a(iconv.o)
     (maybe you meant: _hs_iconv_close)
  "_iconv", referenced from:
      _hs_iconv in ...

more…