どうも、気がついたらJavaSE7が今月リリースされるらしい。
行儀よく使ってる人には、あまり関係がない話なんだけど
JavaSE6とJavaSE7で変わって困っていることがある。
Unicodeの準拠バージョンの違いだ。
JavaSE6 はUnicode4.0に対応して、JavaSE7はUnicode6.0に対応している。
で、何が問題かというと識別子に使える文字がJavaSE6とJavaSE7で違ってくるという事だ。
JavaSE6でコンパイルしていたソースが、JavaSE7だとエラーになることもありえる。
というか、実際に遭遇した。「・(U+30FB)」という文字を変数名に使ってみればわかる。
JavaSE6においては、 Character.isJavaIdentifierPart(‘・’) は Trueとなり識別子として使えるのだが
JavaSE7では、結果はFalseとなる。
直接的な原因は、Unicode4.1と6.0でこのキャラクタの所属するUnicode Categoryが違うというのが問題だ。
誰が動かしたんだよ!っと思ったもののそのそもの原因はUnicodeのスペックに引きずられる
Javaの言語仕様も問題なんじゃないかと思う。
Unicode中で区切りを表す文字だからといって識別子として使えないようにする必然性なんてあったもんじゃない。
Javaの予約語とか言語構造はASCIIレベルの文字しか使ってないんだから
ASCII以外の文字は勝手に使わせろと言いたい。
どうせUnicode変更してってもASCIIに対応する部分に手を入れるつもりはないんだろうに・・・。
コメントを残す