Войти
ФлеймФорумЮмор

Перлы Форума Gamedev.ru (509 стр)

Страницы: 1508 509 510 511520 Следующая »
#7620
13:44, 17 дек 2023

cNoNim
> а там уже есть какие то гарантии что будет примененна TCO?

А вот кстати, интересно, если сделать однонаправленный связный список на С++ на unique_ptr (и указатель начала, и каждый next), и когда закончится время жизни начала списка на 100500 элементов, сработает TCO для деструкторов next или получится честная рекурсия с вероятностью переполнить стек?

#7621
(Правка: 13:56) 13:52, 17 дек 2023

cNoNim
> Нет, я жду что кто то сдедает TCO ручками и выложит код. Мне лень.

void clear_list(tnode* p) {
    while (p) {
        tnode* np = p->next;
        clear_data(p->data);
        free(p);
        p = np;
    }
}

gudleifr
> Ну, если Вы пишете, надеясь на оптимизатор, у меня для Вас плохие новости.
  Работу оптимизатора можно проконтролировать. Написать тесты, которые проверят сработала оптимизация или нет. А вот если ты тестов не пишешь, то тогда у меня для тебя по настоящему плохие новости.

#7622
13:55, 17 дек 2023

Dmitry_Milk
> списка на 100500 элементов
Список на 100500 элементов означает, что для любой частной фигульки вам придется обратится к списку 100500/2 раз. Это бред сам по себе.

#7623
14:03, 17 дек 2023

gudleifr
> Список на 100500 элементов означает, что для любой частной фигульки вам
> придется обратится к списку 100500/2 раз

Так не надо использовать связный список там, где часто и много требуется поиск элемента. Вполне есть случаи, когда поиск не требуется, например, как заначка "пустых" объектов.

#7624
14:07, 17 дек 2023

Dmitry_Milk
> заначка "пустых"
Там формально стек. Поэтому надо думать в сторону выделения памяти большим массивом.

#7625
14:19, 17 дек 2023

Dmitry_Milk
> если сделать однонаправленный связный список на С++ на unique_ptr (и указатель
> начала, и каждый next), и когда закончится время жизни начала списка на 100500
> элементов, сработает TCO для деструкторов next или получится честная рекурсия с
> вероятностью переполнить стек?

+ Показать
#7626
14:25, 17 дек 2023

Рендерферма кроликов
> Да, вообще жесть, встретив такое не сразу понятно, что это определение функции,
> а не ее вызов

Ага. При этом если просто будет

a, b, c;

И ничего вокруг - это... объявление переменных. int просто всегда вменяется по умолчанию, поэтому это объявление трёх переменных int.
Поэтому с функцией то же самое - сам факт встречи на верхнем уровне вложенности name(...) означает что это функция, но т.к. тип не обозначен, то вменяется int.
Тут надо вспомнить, что C это развитие идей языка B где был единственный тип - слово - и не надо было заморачиваться этими самыми int-ами даже или char-ами, любая переменная была одно и того же типа - машинное слово. А разруливалось что в этом слове хранится - число или указатель на уровне операторов. Поэтому есть разница в Си между оператором . и оператором ->
Это на самом деле атавизм доставшийся от Би - там реально надо было отличать ситуацию когда мы ссылаемся к структуре как value-type на её первое слово или когда слово на которое мы ссылаемся это указатель на эту структуру. var.name и var->name могли быть применены на одни и те же переменные с разным эффектом.
Ох уж этот затхлый запах легаси...

#7627
(Правка: 14:32) 14:27, 17 дек 2023

=A=L=X=
> И ничего вокруг - это... объявление переменных
Или выражение

#7628
14:31, 17 дек 2023

Funtik
> // В этом случае, вызов деструктора может вызвать переполнение стека

Ну то есть, компилятор сам сделать TCO не сообразит.

#7629
14:37, 17 дек 2023

Рендерферма кроликов
> Или выражение )

Если идентификатор встречался выше - то будет выражение.
А если нет - то декларация новых переменных.
На самом деле тот первоси от КэЭндЭр он очень сильно в тему как поменьше логического анализа программы сделать и заставить скомпилировать код с минимумом информации.
Например можно было встретить сентенцию
func(1, 'a', "hjhj", &x );
и скомпилировать реально работающий вызов совершенно не зная есть ли вообще такая функция в программе (линкер разберётся потом) и есть ли у неё такие именно параметры.
если есть и именно такие - то это сработает как надо.
именно поэтому декларация функции в духе int f(); в Си означает "функция f возвращает int, а какие у неё параметры в душе не гребу".
И пришлось делать особый синтаксис int f(void); который именно запрещает функции иметь параметры.
Потому что в Си неважно какие у неё параметры - вызов функции в машинном виде бывает только один.

И это то почему void main(), int main(argc, argv) является одинаково работающей штукой без перекомпиляции stlib - это фишка Си была в первой инкарнации.

#7630
(Правка: 14:48) 14:45, 17 дек 2023

=A=L=X=
> void main(), int main(argc, argv)
Благодаря двум решениям: int-значение возвращается в аккумуляторе (вместо  void там просто будет мусор), а параметры со стека убирает вызвавшая ф-я. Т.е. компилятору просто пофиг. Он не контролирует то, что не влияет на его работу.

См. код
https://gamedev.ru/code/forum/?id=255029&page=3&m=5251568#m31

#7631
15:06, 17 дек 2023

Dmitry_Milk
> Ну то есть, компилятор сам сделать TCO не сообразит.

Ну да.

#7632
(Правка: 15:28) 15:24, 17 дек 2023

Dmitry_Milk
> А вот кстати, интересно, если сделать однонаправленный связный список на С++ на
> unique_ptr (и указатель начала, и каждый next), и когда закончится время жизни
> начала списка на 100500 элементов, сработает TCO для деструкторов next или
> получится честная рекурсия с вероятностью переполнить стек?
https://godbolt.org/

Спойлер: нет, будет "честная" рекурсия, но гцц заинлайнит несколько фреймов сразу в одну функцию.

Dmitry_Milk
> Ну то есть, компилятор сам сделать TCO не сообразит.
Там нет TCO, если внимательно посмотреть на тело деструктора — оно уже включает delete this внутри себя, и оно происходит уже после деструкторов полей, то есть, автоматический деструктор с unique_ptr по факту генерирует именно Освободи Гудлейфра.

#7633
15:38, 17 дек 2023

gudleifr
> Список на 100500 элементов означает, что для любой частной фигульки вам
> придется обратится к списку 100500/2 раз.
Ты походу не знаешь зачем нужны списки, омг

#7634
15:45, 17 дек 2023

1 frag / 2 deaths
> походу
По ходу чего? По ходу гугления Вами слова "список"?

Страницы: 1508 509 510 511520 Следующая »
ФлеймФорумЮмор