1Redbinはメモリ中のRedの値を正確に保存するためのバイナリフォーマットで、(テキスト表現のフォーマットの場合に必要なパースや値の検証をスキップすることで)高速な読み込みを可能にします。大きくインスパイアされています。Redbinはwordへのバインディング情報もエンコードでき、any-block!型における再帰的なデータも扱えます。よって提供される予定です。将来的にコーデックサブシステムが使用可能になることで、ベースとなる実装がそれを使用するかもしれません。実装上の制約:ロードされるRedbinデータのメモリ上のべーすアドレスは64ビットアラインメントである必要があります。デコードのスピードに最適化されています。必要とされることもあります。値はリトルエンディアンフォーマットで保存されます。構文規則:丸括弧の中の数字はフィールドのバイトサイズを示します。ブロック内のデータタイプ名の後のフィールド名はそのデータタイプの値に対するプレースホルダです。イコールの後のフィールド名は固定値です。バイトの中のレコードペイロードのサイズ圧縮が行われている場合、ヘッダーの後に続くデータは圧縮されたペイロードになります。圧縮アルゴリズムの選択は実装に依存します。シンボルテーブルシンボルテーブルはヘッダーデータの直後に続きます。それはオプショナルで残りのRedbinペイロードにwordが存在する場合にだけ使われるべきです。シンボルテーブルは次の2つのセクションを持ちます。それはコンテキストとwordのシンボルへの参照として使われます。文字列バッファのセクションは64ビットアラインメントを保証するために終端までパディングされたUTF-8エンコードの文字列を含みます。テーブルの中のオフセットは文字列バッファセクションの文字列の始まりから参照される文字列バッファまでのバイトのオフセットです。フィールドはテーブルの中の数々のエントリーを含んでいます。フィールドは(オプショナルな終端のパディングバイトを含む)バイト中の文字列バッファのサイズを示します。デコーディングプロセスの間、これらのシンボルはRed自身のシンボルテーブルにマージされ、オフセットはRedテーブルのシンボルIDの値で置き換えられます。Redbinレコード内のシンボル参照はローディングプロセスの間しか使用されず、Redの内部的なシンボルテーブルエントリへの間接的な参照となります。シンボルテーブルの後には、Redの値が特別なデリメタやエンドマーカーはなしで連続したれコードとして保持されています。フィールドで始まります。タイプ各レコードの説明は以下の通りです。n/aheader/type=0この空のタイプのスロットは値を適切に64ビットにアラインメントするために使われます。フィールドはブロックの参照へのオフセットを示すゼロベースの整数値です。フィールドはブロックの中に保持されている値の数を保持します。ブロックの値は単純にブロックの定義の後に続けられ、セパレータや区切り文字は必要ありません。未定header/type=6block!と同様のエンコーディングルールです。フィールドはブロックと同様の意味を持ちます。サブフィールドは文字列のエンコーディングフォーマットを示します。値として有効なのは1、2、4のみです。フィールドは保存されている文字列のコードポイントの番号を含んでいます。1)までのコードポイントがサポートされます。文字列はUCS-1、UCS-2またはUCS-4のフォーマットでエンコードされます。フィールドにもカウントされません。必要な場合、末尾のパディングが1から3のNULバイトで行われ、32ビットを境界とした文字列レコードのアラインの終端を示します。未定header/type=8header/unit=1|2|4文字列と同様のエンコーディングルールです。未定header/type=9文字列と同様のエンコーディングルールです。フィールドを64ビットの値に適切にアラインするために、必要なパディングフィールドが追加されます。未定header/type=14header/no-values=0|1header/stack?=0|1header/self?=0|1コンテキストはfunction!、object!および派生する型において内部的に使用されるRedの値です。コンテキストは連続的な2つのテーブルを含みます。1つはシンボルの参照として表現されるコンテキストの中のwordエントリのリストです。1つが1つ目のテーブルのシンボルそれぞれに対して関連付けされる値です。フィールドはコンテキスト内のエントリの数を示します。コンテキストレコードはルートレベルでのみ存在でき、ネストすることはできません。フラグがセットされている場合、続くシンボルには値がない(空のコンテキストである)ことを示します。フラグがセットされている場合、値はヒープではなくスタックに確保されます。)をハンドルできるかを示すために使われます。フィールドはcontext!型の値を示すRedbinファイル内のレコードセクションの開始位置からのオフセットです。コンテキストはRedbinのレコードリスト内のwordのレコードの前に位置している必要があります。場合はグローバルコンテキストになります。型のレコードが続き、デコーダにより正しいコンテキスト内のwordにその値がセットされる必要があります。これは指定のコンテキストへ一連の値を与えるコストが大きすぎる(主にグローバルコンテキストの名前と値のペアを渡すような)場合に、wordの値をアドホックにエンコードするための名前と値のペアを形成します。未定header/type=16word!と同様です。未定header/type=17word!と同様です。未定header/type=18word!と同様です。未定header/type=19word!と同様です。ジャンプテーブルへのオフセットです。ジャンプテーブルへのオフセットです。そのop!型の値の元となったaction、nativeまたはfunctionの名前(グローバルコンテキストで定義されたものに限ります)を表します。未定header/type=25block!と同じエンコーディングルールです。TBDheader/type=26block!と同じエンコーディングルールです。未定header/type=27block!と同じエンコーディングルールです。未定header/type=28block!と同じエンコーディングルールです。フィールドは保持されているビットの数を示しています。ビットは8の倍数で切り上げて丸められます。ビットはbitset!のseriesバッファのメモリダンプになります。バイトの順番は保持されます。フィールドは次のレコードが32ビットアラインになるようにNULバイトで埋められる必要があります。オフセットを示します。その関数へのアリティを保持します。vectorエレメントのタイプサイズの種類を示し、1、2、4、8バイトになります。フィールドは値のリストを保持します。1か2の場合、)次のレコードの境界が32ビットになるように、NULバイトで埋められる必要があります。未定header/type=38percent!の値は64ビット浮動小数点で保持されます。フィールドのオフセットが64ビット値になるようにアラインするため、オプショナルなパディングフィールドが追加されます。フィールドはmap内に保持される(キーと値を合わせた)要素の数です。mapの要素はlengthで示される終わりまで単純に連続し、セパレータやデリメタは必要ありません。未定header/type=41block!と同じエンコーディングです。未定header/type=43time!の値は64ビット浮動小数点数で保持されます。フィールドのオフセットが64ビット値になるようにアラインするため、オプショナルなパディングフィールドが追加されます。未定header/type=44header/unit=1|2|4string!と同じエンコーディングルールです。未定header/type=45header/unit=1|2|4string!と同じエンコーディングルールです。同様)32ビットintegerでパックされます。timeは64ビット浮動小数点数で保持されます。header/type=255この特別なレコードタイプはany-block!またはobject!のすでにロードされた値に対する参照を保持します。これはRedbin内での循環参照を可能にします。参照は(ルートの値がblock内に保持されていると仮定して)パスからロードされた値への参照として作成されます。フィールドは最後の値になるまで、内部を参照するべきseriesかobjectを示します。フィールドは内部参照するインデックスの数を示します。インデックスの1つがobjectを指している場合、それはobjectの対応するフィールド(0の場合は1つ目のフィールド、1の場合は2つ目フィールド・・・と続きます)を参照します。全てのインデックスはゼロベースです。