konto usunięte

Temat: F# Compiler

Temat troszkę nie pasuje do kontekstu ale nie wiedziałem jak to nazwać.

Pragnę się podzielić ciekawym znaleziskiem :-).

Mianowicie Studiując problemy nieskończonej rekurencji oraz użycia tail calli w C# chąc udowodnić że F# użyje tail calla dla problemu typu:



let rec f1 n = f2(n+1);
let rec f2 n = f1(n+1);



Natknąłem się na wyjątek, okazuje się że w F# możliwy jest taki zapis lecz należy go sformułować nieco inaczej.



let rec f1 n =
f2 (n+1)
and f2 n =
f1 (n+1)



Ciekawe jest w tym przypadku co generuje kompilator:



public static a f1<a>(int n)
{
return f2<a>(n + 1);
}

public static a f2<a>(int n)
{
while (true)
{
int num = n + 1;
n = num + 1;
}
}



Wnioskować na tej podstawie można (nie koniecznie słusznie) że kompilator F# będzie potrafił generować bardziej zoptymalizowany kod dla pewnego zbioru problemów.Bartosz Adamczewski edytował(a) ten post dnia 23.05.10 o godzinie 19:56