fk0, легенда (09.02.2017 21:03 - 21:20, просмотров: 2077)
EvgenyCD! Смотри ссылку! Я понял, что это круче чем swig, например, в определённых обстоятельствах. Правда руки применять надо. http://classdesc.sourceforge.net/
Ecolab я не раскурил, не осилил. Только очень чувствую за этим стоят очень замечательные идеи.
Что касается применения рук, то там всё просто. Оно парсит классы (структуры) и генерит конвертеры твоих типов в строку и обратно. Ну для элементарных типов (кроме enum) ничего не генерит, там всё элементарно. А другие неэлементарные типы получаются рекурсивным применением, причём это она сама делает. Ей только, когда её запускаешь, надо сказать как твоя главная фунция (::dump, ::pack, ::xml_pack...) будет называться к которой последовательно будут рекурсивно применяться все члены (структур/классов).
Короче говоря, можно в итоге сдампить C/C++ структуры или классы в текст, бинарный формат, да что угодно, включая в структуру на другом языке программирования. И в обратную сторону то же самое. О чём xml, json или javaClass как бы намекают (и я не понял, почему для Ecolab там нет tcl, а tcl сделан как-то странно).
А что самое тяжёлое в связке с другими ЯВУ нормального уровня (по сравнению с C/C++)? Что в последних структур нет. Есть списки, массивы, объекты (которые итерируются/энумерируются как те же списки или массивы). И если у тебя API, где всё на структурах -- тяжело связать. Swig, например, такое генерирует, смотреть страшно... Особенно если API не функциональный, а message passing, когда туда-сюда структуры гоняются. И для отладочных целей это ещё сдампить уметь -- очень замечательная идея тоже.
Функции конечно остаются за бортом (swig и это, кстати, решает). Но функций немного и их можно написать руками, как и конверсии простых типов. Тем более нужны далеко не все. Хотя тут ещё пораскинуть мозгами: C/C++ опять же недоязыки в том смысле, что аргументы функций опять же не могут быть представлены объектом языка (таким же как переменная), а являются каким-то грязным хаком. Иначе как та же структура конвертировались бы на ура. Может какой-то враппер сделать, чтоб парсил декларации, превращал их в структуры. И конвертор готовой структуры в набор аргументов потом. Но это как-то уже сложностей много. :-(
[ZX]