LINUX.ORG.RU

Можно-ли полагаться на tail recursion в GCC?


0

0

Подскажите пож-та, можно-ли полагаться на оптимизацию хвостовой рекурсии в gcc? Из мануала:

-foptimize-sibling-calls
          Optimize sibling and tail recursive calls.
          Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.

Ведь если программу собрать с '-O' ниже 2, то она будет вести себя неправильно. И будет-ли выполнена оптимизация, если ещё установлен флаг отладки '-g'?
★★★★

а может нужно использовать яп поддерживающие хвостовую рекурсию?

anonymous
()

> -foptimize-sibling-calls
>          Optimize sibling and tail recursive calls.
>          Enabled at levels ‘-O2’, ‘-O3’, ‘-Os’.
>
> Ведь если программу собрать с '-O' ниже 2, то она будет вести себя неправильно.

Неправильно. Сие означает, что оптимизация хвостовой рекурсии включится
по умолчанию, если указать уровни оптимизации 2,3 и s. Никто не запрещает
явно указать -foptimize-sibling-calls на любом другом уровне, оптимизация
будет выполнена.

Флаг -g не отключает оптимизацию сам по себе, а лишь добавляет отладочную
информацию в бинарь.

blackice
()
Ответ на: комментарий от blackice

Спасибо, меня лишь дополнительно интересует, нормально-ли полагаться на эту опцию при разработке программы?

Bohtvaroh ★★★★
() автор топика

никогда не пологайтесь на компилятор, пологайтесь на стандарт языка. есть в стандарте tail recursion? нет.

; asgard

anonymous
()
Ответ на: комментарий от anonymous

Тогда будет слишком скучно жить. :)

Bohtvaroh ★★★★
() автор топика
Ответ на: комментарий от anonymous

плюспицот. Единственный кошерный способ гарантировать TR - это использовать ее явно, в коде.

svu ★★★★★
()
Ответ на: комментарий от Bohtvaroh

>Хочу немного функциональщины в Си (да, я извращенец).

а смысл ? ну получишь ты это немного - и что ты с ним будешь делать ? или это исключительно just for fun, процесс ради процесса ?

jtootf ★★★★★
()
Ответ на: комментарий от Bohtvaroh

>> Хочу немного функциональщины в Си (да, я извращенец).

Это к функиональщине имеет отношение косвенное. А вот замыкания, лямбды и вообще работа с функциями в функциональном стиле в таком языке как С оставит массу неизгладимых впечатлений :))

cathode
()
Ответ на: комментарий от cathode

> А вот замыкания, лямбды и вообще работа с функциями в функциональном стиле в таком языке как С оставит массу неизгладимых впечатлений :))

Гы! А зачем?

Ну, замыканий в Це, действительно, немного не хватает. Но вполне заменяемо передачей указателя на структуру со стековыми переменными папы.

Вообще, ИМХО всякие лямбды, замыкания, классы, дизайн паттерны и прочая преходящая шушара должны быть в голове, а не в языке... :-)

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

>> Гы! А зачем?

Ну не знаю, топикстартеру хочется ФП в С ;)))

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

Это само-собой, только это не ФП, а садо-мазо )))

>> Вообще, ИМХО всякие лямбды, замыкания, классы...

Это инструменты, не более того. А вот нужны они или нет - это вопрос отдельный... ну по крайней мере не в голове - это точно... ИМХО.

cathode
()
Ответ на: комментарий от Die-Hard

> ИМХО всякие лямбды, замыкания, классы, дизайн паттерны и прочая преходящая шушара должны быть в голове, а не в языке... :-)

Это ж какую голову нужно иметь для классов среднего проекта O_o

tailgunner ★★★★★
()
Ответ на: комментарий от Die-Hard

> Вообще, ИМХО всякие лямбды, замыкания, классы, дизайн паттерны и прочая преходящая шушара должны быть в голове, а не в языке... :-)

Довольно таки нелепое ИМХО.

Лямбды и замыкания - это вполне себе естественная семантика, в которую часто легко преобразовываются многие полезные DSL. И глуп тот человек, который тратит драгоценные ресурсы своей головы на то, чтобы всё это преобразование проделать вручную, и потом ещё и лямбда-лифтинг проделать. Нелепо это. Просто вы, при всём к вам уважении, никогда не сталкивались с задачами, которые эффективно выражаются в этой семантике. Отсюда и такое нелепое неприятие.

Маленький совет - попробовать сделать что либо аналогичное Parsec, но на Си.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.