camomile - ocaml用unicodeライブラリ
TRANSCRIPT
Camomile
OCaml用Unicodeライブラリ 山形賴之
2011年12月29日 京大
Agenda
Unicodeとは?
OCamlとは?
Camomile
Agenda
Unicodeとは?
OCamlとは?
Camomile
ᚠ
あ
A
U+16A0
U+3042
U+0041 Ậ U+1EAC = U+0041 + U+0302 + U+0323
既 U+65E2
旣 U+65E3
文字集合は民族の財産だ!
勝手に統合するな!
Code Set Independeceにこだわる
Character, not glyph
AAAAA ←すべて同じ文字
原則:文字という論理的な対象をコード
論理的とは?
≒意味
でも、既≠旣とかわかりにくい
具体的な形
意味
抽象的な構造
士≠土
既≠旣 とめ、はね、など
0 20000
拡張漢字
30000
Private Zone
F0000 10FFFF E0000
タグ
10000
BMP:よく使われる文字
Plane 1: 特殊記号、歴史的な文字
A 41
Ω CE A9
語 E8 AA 9E
𠀔 F0 A0 80 94
A 0041
Ω 03A9
語 8A9E
𠀔 D840 DC14
A 00000041
Ω 000003A9
語 0000819E
𠀔 00020014
Ậ = Ậ
1EAC
= A + ̂+ ̣ 0041 0302 0323
= A + ̣+ ̂ 0041 0323 0302
NFD:できるだけ分解 NFD(Â+ ̣)=A + ̣+ ̂
NFC:できるだけ合成 NFC(A + ̂+ ̣)= Ậ
NFKD,NFKC: NFKD(カ)= カ NFKD(Dž)= D + z + ̆
Unicode Algorithm
• Unicode collation algorithm (UCA)
• Case mapping algorithm
• Bidirectional algorithm (BIDI)
Agenda
Unicodeとは?
OCamlとは?
Camomile
Haskell ML系言語
OCaml F#
Lisp,Scheme,Erlang
Scala
OCaml vs Haskell
• 関数型言語
–副作用のないプログラミングスタイルを奨励
• Hindley-Milner type systemがベース
–強い静的型付け
–型推論
–多相型
OCaml vs Haskell(続き)
OCaml
Eager
副作用あり
begin … end etc.
独自機能
モジュール
オブジェクト指向
Haskell
Lazy
モナド
オフサイドルール
独自機能
タイプクラス
Agenda
Unicodeとは?
OCamlとは?
Camomile
Camomile
• 基本データ型
• 文字コード変換
• 正規化
• Unicode Algorithms
– UCA (文字列照合)
– Case mappings
• 正規表現
サイト
• Github / yoriyuki / Camomile
• 課題
– ulib
– Unicode 6.X対応
–まともな正規表現エンジン
–バグ、バグ、バグ…