Co to jest połączenie ogonowe?

W programowaniu komputerowym wywołanie ogona jest określoną sytuacją w kodzie źródłowym programu, w którym funkcja, podprogram lub procedura zwraca oczekiwaną wartość, wywołując inną funkcję zamiast po prostu przekazywanie zmiennej trzymającej wartość zwracaną. Sama nazwa oznacza, że ​​funkcja wywoływana do obliczenia wartości do zwrócenia znajduje się na końcu lub ogon funkcji, wzywając ją do dostarczenia wartości zwracanej. Połączenie ogona jest interesujące dla niektórych programistów, ponieważ przy niektórych zachowaniach optymalizacyjnych lub kompilatorów nie służy dodatkowej przestrzeni stosu do przechowywania lokalizacji kodu głównej funkcji; Zamiast tego funkcja ogona jest używana do generowania raportów wartości zwracania bezpośrednio do punktu wywołania, w którym wywołano pierwotną funkcję. Korzystanie z połączenia ogonowego jest szczególnie przydatne w sytuacjach, w których stosuje się rekurencję, ponieważ ilość przestrzeni stosowanej do przechowywania adresów dzwoniącego w przypadkach, w których gniazdo rekurencyjne bardzo głęboko się skończy i zatrzymają PrograM wykonanie. Chociaż używanie połączeń ogonowych może pomóc zwiększyć szybkość, zużycie pamięci i wydajność w programie, może również prowadzić do sytuacji, w których kod źródłowy jest restrukturyzowany do korzystania z połączeń w sposób, który utrudnia debugowanie i śledzenie, szczególnie w przypadku przypadków rekurencji.

Istnienie połączenia ogonowego wynika w dużej mierze z tego, jak działa stos połączeń w większości programów komputerowych i architektury systemu. Stos, który jest jak stos płyt, jest pierwszym, ostatnim, ostatnim, strukturze danych. Gdy wywoływana jest funkcja, podprogram lub procedura, adres, z którego wykonane jest wywołanie, zwane ramką stosu, jest przechowywany w stosie. Oznacza to, że program wywołujący funkcję A, który następnie wywołuje funkcję B, będzie miał dwie ramki stosu, jedną dla funkcji B, a drugą pod nią dla funkcji A. Po zakończeniu funkcji B jest wykonywanie, jego ramka stosu jest wyskakowana z góry stosu i wykonaniapowraca do funkcji a, która ma swoją ramkę ze stosu po zakończeniu, w końcu zwracając kontrolę programu do punktu, z którego pierwotnie wywołano pierwszą funkcję.

Gdy używa się wywołania ogona, instrukcja powrotu w funkcji bezpośrednio wykorzystuje wartość zwracania innej funkcji jako danych do wysłania do kodu wywołania. W powyższym przykładzie, jeśli funkcja funkcji wywołania B bezpośrednio z instrukcją powrotną, wówczas utworzono wywołanie ogona. W stosie wywołania, zamiast mieć ramkę stosu dla obu funkcji A i B, funkcja B odbędzie adres zwrotny z funkcji A i funkcji A Ramka stosu zostanie wyskoczona i pozbywana, znaczenie funkcja B przekaże swoją wartość zwracaną bezpośrednio do miejsca, w którym funkcja A nazywana funkcją A bez konieczności przekazywania kontroli z powrotem do funkcji A. To zwiększy szybkość wywołania funkcji, a także pomaganie w obniżeniu informacji w stosunku do STACK.

Właściwości połączenia ogonowego mogą uczynić je bardzoatrakcyjna opcja dla funkcji rekurencyjnych. Funkcja rekurencyjna to taka, która wielokrotnie wzywa się do obliczenia wartości, jak to może mieć miejsce podczas przechodzenia przez strukturę danych listy. Nie powstają żadne dodatkowe ramy stosu dla zagnieżdżonych wywołania funkcji, więc bardzo głębokie poziomy rekurencji można wykonać bezpiecznie bez bezpośredniego zagrożenia przepełnieniem stosu i możliwego zakończenia programu.

INNE JĘZYKI