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:

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:


(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?


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/nkcelouzpjsgmqtvn...@forum.dlang.org

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


Reply via email to