充実したCygwinライフを送る

もう最近はCygwinで生きていけるんじゃないかと検討している。

1.7をインストールする

Cygwinは現在1.5→1.7の過渡期にあり、1.7がベータテスト中となっている。
1.7はIPv6が使えるなど種々の改善が行われている。個人的には1.7を主に使っていて、実際安定している。

PuTTYを使う

Poderosaはフルスクリーンアプリケーションの描画に問題があったり、AES CTR暗号モードを持っていないなど不具合が多いので他のターミナルエミュレータを検討する。

CygTermを使っても良いが、PuTTYcygも期待通りに動作する。
Cygwinは1.7以降、Unicodeをサポートしているので、LANGをja_JP.utf8にするなどすれば大概のアプリケーションは正常に動作する。

mosh

moshCygwin上ではコンパイルできない。moshWindows以外*1でWCHARが16bitな環境をサポートしていないため。

UCの定義だけ_WIN32の方を採用すれば、とりあえず動くバイナリが出来る。
大概のテストは通るが、getopt_longのテストだけは正常に通らない。

[ FAILED ] 5 tests, listed below:
[ FAILED ] MoshTest.getopt_longU_3
[ FAILED ] MoshTest.getopt_longU_4
[ FAILED ] MoshTest.getopt_longU_5
[ FAILED ] MoshTest.getopt_longU_9
[ FAILED ] MoshTest.getopt_longU_10

また、GCの警告が良く出る。

GC Warning: Repeated allocation of very large block (appr. size 241664):
May lead to memory leak and poor performance.

threadsブランチは更に(r1753)、

  • MultiVMProcedures.cppにGloc.h
  • main.cppにEqHashtable.h、Closure.h、VM-inl.h。

をincludeとして追加し、configure.acを適当に修正し、gc-7.1を通常のディストリビューションに置き換えた上で、

./configure --disable-shared --enable-threads=posix

する必要がある。Thread APIをWin32に移植するのが面倒そう(たぶんWindowsネイティブのスレッドよりpthreads win32を導入する方が早そう)なので*2しばらくはこれで凌ぐ*3つもり。

*1:Cygwinは_WIN32でない

*2:ただしpthreads win32はLGPLなのでツリーには入れづらい

*3:単にskymoshのコードベースに今のAPIを移植する方が楽かも知れない。。ただ、skymoshはもう分岐してからかなり経つのでキャッチアップする手間を考えると微妙。