haxe vs unicode

30
Ryusei @mandel59 筑波大生 某校コン部OB

Upload: ryusei-yamaguchi

Post on 26-Jan-2015

117 views

Category:

Software


2 download

DESCRIPTION

HaxeでUnicode文字列を取り扱う際に直面する闇

TRANSCRIPT

Page 1: Haxe vs Unicode

Ryusei

@mandel59

筑波大生

某校コン部OB

Page 2: Haxe vs Unicode

Haxe vs UnicodeRyusei Yamaguchi @mandel59

Page 3: Haxe vs Unicode

Haxe

見た目はAconScript

パターンマッチがある

型推論がある

一般化代数データ型 (GADTs) がある

Page 4: Haxe vs Unicode

https://github.com/HaxeFoundation/haxe/pull/2759#issue-29453259

Page 5: Haxe vs Unicode
Page 6: Haxe vs Unicode

Haxeのターゲット

Adobe Flash

C++

C#

Java

JavaScript

Neko VM

PHP

Python 3

Page 7: Haxe vs Unicode

class Hello { public static function main() { trace("Hello, 世界🌏".length); } }

Page 8: Haxe vs Unicode
Page 9: Haxe vs Unicode

Page 10: Haxe vs Unicode

環境依存のコード

class Hello { public static function main() { trace("Hello, 世界🌏".length); } }

1117 10

Page 11: Haxe vs Unicode

Encoding Formsの違い

0000 0041

0000 042F 0000304B 00029E3D

0041 042F 304B D867 DE3D

41 D0 AF E3 81 8B F0 A9 B8 BD

Page 12: Haxe vs Unicode

Indexの数え方の違い

0 1 2 3

41 D0 AF E3 81 8B F0 A9 B8 BD

0 1 2 3 4 5 6 7 8 9

Page 13: Haxe vs Unicode

Indexの数え方の違い

0 1 2 3

41 D0 AF E3 81 8B F0 A9 B8 BD

0 1 2 3 4 5 6 7 8 9

s.substr(2, 2)

s.substr(3, 7)

Page 14: Haxe vs Unicode

ターゲットごとの仕様

Page 15: Haxe vs Unicode

環境ごとの仕様

11

17

10

Page 16: Haxe vs Unicode

Issue #3072Unicode support

https://github.com/HaxeFoundation/haxe/issues/3072#issue-34554043

Page 17: Haxe vs Unicode

haxe.Utf8

by Code Points操作を提供する

Page 18: Haxe vs Unicode

haxe.Utf8

現状UTF-8環境でしか使えない!

クロスプラットフォームじゃないじゃん

Page 19: Haxe vs Unicode

haxe.Utf8

decodeは可変長のUTF-8を固定長のISO-8859-1に変換するメソッド

encodeは固定長のISO-8859-1を(ry

Page 20: Haxe vs Unicode

haxe.Utf16

未実装

Page 21: Haxe vs Unicode

haxe.Ucs2

そもそもUCS-2はdeprecated

なんで今更導入するんだ

Page 22: Haxe vs Unicode

haxe.Ucs2

JSやFlashがUCS-2?

いやUTF-16でしょ?

Page 23: Haxe vs Unicode

haxe.Ucs2

固定長だからO(1)アクセス?

文字列処理全体のオーダーは?

Page 24: Haxe vs Unicode

想定される使い方

ネイティブ Sing haxe.Ucs2

変換

処理

haxe.Ucs2

変換

ネイティブ Sing

Page 25: Haxe vs Unicode

問題点

使い方が面倒くさい

Page 26: Haxe vs Unicode

Unifill

using unifill.Unifill; class Hello { public static function main() { trace("Hello, 世界🌏”.uLength()); } }

Page 27: Haxe vs Unicode

Unifillの使い方

ネイティブ Sing

Unifillのメソッドで処理

ネイティブ Sing

Page 28: Haxe vs Unicode

Unifill

using unifill.Unifill; class Hello { public static function main() { trace("Hello, 世界🌏”.uLength()); } }

1010 10

Page 29: Haxe vs Unicode

課題

Unifillの仕組みを標準APIに入れる

現在の標準APIは地雷

実装の洗練・最適化を行う

Page 30: Haxe vs Unicode

ank you!