Информация об изменениях

Сообщение Re[5]: YAS: Yet Another Serialization от 26.10.2016 20:43

Изменено 26.10.2016 20:45 niXman

спасибо PM за поддержку по моей просьбе. коммит приняли.
сравнительные результаты:



сейчас проделано следующее:
1. почищен код, пофикшены ворнинги, убраны олд-стайл-касты и всякая фигня вроде '&str[0]'.
2. выброшена изрядная часть кода.
3. добавлены лимиты.
4. повышена производительность.
5. добавлен компактный(без использования varint) тип бинарных архивов(зовется yas_compact). (гораздо более быстрый, чем при использовании varint, но экономия в размере ниже)
6. в процессе реализация компактных архивов с использованием varint. (гораздо более медленный чем yas_compact, но экономия в размере выше)
7. добавлен новый тип архивов — object. это почти как json, но намного производительнее, и с некоторыми отличиями от json.
пример создания сложного, вложенного объекта:
    int v0=33;
    bool v1=false;
    double v2=3.14;
    bool v3=true;
    int v4=44;
    int v5=55;
    auto o0 = YAS_OBJECT("object-0", v0, v1, v2);
    auto o1 = YAS_OBJECT("object-1", v3, v4, o0, v5);
    auto o2 = YAS_OBJECT("object-2", 5, 6, o1, true);
    auto o3 = YAS_OBJECT("object-3", 1, 2, o2, 3, 4, false);

    yas::mem_ostream os;
    yas::json_oarchive<yas::mem_ostream> oa(os);
    oa & o3;

будет сгенерен такой объект:
{"1":1,"2":2,"o2":{"5":5,"6":6,"o1":{"v3":true,"v4":44,"o0":{"v0":33,"v1":false,"v2":3.14000000},"v5":55},"true":true},"3":3,"4":4,"false":false}

в форматированом виде:
{
    "1": 1,
    "2": 2,
    "o2": {
        "5": 5,
        "6": 6,
        "o1": {
            "v3": true,
            "v4": 44,
            "o0": {
                "v0": 33,
                "v1": false,
                "v2": 3.14000000
            },
            "v5": 55
        },
        "true": true
    },
    "3": 3,
    "4": 4,
    "false": false
}

этот тип архива будет зваться yas_object.
от json отличается тем, что верхний уровень всегда объект, т.е. {}. верхний уровень не может быть массивом или значением.
скорость сериализации во много раз выше.
более подробно расскажу позже.

это подготовка к json архивам в составе YAS.

все это пока что у меня локально. недели через две вылью в паблик.
Re[5]: YAS: Yet Another Serialization
спасибо PM за поддержку по моей просьбе. коммит приняли.
сравнительные результаты:

(https://github.com/STEllAR-GROUP/cpp-serializers/blob/master/images/time.png)

сейчас проделано следующее:
1. почищен код, пофикшены ворнинги, убраны олд-стайл-касты и всякая фигня вроде '&str[0]'.
2. выброшена изрядная часть кода.
3. добавлены лимиты.
4. повышена производительность.
5. добавлен компактный(без использования varint) тип бинарных архивов(зовется yas_compact). (гораздо более быстрый, чем при использовании varint, но экономия в размере ниже)
6. в процессе реализация компактных архивов с использованием varint. (гораздо более медленный чем yas_compact, но экономия в размере выше)
7. добавлен новый тип архивов — object. это почти как json, но намного производительнее, и с некоторыми отличиями от json.
пример создания сложного, вложенного объекта:
    int v0=33;
    bool v1=false;
    double v2=3.14;
    bool v3=true;
    int v4=44;
    int v5=55;
    auto o0 = YAS_OBJECT("object-0", v0, v1, v2);
    auto o1 = YAS_OBJECT("object-1", v3, v4, o0, v5);
    auto o2 = YAS_OBJECT("object-2", 5, 6, o1, true);
    auto o3 = YAS_OBJECT("object-3", 1, 2, o2, 3, 4, false);

    yas::mem_ostream os;
    yas::json_oarchive<yas::mem_ostream> oa(os);
    oa & o3;

будет сгенерен такой объект:
{"1":1,"2":2,"o2":{"5":5,"6":6,"o1":{"v3":true,"v4":44,"o0":{"v0":33,"v1":false,"v2":3.14000000},"v5":55},"true":true},"3":3,"4":4,"false":false}

в форматированом виде:
{
    "1": 1,
    "2": 2,
    "o2": {
        "5": 5,
        "6": 6,
        "o1": {
            "v3": true,
            "v4": 44,
            "o0": {
                "v0": 33,
                "v1": false,
                "v2": 3.14000000
            },
            "v5": 55
        },
        "true": true
    },
    "3": 3,
    "4": 4,
    "false": false
}

этот тип архива будет зваться yas_object.
от json отличается тем, что верхний уровень всегда объект, т.е. {}. верхний уровень не может быть массивом или значением.
скорость сериализации во много раз выше.
более подробно расскажу позже.

это подготовка к json архивам в составе YAS.

все это пока что у меня локально. недели через две вылью в паблик.