Size: a a a

CODE BLOG / Чат

2021 February 14

SS

Steel Sword in CODE BLOG / Чат
Значит, в стеке хранить замыкание наверное не выйдет...
источник

J

Jmik in CODE BLOG / Чат
Можно делать "наивный вызов"
Считать все функции vararg
источник

J

Jmik in CODE BLOG / Чат
Для меня проблемма - имя функции в бинарнике
Мы не можем сделать ее абсолютно анонимной ибо ELF
источник

J

Jmik in CODE BLOG / Чат
А метки плюсокода мне жутко не нравятся => надо придумать свои
Идеи есть, но пока что есть другие задачи
источник

SS

Steel Sword in CODE BLOG / Чат
Что еще за ELF
источник

J

Jmik in CODE BLOG / Чат
Steel Sword
Что еще за ELF
Executable Linux Format
Бинарники крч
источник

SS

Steel Sword in CODE BLOG / Чат
Jmik
Вот посмотрб как это в плбсах выглядит
Надо узнать, как это в расте выглядит. Там лямбды нормальные
источник

J

Jmik in CODE BLOG / Чат
Jmik
Для меня проблемма - имя функции в бинарнике
Мы не можем сделать ее абсолютно анонимной ибо ELF
Хотя стоп, туплю
По идее в elf можно сделать анонимную функцию

Вопрос в том как потом ее вызывать.......
Не зная адресса
источник

SS

Steel Sword in CODE BLOG / Чат
Jmik
Хотя стоп, туплю
По идее в elf можно сделать анонимную функцию

Вопрос в том как потом ее вызывать.......
Не зная адресса
Через указатель
источник

J

Jmik in CODE BLOG / Чат
Steel Sword
Через указатель
Указатель хранит адрес
А откуда я знаю ее адрес в итоговом бинарнике?
источник

J

Jmik in CODE BLOG / Чат
Надо смотреть че GCC могет по этому поводу, ибо я им ограничен
источник

SS

Steel Sword in CODE BLOG / Чат
Значит, не делай анонимной
источник

J

Jmik in CODE BLOG / Чат
Steel Sword
Значит, не делай анонимной
Отлично, а какую метку ей дать?
lambdaXYZ ?
источник

SS

Steel Sword in CODE BLOG / Чат
UUID 😁
источник

J

Jmik in CODE BLOG / Чат
Steel Sword
UUID 😁
Этож дисковая хня
источник

SS

Steel Sword in CODE BLOG / Чат
Не знаю чья она, но мне туториал постгреса предлагает его юзать для большей уникальности идентификаторов
источник

SS

Steel Sword in CODE BLOG / Чат
источник

P

Phantom in CODE BLOG / Чат
Steel Sword
Как-то так:

return lambda (x: int): int = x * 2;

Или

lambda (x: int): int
cache y: int = 0, z: int = 1
begin
 y++;
 z *= 2;
 printf("x = %d, y = %d, z = %d", x, y, z);
end

И в памяти оно разворачивается в что-то типа:

struct lambda_10023 {
 struct cache {
   int y,
   int z
 },
 (*int) func(struct catche, int)
}

Это псевдокод, я не очень помню Си))
lambda
источник

P

Phantom in CODE BLOG / Чат
источник

SS

Steel Sword in CODE BLOG / Чат
Че
источник