すんげー昔から思ってたことではあった。何で識別子に日本語使えないんかなー、と。それこそ高級言語を覚え始めた頃から。
まあ、実装も面倒だろうし、あっても使わないだろうけどな、とは思ったけど。
で、何かPython3の仕様を見てたら、Unicode識別子に対応してた。ふむ。つーかECMAScriptも対応してた。そうだったのか。
識別子に使える文字は、UCDのカテゴリー情報で決めるようだ。一瞬重そうに思ったけど、validateは定義時だけだからどうでもいいのか。
どちらの仕様でも、Unicodeっぽい文字で識別子になるのは、先頭がLu,Ll,Lt,Lm,Lo,Nl、二文字目以降はMn,Mc,Nd,Pcが追加、という感じだった。これらが具体的にどんな文字かは良く知らないが、多分日本語はLoばかりだと思う。Loばかり。熱い響きだな。
正規化もされるようで、ECMAScriptはNFC、PythonはNKFCを通すようだ。まあ、どうせならそれくらいはしたいよな。日本語だと別にそこまでしなくても全く困らないけど。つーか正規化は定義時以外も掛かるから若干重そうだが。まー富豪だからそのくらいはいいのか。日本語感覚だとNKFCはやりすぎ感もあるが。
せっかくだから「perl unicode identifier」とか「ruby unicode identifier」とか検索してみた。Perlも対応なのかなあ、よく分からん。正規化はしないのかも。Rubyはもっと分からん。
はっ。もしかして正規化の掛かる言語の場合、アルファベットの識別子を一箇所間違って全角で書いても通るのか?
試しにMSのJScriptに簡単なコードを掛けてみた。「エラー: 文字が正しくありません。」とか出た。
ツマンネー。
結局、仕様書だけのアレなのかな、JSの場合。まあ、JSであってECMAScriptではない、のか。
うーむ、どこかで試してみたいなあ。Python3落ちてねーかな。いや、落ちてるけどさ。インストールしないで使える奴無いかな。こんな感じで。これだと2.5だから試せないですが。サンドボックスだからライブラリの制約もあるしな。それは当然だけどな。
まあ、何だか微妙に面白い時代になっているのだなあ、と改めて思うのであった。いずれ問題点も洗い出され、色々なプログラム言語での実装も進むのかもしれないな。UCDに依存するならば、別に対応すること自体は大した手間でもなさそうな気もするし。
多分全く使わないスけどね。
と、ここでオチにするつもりだったが、DSLでは必要かもなあ。エロゲー会社の時に激しく必要に迫られてマジに5分ででっち上げた超糞スクリプトとかも、拡張するうちに変数とか必要になって、変数名は日本語通す仕様にしてたし。NFCとか通せばさらに良かったかもしれん。やってなかったし、特に問題無かったけど。日本語では必要感じないよな。