LINUX.ORG.RU

История изменений

Исправление quasimoto, (текущая версия) :

Как ты это определишь в языке с инкрементальной компиляцией?

В лиспе символы, там оно по такому принципу работает:

int f() { return 1; }
int(*f_sym)() = f;

int g() { return f_sym(); }
int(*g_sym)() = g;

    printf("%d\n", g_sym()); // => 1
    f_sym = []() { return 2; };
    printf("%d\n", g_sym()); // => 2

так что можно создать новый код, связать с каким-то символом, весь остальной код автоматически будет понимать уже новый код, так как завязан не на конкретные адреса, а на символы.

Исходная версия quasimoto, :

Как ты это определишь в языке с инкрементальной компиляцией?

В лиспе символы, там оно по такому принципу работает:

int f() { return 1; }
int(*f_sym)() = f;

int g() { return f_sym(); }
int(*g_sym)() = g;

    printf("%d\n", g_sym()); // => 1
    f_sym = []() { return 2; }; // alloc. new code
    printf("%d\n", g_sym()); // => 2
    // dealloc. new code

так что можно создать новый код, связать с каким-то символом, весь остальной код автоматически будет понимать уже новый код, так как завязан не на конкретные адреса, а на символы.