The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз набора компиляторов LLVM 13.0, opennews (??), 05-Окт-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


35. "Релиз набора компиляторов LLVM 13.0"  +/
Сообщение от pavlinux (ok), 05-Окт-21, 17:16 
> gcc это (tail-call optimization) вроде как уже 20 лет умеет

Так новость вроде про LLVM

Ответить | Правка | Наверх | Cообщить модератору

37. "Релиз набора компиляторов LLVM 13.0"  –1 +/
Сообщение от Урри (ok), 05-Окт-21, 17:32 
Ну да - про ллвм, который научился с костылями делать то, что можно было научиться делать давным-давно и без костылей.
Ответить | Правка | Наверх | Cообщить модератору

42. "Релиз набора компиляторов LLVM 13.0"  +2 +/
Сообщение от Ordu (ok), 05-Окт-21, 18:36 
Знаток в треде?

llvm выполнял tail-call оптимизации столько, сколько я с ним имел дело. Но, tail-call оптимизация -- это то, что компилятор может делать, может не делать. Как минимум, на его решение оптимизировать или нет влияет заказанный уровень оптимизации. Возможно влияет что-то ещё, тут я не скажу.

Атрибут musttail, что в gcc, что в llvm, делает tail-call оптимизацию обязательной. На любом уровне оптимизаций, даже на -O0. Предположу, что этот атрибут нужен для тех случаев, когда код, написанный в функциональном стиле, рекурсией обрабатывает огромные массивы, и из-за этого в debug-сборках переполняет все разумные размеры стека.

Ответить | Правка | Наверх | Cообщить модератору

50. "Релиз набора компиляторов LLVM 13.0"  –1 +/
Сообщение от Урри (ok), 05-Окт-21, 21:57 
> Атрибут musttail, что в gcc, что в llvm, делает tail-call оптимизацию обязательной.

int recursion(int x, int n)
{
    if (n == 0)
        return x;

    int r = x * recursion(x-2, n-1);
    int q = n + recursion(x+2, n-1);

    return q * r;
}

Оптимизируй "обязательно".

Ответить | Правка | Наверх | Cообщить модератору

52. "Релиз набора компиляторов LLVM 13.0"  +/
Сообщение от Ordu (ok), 05-Окт-21, 22:28 
Ты ворвался в тред с обвинениями llvm в том, что он такую полезную фичу запилил только сейчас. Но теперь, ты доказываешь, что фича бесполезная. Либо фича полезная, и тогда ты сейчас несёшь бред. Либо фича бесполезная, и тогда ты бред нёс раньше.
Ответить | Правка | Наверх | Cообщить модератору

59. "Релиз набора компиляторов LLVM 13.0"  –2 +/
Сообщение от Урри (ok), 05-Окт-21, 23:35 
Нет. Я угораю со знатоков, которые радуются, что шланг научился из любой рекурсии делать хвостовую.
Ответить | Правка | Наверх | Cообщить модератору

65. "Релиз набора компиляторов LLVM 13.0"  +1 +/
Сообщение от Ordu (ok), 06-Окт-21, 00:27 
> Нет. Я угораю со знатоков, которые радуются, что шланг научился из любой
> рекурсии делать хвостовую.

Сам придумал, приписал другим, сам порадовался находке. Зачем парился писать об этом? Ты о каждой мастурбации своей тоже отчитываешься в рандомных уголках интернета?

Ответить | Правка | Наверх | Cообщить модератору

54. "Релиз набора компиляторов LLVM 13.0"  +/
Сообщение от Аноним (-), 05-Окт-21, 22:41 
>> tail-call оптимизацию обязательной.
>     int r = x * recursion(x-2, n-1);
>     int q = n + recursion(x+2, n-1);
>     return q * r;
> Оптимизируй "обязательно".

/0

Ответить | Правка | К родителю #50 | Наверх | Cообщить модератору

57. "Релиз набора компиляторов LLVM 13.0"  –2 +/
Сообщение от Урри (ok), 05-Окт-21, 23:13 
Нэт. Оно работает и не 0 - проверить минута времени.
Ответить | Правка | Наверх | Cообщить модератору

81. "Релиз набора компиляторов LLVM 13.0"  +/
Сообщение от Аноним (-), 06-Окт-21, 13:01 
> Нэт. Оно работает и не 0 - проверить минута времени.

Прочитать, что такое tail-call и перестать пороть чушь - тоже минута времени.


Ответить | Правка | Наверх | Cообщить модератору

84. "Релиз набора компиляторов LLVM 13.0"  –1 +/
Сообщение от Урри (ok), 06-Окт-21, 18:05 
Еще один аноним прибежал преобразовывать функцию в обязательную хвостовую рекурсию?
Ну милости прошу, ждем решение.
Ответить | Правка | Наверх | Cообщить модератору

85. "Релиз набора компиляторов LLVM 13.0"  +/
Сообщение от Аноним (-), 06-Окт-21, 20:37 

>> Реализована поддержка гарантированных хвостовых вызовов (вызов подпрограммы в самом конце функции, образующий хвостовую рекурсию в случае, если подпрограмма вызывается саму себя). Поддержка гарантированных хвостовых вызовов обеспечена при помощи атрибута "[[clang::musttail]]" в C++ и "__attribute__((musttail))" в C, применяемых в выражении "return". Возможность позволяет реализовать оптимизации через развёртывание кода в плоскую итерацию для экономии расходования стека.

***
>> Calls marked musttail must obey the following additional rules:
>> The call must immediately precede a ret instruction, or a pointer bitcast followed by a ret instruction.
>> The ret instruction must return the (possibly bitcasted) value produced by the call, undef, or void.
>> The calling conventions of the caller and callee must match.

***
> Еще один аноним прибежал преобразовывать функцию в обязательную хвостовую рекурсию?

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

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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