Hatena::ブログ(Diary)

エンジニアのソフトウェア的愛情 このページをアンテナに追加 RSSフィード Twitter

2007-06-16

Foreign

便利なんですが、なんとなくズルをしている気分になります。Haskellっぽくないと。

import Foreign.Marshal.Array
import Foreign.Ptr
import Foreign.Storable
import Data.Word

main = do
  a <- mallocArray 10 :: IO (Ptr Word32)
  peekElemOff a 0 >>= print  -- index 0 の内容は0
  pokeElemOff a 0 10         -- index 0 に10を設定
  peekElemOff a 0 >>= print  -- index 0 の内容は10
  pokeElemOff a 10 10        -- index 10 に10を設定(いいのか?)
  peekElemOff a 10 >>= print -- index 10 の内容は10(ほんとにいいのか?)

ポインタとして扱っているので、範囲外をアクセスしてもエラーにならないみたいです。

正直な気持ちとしては、できれば使いたくない。けど必要に迫られて使うことになりそうな内容。

デバイスの表現に適したプログラミング

FPGAの記事を見て、「C++とかでこうゆう表現できないかな」と感じてしまいました。組み込みをやっているとビット列操作が多いのですが、思いのほかC++と相性がよくありません。符号付き/符号なしとかを厳密にしていくと結構面倒。プログラミングする側で管理していればよいことなんですが、むしろ面倒なことだからこそ開発する環境側でのフォローが欲しいところ。