> В С то же самое, только ещё хуже: вместо классов структуры, malloc/free для этих структур в непонятных местах, после выделения памяти не забыть вызвать инициализирующую эту структуру функцию, перед уничтожением не забыть вызвать функцию-деструктор, а функции, работающие со структурами, должны принимать указатели на структуры или указатели на указатели на структуры, Всё так.
Но при этом это всё происходит в явном виде.
Я могу взять структуру, заинитить там одно поле и пульнуть в какую то другую функцию и получить результат.
В крестах оно обязательно вызовет и конструктор и деструктор, и там будет куча неочевидного месива.
Деструкторы тоже вызываются не всегда очевидно как.
https://github.com/eranif/codelite/issues/3355
трейс вокруг LanguageServerCluster.
Там что то типа: char *path = app()->debuger()->getpath();
> а вдруг им передан нулевой указатель - надо не забыть проверить... Тот ещё гемор, в общем.
Да, обязательно, ведь как завещал МыщьХ: код наверняка будут вызывать враги и нужно проверить все!
> А если нужно наследование? А если нужны похожие структуры, в которых есть поля с одинаковыми именами, но эти структуры - не наследники друг друга, но со всеми этими структурами должна работать какая-то функция?
Не нужно, вы же сами писали :)
Но в целом примерно как в fuse сделано, типа плагинная система, где структура в которой указатели на функции обработчиков.
Если нужные похожие структуры - либо делаете копипасту либо делаете структуру у которой всё одинаковое основной и дополнительно туда подключаете указатели на различающиеся структуры и туда же можно кинуть указатели на функции для их обработки.
В целом похоже что вы высасываете задачу из пальца вместе со сложностью. В системном и прикладном софте мне такое почти не встречалось.
> Но в С всё то же самое, только хуже, потому что приходится изобретать велосипед
Разбивка на файлы это что то новое?)
> В С так же. С большими программами и сложными структурами данных в любом языке примерно та же история.
C не толкает использовать классы и всякие навороты.
> Луа - это скриптовый язык для программ и к тому же медленный, совсем не замена С++
Это вы так думаете :)
Да, это не С/С++, но при правильном использовании - в виде клея для С функций/либ, он как и питон и как и кресты будет далеко не самым узким местом.
> чтобы пользователи программы могли писать скрипты, но это редко нужно.
Он вполне годен и для бизнесслогики.
Ещё для make систем это просто киллер фича: у него зависимостей по либам нет, сам маленький, а нагородить в нём можно легко больше и проще чем с Cmake и meson.