Firefox 25(Nightly) で新たに構造体チックなのと数値リテラルが実装された
- 578700 – (harmony:bindata) [meta] Harmony binary data objects
- 894026 – Implement BinaryIntegerLiteral and OctalIntegerLiteral
Binary Data Object
新たに数値型として、
- uint8
- uint16
- uint32
- uint64
- int8
- int16
- int32
- int64
- float32
- float64
の関数。
そして、上記の型関数などを引数にしてバイナリーデータ的なArrayやStructorを定義できるコンストラクタとして
- ArrayType
- StructType
が定義された。
この2つは、コンストラクタを返すコンストラクタである。(←何だか意味不明だw)
var Vec3 = new ArrayType(float32, 3); // float32型を3つ Vec3.elementType; // float32 (ArrayTypeで指定した型) Vec3.length; // 3 Vec3.bytes; // 12 (flaot32(4byte) * 3) var pos = new Vec3([1,2,1]);
var Color = new StructType({ r: uint8, g: uint8, b: uint8 }); Color.bytes; // 3 (r,g,b で uint8(1byte) * 3) Color.fields; // [object Object] Color.fields.r; // uint8 var c = new Color; c.r = 10; c.g = 10; c.b = 10; c.a = 10; // => ReferenceError: reference to undefined property
var Cube = new StructType({ pos: Vec3, color: Color, length: uint8 }); // 作った型を指定可能 var c = new Cube; c.color = { r: 10, g: 10, b: 10 }; c.pos = [10, 10, 0]; c.length = 30;
という具合に、新たな型として new ArrayType すると、コンストラクタが生成される仕組み。因みに、ArrayType,StructType も作った型も明示的に new する必要がある。
門外漢で詳しくないが、グラフィック等を扱おうとした時などに有用になってくるのではないだろうか。
詳しくは、上記のリンクにあるテストコードを見てね。(本当に門外漢なので、詳しい説明ができないorz)