haxe vs unicode

Post on 26-Jan-2015

125 Views

Category:

Software

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Ryusei

@mandel59

筑波大生

某校コン部OB

Haxe vs UnicodeRyusei Yamaguchi @mandel59

Haxe

見た目はAconScript

パターンマッチがある

型推論がある

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

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

Haxeのターゲット

Adobe Flash

C++

C#

Java

JavaScript

Neko VM

PHP

Python 3

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

環境依存のコード

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

1117 10

Encoding Formsの違い

0000 0041

0000 042F 0000304B 00029E3D

0041 042F 304B D867 DE3D

41 D0 AF E3 81 8B F0 A9 B8 BD

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

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)

ターゲットごとの仕様

環境ごとの仕様

11

17

10

Issue #3072Unicode support

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

haxe.Utf8

by Code Points操作を提供する

haxe.Utf8

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

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

haxe.Utf8

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

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

haxe.Utf16

未実装

haxe.Ucs2

そもそもUCS-2はdeprecated

なんで今更導入するんだ

haxe.Ucs2

JSやFlashがUCS-2?

いやUTF-16でしょ?

haxe.Ucs2

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

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

想定される使い方

ネイティブ Sing haxe.Ucs2

変換

処理

haxe.Ucs2

変換

ネイティブ Sing

問題点

使い方が面倒くさい

Unifill

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

Unifillの使い方

ネイティブ Sing

Unifillのメソッドで処理

ネイティブ Sing

Unifill

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

1010 10

課題

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

現在の標準APIは地雷

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

ank you!

top related