空白文字かどうかの判定は、なぜこんなに複雑なのか
How hard is it to check for whitespace?

GuavaのisWhitespace実装が妙に複雑に見えたことから、空白文字の定義を掘り下げる。UnicodeのWhite_Spaceは25文字だが、JavaはNO-BREAK SPACEを除外し、Pythonは29文字、JavaScriptはさらに別の集合を採用している。Unicode自体も更新され続けるため、後方互換を保つ言語標準ライブラリにとっては悩ましい問題だ。Guavaは32要素のテーブルと魔法の定数1682554634を使った完全ハッシュ関数で、この判定を高速化している。
名前やグリフを見ただけでは、その文字が空白集合に属するかどうか判断できないことも少なくない。例えばZERO WIDTH SPACE (U+200B)は空白文字ではまったくない。
HNでの議論
31- Whitespace
私は最初の文字が石に刻まれる前からここにいたし、最後の光子が放たれたときにもここにいるだろう。
また、@gmail.com でも連絡可能だ。
(GitHubの通知がたくさん来るので、`@whitespace` を使ったコードは書かないでほしい)
- pixelbeat__
水平方向の空白は区別されるべきだと思う。分割などでほとんどの人が気にするのはそれだからね。
GNU coreutils が各タイプの空白を(クロスプラットフォームで一貫した方法で)どう分類しているかは https://github.com/coreutils/coreutils/blob/master/src%2Fsys... を見てみてほしい。
- smallstepforman
ビットマスクを使えば、もしビット5(何でもいいが)をゼロ=空白と仮定するだけで、デバイスごとに1日あたり何十億ものCPUサイクルを節約できたはずだ。32ビットUnicodeなら、32個のユニークな空白文字が得られる。
8ビットマイコンで育った連中に仕様を書かせるべきだったな。
- exacube
あの魔法の乗数値がどう導出されたかを知りたいなら、既知の値の集合に対する完全ハッシュ関数の導出方法を調べてみてほしい。
この特定の値の集合にどの手法が使われたかはわからないが、ググってみると過去10年で進歩が見られる。
- efilife
このコードはとてもシンプルだが、それでもよくわからない。なぜハッシュが必要なのか、そしてなぜ正規表現より速いのか?私より賢い誰か説明してくれないか?