Вроде как библиотека хорошая. 0 — внешних зависимостей от остальных
библиотек. Но …
1) сильно завязана на платформы с ОС (thread, mutex, process, files).
2) много разных модулей "мох и болото".
3) По полной используется STL.
4) местами г..код.
Отвязал от ОС. Попробовал скомпилировать модуль JSON. На стандартным STL.
результат:
#include "Poco/JSON/JSON.h"
#include "Poco/JSON/Parser.h"
#include "Poco/Dynamic/Struct.h"
#include <assert.h>
using namespace Poco::JSON;
using namespace Poco::Dynamic;
using Poco::DynamicStruct;
void test_poco () {
std::string json = "{ \"test\" : null }";
Parser parser;
Var result;
try
{
result = parser.parse(json);
}
catch(JSONException& jsone)
{
std::cout << jsone.message() << std::endl;
}
assert(result.type() == typeid(Object::Ptr));
Object::Ptr object = result.extract<Object::Ptr>();
assert(object->isNull("test"));
Var test = object->get("test");
assert(test.isEmpty());
Poco::Nullable<int> test2 = object->getNullableValue<int>("test");
assert(test2.isNull());
DynamicStruct ds = *object;
assert(ds["test"].isEmpty());
const DynamicStruct& rds = *object;
assert(rds["test"].isEmpty());
}
П.С.
Статистика по больнице.
Тема не подъёмная.
Около 50кБ левый regexp " Perl-Compatible Regular Expressions ".
Есть абстрактный уровень типов. Poco::Dynamic::VarHolder и Poco::Dynamic::Var около 15кб.
Сам модуль JSON 7,5kb.
Как подозревал много занимают не аллокаторы а итераторы. std::basic_ios ХХХ 5кб, std::istreambuf_iterator ХХХ 20кб ,
std::оstreambuf_iterator ХХХ 10кб и тд.
Кому интересно файл мап.
В последнем столбике размер в байтах.
map.txt