SSブログ

2010/6/5 1295歩 [日記・雑感]

日本人ユーザには全く関係のない話だが、OpenFOAM Forumでは有名なParaViewのトラブルに、小数点として "." 以外の記号を使う、仏、独、西などの言語環境(ロケール)で、ASCII形式のデータファイルの小数点以下の数値が悉く読み飛ばされてしまう、というものがある。OpenFOAM Forumでしばしば見かける「export LC_ALL=Cを実行しなさい」という書き込みは、このワークアラウンドである。

原因は簡単で、PV3FoamReader、vtkOpenFOAMReaderともに使用している、strtod()ほかの文字列を数値に変換する関数の動作が、プログラムの実行されるロケールの影響を受けるためだ。ただし、C/C++プログラムは実行環境のLANGやLC_*環境変数の設定によらず、デフォルトではCロケールで実行されることになっているので、今までは問題なかった。それがQt 4.5からの仕様変更で、LinuxではQCoreApplicationの初期化時に、プログラム自体のロケールが実行環境のロケールに設定されるようになり(こちらのDetailed Description末尾参照)、ParaViewをユーザがコンパイルする際にQt 4.5以降の利用が広まるに伴って問題が顕在化した。

以上の点を去年8月にParaView MLで指摘したのだが、その時はどなたの関心も引くことができなかった。それが昨日、この問題があるユーザによってMLで話題になったので、すかさず私も便乗して昨年のメールを引用して再考をお願いしたところ、今度は1時間もしないうちにフィックスがコミットされた

OpenFOAMリーダ内でstrtod()を、ロケールの影響を受けない、例えばistreamオペレータに変更して修正するのは簡単だが(実際SourceForge版では、このワークアラウンドを入れている)、やはりそれは根本的な解決ではない。影響を受ける国のユーザには致命的に重要な問題について、その問題に関しては痛くも痒くもない国の人間がパーシステントに修正を迫るのは一見いささか妙だが、自分自身の目標とするところはあらゆるユーザのユーザ体験を向上させる事なので、当然これはやるべき事のスコープに入る。

enGrid 1.2.0リリース。
nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。
2010/6/2 6179歩2010/6/19 1220歩 ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。