タグ

ブックマーク / tanakh.hatenablog.com (4)

  • 2008-12-23

    C++初心者の私がC++をやめたくなった瞬間。 なにをいまさらな。 はじめに C++のstreamはとても良くできていて、これを用いたライブラリを作りたいのだけど、 当に(主にパフォーマンス的な理由で)大丈夫なのとかそういう話。 初めにお断りしておきますが、以下の内容はすべてlinux+gcc4.3での話です。 streamは遅い ふつうにistreamからget()して、ostreamにputしてるとめちゃくちゃ遅い。 C言語のgetchar, putcharより10進数で1.5桁ぐらい遅いよ。 istream::readとかででかいブロック読めば大丈夫なのだけど、 細かい単位で読みたいことの方が多いよね。 そういうわけで、そういう場合にも速く転送することが可能なのかどうか調べてみる。 テストプログラム istreamの内容をostreamに転送するプログラムを6通り書いた。 その1:

    2008-12-23
  • 2006-08-26

    なんだか四月以降文章を書く気分になかなかなれなくて、 二年ほど前、このブログの開始当初の目標だった ひたすらテクニカルアーティクルを載せるページを作るというのは もうすでにかなり頓挫している風ではありますが、 リハビリのために無理に書くことを見つけてでも なにやら書いてみることにします。 ところで、先月の末から一月ほど京都に帰っていたのですが、 京都は死ぬほど暑かったですね。 盆地で暑いと言われつつも、 やはり離れてはじめて分かるというものです。 (私はあんまり広く情報収集したりしないので、 ここに書く内容はとうによく知られた問題なのかもしれないが、あしからず…) プログラムの実行において、何らかの外部的な情報 (つまりIOを介して得られる情報)を そのプログラム全体から参照したいケースというのがある。 典型的な例がプログラムのコンフィギュレーションで、 たとえば、設定ファイルから設定値を

    2006-08-26
    blanketsky
    blanketsky 2008/01/28
    unsafePerformIOべんり
  • Parser Combinatorというもの(その2) - 純粋関数型雑記帳

    このページにはいわゆる解説記事を載せるつもりは無かったのだが、 (たいていは他にもっとうまい説明のページがあるだろうから…) どうやらこれがそうなってしまいそうである。 もっとまともな解説は http://sky.zero.ad.jp/~zaa54437/programming/clean/CleanBook/part2/Chap5.html こちらをどうぞ。(って人のページなんだけどな…) 概要 パーザコンビネータはプリミティブパーザと パーザ同士を組み合わせるコンビネータとからなる。 小さいパーザを組み立てて最終的なパーザを作り上げるのである。 パーザ パーザはいろいろなものが考えられるが、 ここでは単純に、文字列を引数にとり、 解析したもの+残りの文字列を返す関数であるとする。 type Parser a = String -> (a,String) Stringもパラメータ化すると

    Parser Combinatorというもの(その2) - 純粋関数型雑記帳
    blanketsky
    blanketsky 2008/01/21
    続きマダー?
  • 2007-09-18

    x86のオペコード体系がだんだん綺麗に見えてきた。 前回の内容を踏まえて、今回は、Haskellで記述されたアセンブリプログラムをアセンブルして、それを前回述べた方法を用いて実行することを目標とする。 項ではHaskell上でアセンブリプログラムを記述するための言語を構築し、それに対するアセンブラを作成する。 記述の利便性のため、Haskell上で構築する言語はモナドで構成する。普通のアセンブラで扱えるような形で記述できればうれしい。 foo :: CodeBlock (IO Int) foo = assemble $ do movl eax 777 movl eax ecx movl eax (mem(eax)) movl eax (mem(eax,ebx)) movl eax (mem(eax,(ebx,4))) movl eax (mem(eax,4)) movl eax (mem

    2007-09-18
  • 1