Cerealed v0.6.1: even less boilerplate for binary serialization

Atila Neves via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Mon Aug 3 04:51:22 PDT 2015


On Monday, 3 August 2015 at 11:43:15 UTC, Per Nordlöw wrote:
> On Monday, 3 August 2015 at 09:21:50 UTC, Atila Neves wrote:
>> http://code.dlang.org/packages/cerealed
>>
>> What's new?
>>
>> * Performance improvements
>> * New UDAs for networking packets for even less required 
>> boilerplate
>>
>> The first new thing is self-explanatory. The second one is 
>> explained briefly in this blog post:
>>
>> https://www.reddit.com/r/programming/comments/3flnlt/cerealed_a_d_library_for_declarative_binary/
>>
>> (also on HN but you know how that goes)
>>
>> The summary is you can now write this:
>>
>>     struct UdpPacket {
>>         static struct Header {
>>             ushort srcPort;
>>             ushort dstPort;
>>             ushort length;
>>             ushort checksum;
>>         }
>>
>>         enum headerSize = unalignedSizeof!Header;
>>         alias header this;
>>
>>         Header header;
>>         @LengthInBytes("length - headerSize") ubyte[] data;
>>     }
>>
>> Code? Who needs code when the compiler can write it for you?
>>
>> Atila
>
> 1. Are there any convenience functions similar to msgpack's 
> pack() and unpack() providing compactness and elegance as
>
>     import msgpack;
>     auto x  = [1,2];
>     assert(x.pack.unpack!typeof(x) == x);


Yes. `cerealise` and `decerealise`. The former is slightly weird 
for performance reasons. It takes a lambda that tells it what to 
do with the resulting bytes.

import cerealed;
auto x = MyStruct();
x.cerealise!(bytes => writeln(bytes));

ubyte[] bytes = [...];
auto x = bytes.decerealise!MyStruct;


>
> 2. How does the Cereal performance compare to Msgpack after the 
> recent optimizations?

Close with LDC and DMD, faster with GDC: 
http://forum.dlang.org/post/nkcelouzpjsgmqtvnonq@forum.dlang.org

I haven't even tried optimising it myself though, I just merged a 
contribution from someone else.

Atila



More information about the Digitalmars-d-announce mailing list