開発合宿

外は雪、滑らないので開発するしかないじゃない。

何やるかちゃんとは決めていなかったけれども、結局懸念事項だったGraphillionのPython3対応をすることに決めた。 これは過去何回かCythonで移植にトライしていずれも挫けた過去をもつ案件で…Cythonで書くの本当に面倒なのだよな…

今回は手段を変え、直接C APIレベルでの移植することに。

まあ、そのままコンパイルすると通りませんよね。

とりあえず移植のためのC APIレベルでの差異について調査。

おおきくわけて

  • 文字列の変更(ユニコードが標準の文字列になりバイト文字列が導入されるするようになった)
  • モジュールの定義に使う構造体が変わった
  • メソッドの定義に使う構造体が変わった

幸い先行者が何名もいて、情報には困らないレベルだった。 あ、構造体の定義が変わったのはコンパイラさんに教えてもらったのだったな。

あと sixfuture に対応するC APIレベルでの互換ライブラリをノウハウごと公開してくれていたのでそれを利用した。

py3c

作業してる最中に自分のCやC++の技能レベルが下がっていないことを確認して驚きつつ、 ちまちまと作業やパッチ送ったりなんなにしたらコンパイルは通るようになった。

まあそこからも長いよね。 コンパイラさんの指摘がなくなったのでテストコードを流しつつ、失敗した箇所の理由を特定し、 デバッガ仕込むの面倒だったのでprintデバッグでPython2.xとPython3.xでの挙動を確認しつつ原因を究明していった。

そんなこんなでテストコードの8割くらいは通るようになった。 Cythonで頑張ってたときはそもそもコンパイルが通らなかったのですごい進捗だなあ。

あいかわらず美味しいペンションのご飯をたべつつ早めの就寝。

大根おろしのみぞれ鍋と馬刺しって、もうご馳走じゃないですか。

まだ時差ボケしてた。