The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Size Limits
===========

Remove array size limit. Size encoding should be 

    0x0000 - 0x7FFF =>  size is 0 - 32767
    0x8000 - 0xFFFF =>  this is the low 15 bits of the size with another
                        16 bits to follow

Version
=======

Add version encoding. Version object has tag 0xFF and follows the FMB
header. The following u16 gives the schema number. If no version
present schema version 1 is assumed. Bit 16 of the schema number is set
if this stream might contain backrefs. This is a hint to the decoder
that it needs to remember objects that it has created so that it can
refer back to them. See "Back References" below.

Objects
=======

Add a new tag (0x13) for real objects and rename 0x11 has HASH. Objects
are serialised in the same way as hashes except that the object class
name is encoded before the element count using normal string encoding.

The encoder and decoder should provide hooks to map the class names
stored in the file to some portable variant. So for example a Perl
encoder might want to translate classnames like

    MyApp::UserData
    MyApp::SessionState

into

    UserData
    SessionState
    
and then a JS or PHP decoder would remap those names to whatever
classes it uses.

Back References
===============

Add a new tag (0x14) for back references to previously encoded items.
When an item that has already been encoded is encountered again a
reference to it will be written as 0x14 followed by the ordinal position
of the original object in the stream encoded using the extended array
size encoding described above.

It is possible for an object to refer to itself:

    my $hash = { };
    $hash->{abc} = $hash;
    
    $enc->encode( $hash );
    
    0x11 0x01 0x00 0x61 0x62 0x63 0x00 0x14 0x00 0x00
    \____________/ \_________________/ \____________/
      hash, 1 el          'abc'          back ref #0

At the discretion of the encoder this technique may be used for repeated
scalars (numbers and strings) as well as hashes and arrays if this would
make the encoded data more compact.