Каково текущее состояние оптимизации хвостового вызова для F# в Mono (2.11)?

Каково текущее состояние реализации Tail Call Optimization (TCO) в Mono (2.11)? Где-то читал, что вся кодовая база должна быть изменена, чтобы использовать соглашение callee-pops-arguments. Каков статус этого изменения? Актуален ли порт ARM/Linux по этому вопросу?

Спасибо!


person user1253673    schedule 07.03.2012    source источник
comment
Я думаю, вы, вероятно, захотите изменить название своего вопроса - F # в целом работает на Mono. Вы спрашиваете об одной функции F# — важной функции, которую я признаю, но все же лишь одной из частей F#.   -  person Onorio Catenacci    schedule 07.03.2012
comment
У меня есть программа-комбинатор парсеров, которая работает на .NET и не работает на Mono 2.10.8. В ближайшее время постараюсь протестировать на 2.11   -  person t0yv0    schedule 30.11.2012


Ответы (1)


Хвостовые вызовы определенно работают на моно в Linux - проверено с использованием

let rec f a = f (a+1)

который не разбился - проверено на Mono 2.10.2

ОБНОВИТЬ

Протестировано со ссылкой Брайана — https://bugzilla.novell.com/show_bug.cgi?id=476785

который вылетает на Mono 2.10.2, несмотря на создание .tail инструкций

person John Palmer    schedule 07.03.2012
comment
Компилятор F# преобразует прямую рекурсию в цикл. Используйте две взаимно рекурсивные функции для проверки. - person Brian; 07.03.2012
comment
@ Брайан - проверил дизассемблирование - вы правы, у вас есть хороший пример программы, которая генерирует .tail инструкции - person John Palmer; 07.03.2012
comment
@JohnPalmer: попробуйте этот пример. Я не думаю, что это было исправлено в Mono 2.10. - person pad; 07.03.2012
comment
Я не могу воспроизвести ошибку, ребята. 2.10.2 древний, вы это знаете? Вы хотите 2.10.8 по крайней мере. Около 10 месяцев работы между этими двумя релизами - person miguel.de.icaza; 07.03.2012
comment
@ miguel.de.icaza - только что протестировано на моно, скомпилированном из git master, который вылетел при компиляции файла с использованием fsc --optimize+ --tailcalls+ и с mono --optimize=all и просто mono - person John Palmer; 08.03.2012
comment
Реализовано ли соглашение callee-pops-arguments в git master 2.11? Я читал, что это было основной причиной, сдерживающей правильную реализацию хвостовых инструкций. - person user1253673; 08.03.2012