2008-05-21

C++0x N2601 60進数リテラル

目には目を、歯には歯を、とは言ったものの、奴隷の目を潰したり、腕をヘシ折ったりしても、金さえ払えばよしとされる、すばらしいハンムラビ法典の信奉者諸君、私は、すべての文字文化に理解のある、心の広いhitoである。

さて、今回は、2008年5月のC++0xのメーリングリストの中から、N2601を紹介しよう。一体どういう提案なのかというと、60進数リテラルをサポートしようというものだ。60進数というのは、現実世界では良く使うのだ。例えば、我々は慣習的に、時間を60進数で表す。しかし、60進数を表現するには、文字が足りない。大文字小文字のアルファベットを使うのは、まったく直感的ではない。そこで、昔から良く使われていた文字を使おうというものだ。ペーパーの言葉を借りると、「誰にも遣われてゐない表記法を發明するよりも、古バビロニア時代から用ゐられてゐて、歴史的に実践されてゐた楔形文字を使いませう」、と言う事になる。

そう、我々はハンムラビ法典が記されたのと同じ文字を使って、60進数を表記するのだ。君達の言葉でいえば、温故知新という事だね。ワーオ! I'm a confucianist!

具体的には、Unicode 5.0.0 (July 2006) から採用された、CUNEIFORM Numberを用いる。

使い方はとても簡単だ。例えば、896を表したいとしよう。 60進数では、896 == 10×60+4×60+50+6 となるので、"𒌋𒐼𒐐𒐋" となる。君のOSが楔形文字を入力する環境に恵まれていないとしても、問題は無い、例えばHTMLのエンティティでは、𒌋𒐼𒐐𒐋、という表記になる。C++では、\U0001230B\U0001243C\U00012410\U0001240Bだ。もし君の環境に、楔形文字フォントがインストールしてあるならば、これは読めるはずだ。Unicodeで表現できるすべての文字のフォントをインストールしておくことは、とても重要だ。マイクロソフトは、その重要さがわかっているからこそ、Windows Vistaに、300メガバイト以上ものフォントを標準で入れておくことを決断したのだ。

ちなみに、日付は 2008-04-01 である。つまりは、そういうことである。

No comments: