2001-08-21
λ. 台風が近付いているそうで、生温い空気が何とも言えない。
λ. GGXの一撃必殺技
そっか。ディズィーには一撃必殺技が無いんだ。まあ、ガンマ・レイがあるからいいけど。そういえばジャスティスにも極悪な覚醒必殺技があったことを思い出す。名前は忘れたけど、勝手にボルテッカーとか呼んでたな〜 懐かしい。
2002-08-21
λ. atk-1.0.4
atkがスタティックライブラリになってしまっているのに気がついた。理由はわからないが「libtool: link: warning: undefined symbols not allowed in i586-pc-cygwin shared libraries」というメッセージを見ると、何かシンボルが欠けているのかとも思う。しかし、直接dllwrapを使うと普通にDLLを作れるようなので、これをインストールしとこ。(8/31に追記あり)
ところで、dllwrapで--defを指定せずに作ったDLLには、impgenがうまく動作しないようだ。
λ. gtk+-2.0.6
cyggtk-win32-2.0-0.dllをビルドしようとしたら以下のようなエラーメッセージが出てしまった。auto-importは比較的新しい機能でよく知らないので使わないことを考える。gdktypes.hではG_OS_WIN32の時にしか「__declspec(dllimport)」が付かなくなっていたので、この条件をG_PLATFORM_WIN32に書き換えて試したら、うまくいった。
fu000001.o(.idata$3+0xc): undefined reference to `libimp_cyggdk_win32_2_0_0_a_iname' fu000002.o(.idata$3+0xc): undefined reference to `libimp_cyggdk_win32_2_0_0_a_iname' fu000003.o(.idata$3+0xc): undefined reference to `libimp_cyggdk_win32_2_0_0_a_iname' fu000004.o(.idata$3+0xc): undefined reference to `libimp_cyggdk_win32_2_0_0_a_iname' fu000005.o(.idata$3+0xc): undefined reference to `libimp_cyggdk_win32_2_0_0_a_iname' fu000006.o(.idata$3+0xc): more undefined references to `libimp_cyggdk_win32_2_0_0_a_iname' follow nmth000000.o(.idata$4+0x0): undefined reference to `_nm__gdk_threads_mutex' Info: resolving _gdk_threads_mutex by linking to __imp__gdk_threads_mutex (auto-import) collect2: ld returned 1 exit status
次に、適当なサンプルをビルドしようとすると、gtkをリンクする段階で「simple.o(.text+0xe5):simple.c: undefined reference to `gtk_init_abi_check'」等と言われてしまう。gtkmain.hでは「#ifdef G_PLATFORM_WIN32」を使ってるのに、gtkmain.cでは「#ifdef G_OS_WIN32」を使っているのが原因。#91649 アホらしくてやってられないね。gtkmain.cの方を直すのが筋なんだろうけど、gtkをリンクしなおすのが面倒なのでgtkmain.hの方を修正。
これでもう大丈夫だろうと思い、gtk+-2.0.6/examples/filesel辺りを試しにコンパイル実行してみると、以下のように言われてしまった。
bash-2.05b$ ./filesel.exe ** (filesel:4063781): WARNING **: Couldn't load font "Sans 10" falling back to "Sans 10" ** (filesel:4063781): WARNING **: Couldn't load font "Sans 10" falling back to "Sans 10" ** (filesel:4063781): WARNING **: All font failbacks failed!!!!
このメッセージを出しているのはpango-fontmap.c。問題があるとしたらpangowin32-fontmap.cか? それともgtkrc-2.0ファイルに関する問題だろうか? gtk+側の問題かpangoの問題かを切り分けるうまい方法はないかな?
そろそろお手上げ気味かも……
λ. 個人向け国債を非課税に、財務省検討
せこいのう。
λ. return
そういえばHaskellのreturnって関数なんだよなぁ……
2003-08-21
λ. Re: 頭の体操。
(子)リストのリストがあって、子リストにはシンボルが2個以上入ってたとする。たとえば、((A B) (C D) (E F) (A G) (H F I)) のような感じ。
これを、同じシンボルを含む子リストはまとめたいとする。たとえば、例で言えば ((A B G) (C D) (E F H I)) のようなリストを返す。
最初に思いついたコードはこんなの。かっこ悪いな。しかも破壊的な関数使ってしまったし。
(use srfi-1) (define (solve data) (define cells (map (lambda (x) (cons #t x)) data)) (define (last-cell cell) (if (car cell) cell (last-cell (cdr cell)))) (define (for-each-unordered-pair f l) (if (not (null? l)) (let ((x (car l)) (xs (cdr l))) (for-each (lambda (y) (f x y)) xs) (for-each-unordered-pair f xs)))) (for-each-unordered-pair (lambda (a b) (let ((a2 (last-cell a)) (b2 (last-cell b))) (if (and (not (eq? a2 b2)) (not (null? (lset-intersection eq? (cdr a2) (cdr b2))))) (begin (set-cdr! a2 (lset-union eq? (cdr a2) (cdr b2))) (set-car! b2 #f) (set-cdr! b2 a2) )))) cells) (delete-duplicates (map (lambda (cell) (cdr (last-cell cell))) cells) eq?)) (display (solve '((A B) (C D) (E F) (A G) (H F I)))) ;=> ((G A B) (C D) (I H E F))
ψ nobsun [module Main where import List solve :: Eq a => [[a]] -> [[..]
ψ nobsun [Maybe なんか使う必要なかった。:(]
ψ さかい [おー、なるほど。 これもfoldrでいきますか。 Haskellらしいですね。 P.S. そういえば、Haskel..]
ψ nobsun [Shiro さんとこの wiliki の Y.Hana さんのアイデアを Haskell での実装 solve' ..]
ψ nobsun [Haskell での Union-Find の例 http://www.cs.bris.ac.uk/Teaching..]
ψ さかい [そのY.Hanaさんのコードは、もともとHaskellで書いたのをSchemeで書き直したもののようですよ。 ht..]
ψ nobsun [なんと ^^;]
ψ さかい [> Haskell での Union-Find の例 > http://www.cs.bris.ac.uk/Teac..]
2004-08-21
λ. "Non-stop Haskell", Andy Cheadle, Tony Field, Simon Marlow, Simon Peyton Jones, and Lyndon While; ICFP 2000.
STGマシンのように、Closureのentry-codeにenterすることによってオブジェクトにアクセスするような実行方式をとっている場合、entry-codeへのポインタを置き換えることでread barrierが非常にcheapに実装できるので、Baker's incremental GC が効率的に実装できるよって話。
2004年に書かれた "Exploring the Barrier to Entry: Incremental Generational Garbage Collection for Haskell" の方はまだ読んでないのだけど、abstractで We detail important implementation issues and provide a detailed evaluation of a range of design alternatives in comparison with Non-stop Haskell and GHC's current generational collector.
とか書いているところをみると、現在のGHC-6.2のGCはincremental GCにはなってないのかな。
λ. Mercury Tutorial
を読んでみた。Mercuryは以前から気になっていたのだけど、全然普通の言語だったので少々失望。もっとぶっとんだ言語を期待していたのに。
λ. RHG読書会::東京 Reloaded
今回はタイムインターメディアではなく農工大。うちから2時間弱か……
2005-08-21
λ. ジェネリクス・クイズ
これは型変数のvarianceの問題。JavaのArrayListでは型変数が正の位置と負の位置の両方に現れるため、ArrayListはこの型変数についてcovariantかつcontravariantでなくてはならず、結果として型変数はどちらの向きにも変化できない。よって、StringとObjectの関係をArrayList<String>とArrayList<Object>の関係にliftすることは出来ない。
もし、型変数が正の位置にしか現れないのであれば ArrayList<String> IS-A ArrayList<Object> として問題ないし、負の位置にしか現れないのであれば ArrayList<Object> IS-A ArrayList<String> として問題ない。
(追記) 正負の位置は鷲見さんの考えで合ってます。単に「関数の戻り値と引数」と書かないのは、負の位置では正負が反転するので、そこに関数型があるとそこでは対応が逆になるから。例えば「(A -> B) -> C」という型では、A,Cが正の位置で、Bが負の位置。
ψ sumim [そういうことでしたか。テクニカルタームは一見、単純に言い換えられるようで(ならば…と、私のような素人にはモヤモヤした..]