Предупреждение о рекурсии
От: Ka3a4oK  
Дата: 29.07.10 10:31
Оценка:
Было бы клево, если бы компилятор сигнализировал о том, что ему не удалось развернуть хвостовую рекрусию.
Re: Предупреждение о рекурсии
От: hardcase Пират http://nemerle.org
Дата: 29.07.10 10:53
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Было бы клево, если бы компилятор сигнализировал о том, что ему не удалось развернуть хвостовую рекрусию.


А в каких это случаях он не может оптимизировать хвостовой вызов?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Предупреждение о рекурсии
От: Anton V. Kolotaev  
Дата: 29.07.10 10:57
Оценка: 3 (2) +2
Здравствуйте, hardcase, Вы писали:

H>А в каких это случаях он не может оптимизировать хвостовой вызов?


Иногда программист считает, что рекурсия хвостовая, а она на самом деле такой не является. Для этих случаев было бы неплохо дать возможность программисту помечать функцию tailrec, и если она в какой-то момент станет не хвосторекурсивной, выдавать ошибку
Re[3]: Предупреждение о рекурсии
От: Ka3a4oK  
Дата: 29.07.10 18:07
Оценка:
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Здравствуйте, hardcase, Вы писали:


H>>А в каких это случаях он не может оптимизировать хвостовой вызов?


AVK>Иногда программист считает, что рекурсия хвостовая, а она на самом деле такой не является. Для этих случаев было бы неплохо дать возможность программисту помечать функцию tailrec, и если она в какой-то момент станет не хвосторекурсивной, выдавать ошибку


Это я и имел ввиду.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Re[3]: Предупреждение о рекурсии
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 29.07.10 20:55
Оценка: 5 (1)
Здравствуйте, Anton V. Kolotaev, Вы писали:

AVK>Иногда программист считает, что рекурсия хвостовая, а она на самом деле такой не является. Для этих случаев было бы неплохо дать возможность программисту помечать функцию tailrec, и если она в какой-то момент станет не хвосторекурсивной, выдавать ошибку


А что делать, если рекурсия перестанет быть хвостовой, а компилятор всё равно её оптимизирует, как это делает GCC?
Ce n'est que pour vous dire ce que je vous dis.
Re[4]: Предупреждение о рекурсии
От: hardcase Пират http://nemerle.org
Дата: 29.07.10 21:14
Оценка:
Здравствуйте, Don Reba, Вы писали:

DR>А что делать, если рекурсия перестанет быть хвостовой, а компилятор всё равно её оптимизирует, как это делает GCC?


Мне кажется, автор именно это имел в виду. Т.е. проверку что все рекурсивные вызовы функции сводятся к формированию цикла.
/* иЗвиНите зА неРовнЫй поЧерК */
Re: Предупреждение о рекурсии
От: Ka3a4oK  
Дата: 30.07.10 17:59
Оценка:
Макросы тут, кстати, вряд ли помогут.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Re: Предупреждение о рекурсии
От: catbert  
Дата: 01.08.10 07:26
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Было бы клево, если бы компилятор сигнализировал о том, что ему не удалось развернуть хвостовую рекрусию.


Сам недавно хотел создать такой топик. Написать хвостово-рекурсивный алгоритм — задача непростая. А если ошибешся, никакого нормального способа об этом узнать нету. А хвостовая рекурсия дает вполне определенные гарантии, которые не хотелось бы потерять при изменении уже написанного кода. Тем более, компилятору ничего не стоит выдать ошибку или ворнинг в соответствующем случае.

Кстати, в Скале такая фича есть (я очень удивился, когда узнал). Интересно, почему ее не было в Окамле.
Re: Предупреждение о рекурсии
От: Ka3a4oK  
Дата: 05.08.10 08:27
Оценка:
Предлагаю синтаксис в виде атрибута:


[ExpectingIterableRecursion:none] - занченени по умолчанию
foo(...)...
{
  ...
}

[ExpectingIterableRecursion:warning] - компилятор выдает предупреждение
foo(...)...
{
  ...
}

[ExpectingIterableRecursion:error] - компилятор выдает ошибку
foo(...)...
{
  ...
}
Re[2]: Предупреждение о рекурсии
От: hardcase Пират http://nemerle.org
Дата: 05.08.10 08:57
Оценка:
Здравствуйте, Ka3a4oK, Вы писали:

KK>Предлагаю синтаксис в виде атрибута:


К сожалению на лябды их вешать нельзя.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Предупреждение о рекурсии
От: hardcase Пират http://nemerle.org
Дата: 05.08.10 08:57
Оценка:
Здравствуйте, hardcase, Вы писали:

H>К сожалению на лябды их вешать нельзя.


Упс, конечно локальные функции.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Предупреждение о рекурсии
От: catbert  
Дата: 05.08.10 09:41
Оценка:
Здравствуйте, hardcase, Вы писали:

H>К сожалению на лябды их вешать нельзя.


А есть способ создавать рекурсивные лямбды?
Re[4]: Предупреждение о рекурсии
От: hardcase Пират http://nemerle.org
Дата: 05.08.10 09:51
Оценка:
Здравствуйте, catbert, Вы писали:

C>Здравствуйте, hardcase, Вы писали:


H>>К сожалению на лябды их вешать нельзя.


C>А есть способ создавать рекурсивные лямбды?


Есть. Это Y-комбинатор
Автор: hardcase
Дата: 16.02.10
.
/* иЗвиНите зА неРовнЫй поЧерК */
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.