まだ 0.22 なんてバージョンなんだから許してやってくれ、なんて言ってみたくもなる。
とはいえ、Cython の前身であるところの Pyrex から数えると、そこそこの歴史になってきたからね。その割には悩ましくて「で、どう直せばいいの」ってな不親切なコンパイルエラーは多いです。思えばCYTHONのどツボり方シリーズ(2)がまさにそうでしたね。
今回のは自分で気付いたものではなくて、4時間前に届いたばかりの Cython の ML からのネタです。こんな:
1 cdef void (*foo)()
2
3 cdef void bar() except*:
4 pass
5
6 foo = bar
C というよりは C++ のダークサイド、かなぁ。こうなるそうです:
1 Error compiling Cython file:
2 ------------------------------------------------------------
3 ...
4 cdef void (*foo)()
5
6 cdef void bar() except*:
7 pass
8
9 foo = bar
10 ^
11 ------------------------------------------------------------
12
13 demo.pyx:6:9: Cannot assign type 'void (void)' to 'void (*)(void)'
いわく、こう言ってくれぃ:
1 demo.pyx:6:9: Function pointers have incompatible 'except *' declarations.
Cも知っててC++も知らないと、こちらの「親切であって欲しい」方でさえ理解に苦しむかもしれませんがね、例外仕様がくっついた(というよりは、とするならばC++なので)関数ポインタを、生Cの関数ポインタに代入してはなら~ん(出来~ん)ちうことね。
ML にあがった内容なので、デベロッパが反応すれば、近々修正されるかもしれないですね。