Weird Science

  1. GHC-6.12.1 on Snow Leopard

    GHC-6.12 rc1 が出てから結構たつけど、結局 Snow Leopard の上で動くかどうかっていうのがよくわかってないので、もう少しちゃんと試した。(以前一瞬だけ試したことはあったがそのときは Unicode IO だけ試してすぐ消した)

    今回は、GHC の trac にあるチケットを参考に「失敗すると書かれているテストが本当に失敗するのかどうか」を、GHC-6.12.1 rc1 を Snow Leopard にインストールして試してみた。失敗すると言われているテストは、主に動的ロード(Dynamic Loading)に関する物だ。具体的には、

    についてのテストが失敗していると報告されている。(他にも ghci が生成するバイトコードがおかしいようだが、今回は無視する)

    次に、テストをどうやって、手元で実行したかだが、testsuite をまるまる走らせるのもあほらしいし、僕個人としては何が今現在動かないか知れればよいので、TH、Annotation、FFI それぞれについて失敗すると言われているテストを 1 つずつピックアップし、適当に実行した。

    手元で再現した失敗は以下の 2 つだ。

    Annotation

    $ ls
    ./                   ../                  Annrun01_Help.hs     annrun01.hs          annrun01.stdout.txt
    $ ghc --make annrun01.hs -package ghc
    [1 of 2] Compiling Annrun01_Help    ( Annrun01_Help.hs, Annrun01_Help.o )
    Loading package ghc-prim ... linking ... done.
    Loading package integer-gmp ... linking ... done.
    Loading package base ... linking ... done.
    Loading package array-0.3.0.0 ... linking ... done.
    Loading package containers-0.3.0.0 ... linking ... done.
    Loading package filepath-1.1.0.3 ... linking ... done.
    Loading package old-locale-1.0.0.2 ... linking ... done.
    Loading package old-time-1.0.0.3 ... linking ... done.
    Loading package unix-2.4.0.0 ... linking ... done.
    Loading package directory-1.0.1.0 ... linking ... done.
    Loading package pretty-1.0.1.1 ... linking ... done.
    Loading package process-1.0.1.2 ... linking ... done.
    Loading package Cabal-1.8.0 ... linking ... done.
    Loading package bytestring-0.9.1.5 ... linking ... done.
    Loading package ghc-binary-0.5.0.2 ... linking ... done.
    Loading package bin-package-db-0.0.0.0 ... linking ... done.
    Loading package hpc-0.5.0.4 ... linking ... done.
    Loading package template-haskell ... linking ... done.
    Loading package ghc-6.12.0.20091010 ... linking ... done.
    Loading package ffi-1.0 ... linking ... done.
    [2 of 2] Compiling Main             ( annrun01.hs, annrun01.o )
    Linking annrun01 ...
    $ ./annrun01 
    Initializing Package Database
    Segmentation fault
    

    SEGV した。いや、コンパイルが通らないからっててきとうに Just cTop を Nothing に置き換えたせいかもしれないが、せめて例外を吐いてほしい。

    FFI

    $ ls
    ./                      ../                     ffi018_c.c              ffi018_ghci.h           ffi018_ghci.hs          ffi018_ghci.stdout.txt
    $ ghci ffi018_ghci.hs
    GHCi, version 6.12.0.20091010: http://www.haskell.org/ghc/  :? for help
    Loading package ghc-prim ... linking ... done.
    Loading package integer-gmp ... linking ... done.
    Loading package base ... linking ... done.
    Loading package ffi-1.0 ... linking ... done.
    [1 of 1] Compiling Main             ( ffi018_ghci.hs, interpreted )
    
    During interactive linking, GHCi couldn't find the following symbol:
      f
    This may be due to you not asking GHCi to load extra object files,
    archives or DLLs needed by your current session.  Restart GHCi, specifying
    the missing library using the -L/path/to/object/dir and -lmissinglibname
    flags, or simply by naming the relevant files on the GHCi command line.
    Alternatively, this link failure might indicate a bug in GHCi.
    If you suspect the latter, please send a bug report to:
      glasgow-haskell-bugs@haskell.org
    
    > 
    

    foreign import した関数のシンボル解決ができないというエラー。

    感想

    さっきまで、これが動かんあれが動かんばっかりいってたけど、やっぱり今回から入る Unicode IO は魅力的だ。そして、今回動かないことが確認できたものは、Annotation と FFI だ。1 ユーザとしては、FFI がおかしいのは困るけど(もちろん FFI 使いたくなったときもあるけど、ライブラリが FFI 使ってたりするときも)、Annotation は GHC 6.12.2 からでいいかなあ、あと ghci でおかしいようならちゃんとテストを書いてコンパイルして走らせるまでだし… という感想。自分で直すっていうのも無理だし。

    結論

    Haskell Platform が 6.12.1 使い始めるまで 6.10.4 使っとけばいいかな。

    追記

    パッチが入ったみたい

  2. Above post has
  3. blog comments powered by Disqus