LINUX.ORG.RU

simdjson 4.0.0 и 4.0.1

 , , , ,


1

2

12 и 13 сентября состоялись выпуски 4.0.0 и 4.0.1 высокопроизводительной, SIMD-оптимизированной, библиотеки simdjson.

Значительные изменения:

  • Добавлен API builder для сериализации структур данных в строку JSON:
std::vector<std::vector<double>> c = {{1.0, 2.0}, {3.0, 4.0}};
std::string json = simdjson::to_json(c);
  • Добавлена экспериментальная поддержка статической рефлексии стандарта C++26 (подробнее о компиляторах: p2996/README.md), позволяющая производить сериализацию и десериализацию данных пользовательских типов:
struct Car {
    std::string make;
    std::string model;
    int64_t year;
    std::vector<double> tire_pressure;
};
void f() {
    Car c = {"Toyota", "Corolla", 2017, {30.0, 30.2, 30.513, 30.79}};
    std::string json = simdjson::to_json(c);
}

или

struct Car {
    std::string make;
    std::string model;
    int year;
    std::vector<float> tire_pressure;
};
std::string json = R"( { \"make\": \"Toyota\", \"model\": \"Camry\", \"year\": 2018,
       \"tire_pressure\": [ 40.1, 39.9 ] } )";
simdjson::ondemand::parser parser;
simdjson::ondemand::document doc = parser.iterate(simdjson::pad(json));
Car c = doc.get<Car>();
  • На 10-70% увеличена скорость сериализации.
  • Другие оптимизации и исправления ошибок.
  • В версии 4.0.1 исправлена совместимость со старыми версиями CMake.

>>> Подробности на GitHub

★★★★★

Проверено: hobbit ()
Ответ на: комментарий от ann_lortemp2

Старое, от конкурента: https://github.com/miloyip/nativejson-benchmark. Я собирать не пробовал.

Но лучше бы добавить в https://github.com/stephenberry/json_performance.

dataman ★★★★★
() автор топика
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от splinter

О какой железке речь? Вроде заявлена работа на любом 64-битном процессоре.

Softwayer ★★
()
Последнее исправление: Softwayer (всего исправлений: 1)

Выбрать медленный текстовый формат и тратить силы на сложную оптимизацию, вместо выбрать быстрый бинарный формат

sena ★★★
()
Последнее исправление: sena (всего исправлений: 1)
Ответ на: комментарий от sena

быстрый бинарный формат

А дампы Википедии в нём выкладывают?

dataman ★★★★★
() автор топика
Ответ на: комментарий от question4

Каким бинарным форматом заменить JSON?

  • protobuf
  • asn
  • tlv

И прям до жопы всяких местячковых «у нас новый вариант сериализации».

bdrbt
()
Ответ на: комментарий от bdrbt

protobuf кал, он тащит «схему» в данных, а вот MsgPack нашечка!

И почему все забыли самый популярный на свете бинарный формат - TL используемый внутри Telegram и VK?

https://github.com/VKCOM/tl https://core.telegram.org/mtproto/TL

JSON супер удобен для конфигов. ini-файлы слишком просты, иногда хочется бахнуть список. YAML - ущербен требованиями к ссаным пробелам как Python. JSON прям золотая середина. Конфиг nginx не json, но очень похож на него и на простую сишную программку. Лишнюю кавычку в JSON поставить не развалишься и всё очееь читаемо, а вот ссаные отступы в YAML уже полную дурку шизов наплодили и выпишут их не скоро!

lesopilorama
()
Последнее исправление: lesopilorama (всего исправлений: 3)
Ответ на: комментарий от bdrbt

protobuf,asn,tlv

ASN помнится что Abstract Syntaxis Notation - язык описания данных. Кто/что включает-наследует-содержит-ссылается,типы,длины,флаги,коды..в тесной связи с X.500

A в бинарь отродясь данные кодировались разными BER,DER (и прочими *ER). Боюсь ошибиться, но сдаётся что данные описанные в ASN могут кодироваться и по правилам TLV и в protobuf.

MKuznetsov ★★★★★
()
Ответ на: комментарий от dataman

А как же TOML?

Для простых конфигов — TOML легче читается. Для сложных ситуаций с многократными вложениями массивов и пар ключ-значение — JSON лучше приспособлен. Да, такие ситуации желательно избегать, но если уж влип, JSON менее многословен.

question4 ★★★★★
()
Ответ на: комментарий от dataman

Это называется .ini файлы. Виндовозное блевотное поделие с квадратными скобочками этими. Пишите везде JSON, он проще некуда.

Посмотрел подробнее. Это какая-то адовая помесь .ini-файлов и JSON-структур) Бугага, вот клоуны. Нельзя просто так взять и сразу поюзать няшный JSON.

lesopilorama
()
Последнее исправление: lesopilorama (всего исправлений: 1)
Ответ на: комментарий от bdrbt

до жопы всяких местячковых «у нас новый вариант сериализации»

Вот в этом и проблема. Эталонные реализации не покрывают все возможные случаи использования, других библиотек нет, спецификации помимо их исходников нет. У bson хотя бы есть MongoDB (хотя прочие реализации не выглядят живыми).

tlv

Tag-length-value — отличная идея, но конкретные форматы не всегда документируются. Я как-то несколько недель не мог найти спецификации нестандартных чанков FLIC. С XML и JSON проще, что есть возможность давать человекочитаемые названия.

asn

Что это такое? ASN.1, существующий уже лет 40? Если он удобен, почему его не начали использовать для чего-либо помимо сетевых протоколов?

protobuf

Заглянул в Википедию и не осилил.

question4 ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.