Rust では ASCII 以外の文字を含む識別子が 2020-01-22 現在 nightly で利用可能です. CJK 圏からの要望がないと永遠に安定化されない気がするので, みなさんこの機能を使ってフィードバックしてあげてください.
2021-06-22 追記 この機能は2021年6月17日にリリースされた Rust 1.53 で安定化されました. stable 版でも #![feature(non_ascii_idents)]
なしで日本語識別子を使えます.
本論
現時点でこの機能を有効化するには #![feature(non_ascii_idents)]
というアトリビュートをコードの冒頭で設定します. 例えば:
#![feature(non_ascii_idents)]
fn main() {
let あ = 'あ';
println!("{}", あ);
}
そして nightly でコンパイルします: cargo +nightly build
など.
識別子について
unicode 識別子は Unicode Consortium 側で想定されていて, Rust では識別子としては次の 2 パターンが許されます (RFC または unstable book 参照).
- 最初の文字が XID_start で, それ以降 XID_continue が続くもの.
- 最初の文字がアンダースコア
_
で, それ以降 XID_continue が 1 文字以上続くもの.
残念ながら絵文字は使えません. 日本語では句読点 、
, 。
や括弧 「
, 」
などは禁じられています. リンクを踏むと使用可能なコードポイントの一覧が見れます. また, 同一の見た目になるが複数の utf-8 表現が可能な識別子 (合成済み文字を含む場合など) は同一の識別子として取り扱われます.
議論
何に使うんだ, と思われるかもしれませんが, 例えば円周率を π
に束縛したりとギリシャ文字を使うのが自然な変数にギリシャ文字を使えたり, 適切な識別子を英語で捻り出す (そしてわかりづらい識別子になり可読性が落ちる) 手間が省けたりと, 少し考えただけでもメリットがいろいろと思い付きます. もちろんデメリットもいろいろありますが. このあたりのことは既に詳しく論じている方がいるので, そちらをご覧ください.
- 日本語識別子の必要性 (slideshare)
- [コーディングスタイル]識別子を日本語に切り替えていく (Qiita)
- プログラム日本語で書けばいい気がするけど (hateblo)
- 識別子に日本語を使うことについての考察 (Qiita)