Сообщение Re[2]: Closures in plain C. от 14.12.2021 15:17
Изменено 14.12.2021 15:21 fk0
Re[2]: Closures in plain C.
Здравствуйте, kov_serg, Вы писали:
_>Что мешает использовать менеджер ресурсов, который будет следить за выделением ресурсов и он же будет их освобождать.
_>Выглядеть будет примерно так
_>
Это хорошо работало бы в языках, где есть лямбды. Или даже в обычном (Turbo) паскале,
где есть понятие вложенных функций. А в голом C неудобно, так как логика разбивается
на большое количество функций, где за логикой собственно уже и не уследить. Ведь
для каждого вложенного scope нужна отдельная функция.
В C есть лямбды, но это или бестолковое GCC-расширение добавляющее вложенные
функции (с трамплинами, исполняемым стеком...), либо "Blocks" из clang. Т.е. все
подобного рода расширения, к сожалению, специфические только для одного конкретного
компилятора.
_>Что мешает использовать менеджер ресурсов, который будет следить за выделением ресурсов и он же будет их освобождать.
_>Выглядеть будет примерно так
_>
_>static void body_code(scope_t *s) {
_> void *p, *q; mutex_t m[1];
_> p=scope_mem_alloc(s,25);
_> if (scope_mutex_lock(s,m)) return;
_> q=scope_mem_alloc(s,25);
_>}
_>void body(scope_t *s) {
_> scope_exec(s,body_code);
_>}
_>
Это хорошо работало бы в языках, где есть лямбды. Или даже в обычном (Turbo) паскале,
где есть понятие вложенных функций. А в голом C неудобно, так как логика разбивается
на большое количество функций, где за логикой собственно уже и не уследить. Ведь
для каждого вложенного scope нужна отдельная функция.
В C есть лямбды, но это или бестолковое GCC-расширение добавляющее вложенные
функции (с трамплинами, исполняемым стеком...), либо "Blocks" из clang. Т.е. все
подобного рода расширения, к сожалению, специфические только для одного конкретного
компилятора.
Re[2]: Closures in plain C.
Здравствуйте, kov_serg, Вы писали:
_>Что мешает использовать менеджер ресурсов, который будет следить за выделением ресурсов и он же будет их освобождать.
_>Выглядеть будет примерно так
_>
Это хорошо работало бы в языках, где есть лямбды. Или даже в обычном (Turbo) паскале,
где есть понятие вложенных функций. А в голом C неудобно, так как логика разбивается
на большое количество функций, где за логикой собственно уже и не уследить. Ведь
для каждого вложенного scope нужна отдельная функция.
Вдогонку, важное забыл. Для лямбды так или иначе важен КОНТЕКСТ. Который она
автоматически захватывает. А в данном случае функция body_code вынуждена
контекст принимать в аргументах. Так программировать в целом крайне неудобно...
В C есть лямбды, но это или бестолковое GCC-расширение добавляющее вложенные
функции (с трамплинами, исполняемым стеком...), либо "Blocks" из clang. Т.е. все
подобного рода расширения, к сожалению, специфические только для одного конкретного
компилятора.
_>Что мешает использовать менеджер ресурсов, который будет следить за выделением ресурсов и он же будет их освобождать.
_>Выглядеть будет примерно так
_>
_>static void body_code(scope_t *s) {
_> void *p, *q; mutex_t m[1];
_> p=scope_mem_alloc(s,25);
_> if (scope_mutex_lock(s,m)) return;
_> q=scope_mem_alloc(s,25);
_>}
_>void body(scope_t *s) {
_> scope_exec(s,body_code);
_>}
_>
Это хорошо работало бы в языках, где есть лямбды. Или даже в обычном (Turbo) паскале,
где есть понятие вложенных функций. А в голом C неудобно, так как логика разбивается
на большое количество функций, где за логикой собственно уже и не уследить. Ведь
для каждого вложенного scope нужна отдельная функция.
Вдогонку, важное забыл. Для лямбды так или иначе важен КОНТЕКСТ. Который она
автоматически захватывает. А в данном случае функция body_code вынуждена
контекст принимать в аргументах. Так программировать в целом крайне неудобно...
В C есть лямбды, но это или бестолковое GCC-расширение добавляющее вложенные
функции (с трамплинами, исполняемым стеком...), либо "Blocks" из clang. Т.е. все
подобного рода расширения, к сожалению, специфические только для одного конкретного
компилятора.