The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Началось бета-тестирование FreeBSD 12.2"
Отправлено Ordu, 14-Сен-20 00:44 
> почитай, дурак, блин, что такое gcc trampolines, и как стек, ВНЕЗАПНО может не только быть исполняемым кодом, но и обеспечивать удобное решение без костылей.

Эти трамплины нужны для _вложенных_ функций которые ссылаются на стековые переменные в стековом фрейме в котором объявлены. Ну, что-то типа такого:

// функционал применяющий функцию ко всем интам в рендже от start до end
int map_sum_range(int start, int end, int (*fn)(int)) {
    int ret = 0;
    for(int i = start, i < end; i ++) {
        ret += fn(i);
    }
    return ret;
}

int my_func() {
    int c = 1;
    int nested_func(int x) { // <-- вот она вложенная функция
        c *= 2;    // трамплин нужен ради того, чтобы она могла дотянутся
                        // до этой c через неизвестное в компайл-тайме количество
                        // стековых фреймов поверх того, где c лежит
        return c * x;
    }
    int sum = map_sum_range(0, 100, nested_func);
}

Эти вложенные функции всегда были gcc'шным эксшеншном, который я честно говоря ни разу не видел в чужом коде. Сам я как-то раз использовал в домашнем проекте, но не скажу, чтоб это было от безысходности или с большими бонусами к производительности.

Рекурсивные же функции реализуются без всяких трамплинов и без исполняемого стека.

BSD прибивает себя гвоздями к gcc ради вложенных функций? Не поверю никогда, пока глазами своими не увижу. Вложенные функции мало что дают, если бы это были бы полноценные лямбды с захватом окружения и прочими фишками, то можно было бы подумать прибивании проекта гвоздями к gcc, но даже в этом случае BSD для меня выглядит слишком консервативным проектом, чтобы пойти на такое.

> Откуда и какие вас понарожали?

Действительно, откуда?

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру