いわゆるゴドー待ち的状態
つまりサンタクロースってのはゴドーみたいなもんなんだよ(←適当)。
あらいぐまパスカル、角砂糖を洗う(←さらに適当)
そういえばクリスマスなのだった。じゃあなんかいつもと違うことやるかーてな気分がなくもなかったので、OS/2 に WDSibyl をインスコしてみることにした。念のため説明しますと、これは OS/2 と Win32 上で動作する (Object) Pascal の統合開発環境…要するに Delphi 的なアレらしいです。
しかしインスコするだけで面倒なのでした。ぶっちゃけウチの環境ではインストーラがまともに動かなかったので若干の手作業が必要でした。念のため要点を書いておく。
- EMX ランタイムが必要。EMXWRAP をインポートしている実行ファイルがある。
- 日本語コードページからのインスコはもれなく失敗する。CHCP 437 したコンソールからインストーラを実行する。
- サブプログラムとの連動が甘いようで、環境によってはインストーラが途中でだんまり(子プロセスのイベント待ちで止まる)。
必要なプログラムを手動で起動してやれば処理は続行できる(英語コンソールで実行する必要がある)。
うちの環境だと "Compile RC-Files" とインストールステップ表示されたところで処理が止まってしまうのでした(中止ボタンを押してインストーラを中断することはできる)。しかたないので、インストーラは起動したままにして、OS/2 コマンドプロンプトを開いて CHCP 437 し、以下のコマンドを実行する。
D:\WDSibyl\Tools\Output\OS2\CompileAllRC D:\WDSibyl\Bin\OS2\ D:\WDSibyl\Library\Source\RC\ D:\WDSibyl\OS\OS2\Lib -OS2 -INSTALL
日本語コンソール上で実行するとなぜか失敗する。英語モードにするとうまくいくのになあ。
ちなみに似たような作業があと3回必要なので、インストーラの進捗状況を確認しつつ、そのつど実行する。
D:\WDSibyl\Tools\Output\OS2\CompileAllPas D:\WDSibyl\Bin\OS2\ D:\WDSibyl\Library\Source D:\WDSibyl\OS\OS2\Lib -OS2 -INSTALL
D:\WDSibyl\Tools\Output\OS2\CompileAllRC D:\WDSibyl\Bin\OS2\ D:\WDSibyl\Library\Source\RC\ D:\WDSibyl\OS\Win32\Lib -W32 -INSTALL
D:\WDSibyl\Tools\Output\OS2\CompileAllPas D:\WDSibyl\Bin\OS2\ D:\WDSibyl\Library\Source D:\WDSibyl\OS\Win32\Lib -W32 -INSTALL
いったんインスコに成功すれば、chcp 437 しなくても統合環境は起動できる。
- サンプルプロジェクト "editor" を読み込んで実行してみる。
- サンプルアプリの Open ダイアログ。あら日本語も出るのね一応。
- でも日本語テキストの編集は…(キャレット位置のおかしさからいろいろお察しください)。
はっきりいって IDE そのもののレベルでもコンパイラのランタイムライブラリのレベルでも、DBCS に関してはほとんどまともに考慮されていないと思われまする。だってさあ、ランタイムのソースの中にこんなのがあるんですよ(uString.pas)。
Function UniChar2UniChar(ch : Char) : tUniChar; Begin Result.chW:=ord(ch); End; Function UniUniChar2Char(ch : tUniChar) : Char; Begin if ch.chW > 128 then case ch.chW of 214 : Result:='・; 223 : Result:='・; 228 : Result:='・; 246 : Result:='1'; 252 : Result:='・; else Writeln('UniUniChar2Char: ',ch.chW); end else Result:=ch.ch[0]; End; (中略) Procedure UniStrPCopy(Dest :pUniChar; const Source: String); var cou,Cou1 : LongWord; d : pUniCodeString absolute Dest; Begin Cou1:=0; for Cou:=1 to length(Source) do Begin d^[Cou1]:=UniChar2UniChar(Source[cou]); inc(Cou1); end; d^[Cou1].chW:=0; End;
いくらおいらがもう Pascal ほとんど忘れちゃってるつーても、DBCS 方面とか Unicode 方面とかのまともなハンドリングがほとんど期待できないコードだというのはうすうす察せられますですヨ…。
(追記) もうすこし調べた(といってもソースを "DBCS" とかで grep したとかそんな程度ですが)のですが少なくとも GUI レベルでは DBCS を考慮したコードがそこそこあったりするのですよね。それなのにコマンドラインツールが日本語コンソールだと落ちるという。ちなみにコマンドライン版のコンパイラ(WDSPC10)も日本語モードだと落ちた。chcp 437 すれば動くという。しかも自前の簡単なプログラムをコンパイルして日本語モードで実行しても動くし。いったい何がいけないのやら。よくわかりません。
OpenWatcom 1.8RC1 (2)
例によって訳しといたですヨ。あんまり信用しないほうがいいかもしれないですヨ。というか日本語の定訳がありそうな言葉をどう訳したらいいのかよくわからんことがあって…"lazy instantiation" は「遅延生成」とかでいいんですかねえ。あと Fortran の "equivalencing" なんかも意味はうすうすわからんでもないのですが…。
そういや変更点に書いてないような気がしたので適当に書いてみますが、以前のバージョンにも配布パッケージ中に Linux 向けの実行バイナリは入っていたのですが、一部バイナリが用意されていないツールがあったりしたのです。いちばん問題だったのは OMF/COFF 用のライブラリアン(wlib)がなかったことで、これがないと DOS とか OS/2 用のライブラリがまともに保守できない。1.8RC1 のパッケージにはそのへんも入っているようなので、とりあえず Linux でも(Wine や各種エミュレータに頼らなくても)DOS や OS/2 のほぼ完全なクロスコンパイル環境が作れるのではないかという期待が持てます。