Erlang/OTP R13Aリリース

3月17日に Erlang/OTP の次期バージョン R13A がリリースされた。これはβリリースであり、正式版となる R13B は4月29日にリリースされるとのこと。

このリリースのハイライトとして、トップページでは以下の内容が紹介されている:

  • SMP/マルチコア環境における大幅なパフォーマンス改善
  • Unicode サポートの追加
  • WxErlang(GUIライブラリ WxWidgets に対するバインディング)の追加
  • リリース管理ツール RelTools の追加

マルチバイト圏の人間としては、何と言っても Unicode サポートの追加が嬉しい。仕様は EEP10 に基づいているとのことなので、一通り目を通してみた。

Erlang/OTP R13A の Unicode サポート

Erlang において「文字列」を表現するには、リストによる方法とバイナリによる方法の二通りがあるが、R13A 以降はそれぞれ次のように変化する。

リスト
R12B までは 0 ~ 255 の整数が iso-8859-1 の1文字を表すと見なされ、0 ~ 255 の範囲の整数のみを含むリストが「文字列」として扱われていた。R13A 以降はこれが 0 ~ 16#10fff の範囲に拡張され、整数1つは Unicode のコードポイントと見なされるようになる。
Unicode のコードポイントにおける 0 ~ 255 の範囲は iso-8859-1 の文字コードと互換性があるので、
R13A 以降の「文字列」は、R12B 以前の「文字列」の上位互換だと言うことができる。
バイナリ
R12B までは8ビットが1区切りとされ、それぞれが iso-8859-1 の1文字を表すと見なされていた。しかしR13A 以降、バイナリで文字列を表現する場合は UTF-8 でエンコードするのが標準となる。ただし iso-8859-1 他のエンコーディングで扱う方法もある。

要するに、抽象的な概念としての「文字」と、具体的な表現としての「バイナリ」が厳密に区別されるようになった、ということになる。今までの Erlang ではこの区別が曖昧なところがあった。iso-8859-1 の範囲で考える限り、バイト列=文字列と見なして問題なかったからだ。しかし今後は、文字を文字として扱いたいときはリストを用いて操作を行い、外部システムやファイルとのやり取りで具体的なビット表現が必要なときはバイナリとして扱う、という区別が必要になる。

抽象概念としての文字は一意な存在なので、リストを用いた文字列の表現はただ一通りに定まる。”日本語”という文字列を表すリストは
[26085,26412,35486] しかあり得ない。しかしこれをバイナリとして表現する方法は幾通りもあり得る。UTF-8 で表現すれば <<230,151,165,230,156,172,232,170,158>> となり、UTF-16ビッグエンディアンで表現すれば <<101,229,103,44,138,158>> となる。

これから実際にインストールして、動作を確かめてみたい。

One Response

  1. [...] 先日に引き続き、Erlang/OTP R13A の Unicode 対応について調査していく。 [...]

Leave a Reply