Kuyruk Çağrısı Nedir?

Bilgisayar programlamasında, kuyruk çağrısı, bir fonksiyonun, alt yordamın ya da prosedürün yalnızca dönüş değerini tutan bir değişkeni geçmek yerine başka bir işlevi çağırarak beklenen bir değer döndürdüğü program kaynak kodu içindeki belirli bir durumdur. Ad, döndürülecek değeri hesaplamak için çağrılan işlevin, bir geri dönüş değeri sağlamak için çağıran işlevin sonunda veya kuyruğu olduğunu belirtir. Bir kuyruk çağrısı bazı programcıların ilgisini çekmektedir, çünkü bazı optimizasyonlar veya derleyici davranışlarında, ana fonksiyonun kod konumlarını saklamak için ek yığın alanı kullanılmaz; tail işlevi bunun yerine, geri dönüş değeri raporlarını doğrudan orijinal işlevin çağrıldığı çağrı noktasına geri bildirmek için kullanılır. Bir kuyruk çağrısının kullanımı, özyinelemenin kullanıldığı durumlarda özellikle kullanışlıdır, çünkü özyinelemeli çağrıların çok derinden yuvalandığı durumlarda arayanın adreslerini saklamak için kullanılan yığın alanı miktarı, program yürütmesini hızlı bir şekilde çalıştırabilir ve durdurabilir. Kuyruk çağrıları kullanmak, bir programda hız, hafıza kullanımı ve verimliliğin artırılmasına yardımcı olsa da, kaynak kodunun, çağrıları hata ayıklama ve takip etmeyi zorlaştıracak şekilde, özellikle de durumları hata ayıklama ve izlemeyi zorlaştıracak şekilde yeniden yapılandırılmasına neden olabilir özyineleme.

Bir kuyruk çağrısının varlığı, büyük ölçüde, çağrı yığınının çoğu bilgisayar programında ve sistem mimarisinde nasıl çalıştığından kaynaklanmaktadır. Bir plaka yığını gibi olan yığın, ilk giren, son çıkan veri yapısıdır. Bir işlev, alt yordam veya yordam çağrıldığında, çağrının yapıldığı, yığın çerçeve adı verilen adres yığında depolanır. Bu, İşlev A'yı çağıran ve ardından İşlev B'yi çağıran bir programın, biri İşlev B için, diğeri İşlev A için diğer iki yığın çerçevesine sahip olacağı anlamına gelir. İşlev B'nin çalışması bittikten sonra, yığın çerçevesi üst kısmından çıkarılır. stack ve çalıştırma işlemi bittiğinde çerçevesini yığından fırlatan Fonksiyon A'ya geri döner ve nihayet program kontrolünü başlangıçta ilk fonksiyonun çağrıldığı noktaya döndürür.

Bir kuyruk çağrısı kullanıldığında, bir işlevdeki return ifadesi, başka bir işlevin dönüş değerini doğrudan arama koduna gönderilecek veri olarak kullanır. Yukarıdaki örnekte, İşlev A, İşlev B'yi doğrudan return ifadesiyle çağırırsa, bir kuyruk çağrısı oluşturulmuştur. Çağrı yığını içinde, hem A hem de B işlevleri için bir yığın çerçevesine sahip olmak yerine, B Fonksiyonu, geri dönüş adresini A İşlevinden alır ve A İşlevinin yığın çerçevesi atılır ve atılır, yani B Fonksiyonu geri dönüş değerini doğrudan geri alır. Fonksiyon A olarak adlandırılan konuma, önce Fonksiyon A'ya kontrolü geri vermek zorunda kalmadan, fonksiyon çağrıları hızını arttırır ve aynı zamanda yığındaki bilgi miktarını azaltmaya yardımcı olur.

Bir kuyruk çağrısı özellikleri, özyinelemeli işlevler için onları çok çekici bir seçenek haline getirebilir. Özyinelemeli bir işlev, bir liste veri yapısını geçerken olduğu gibi bir değeri hesaplamak için kendisini tekrar tekrar çağıran işlevdir. İç içe geçmiş işlev çağrıları için ek yığın çerçevesi oluşturulmaz, bu nedenle derhal taşma ve olası program sonlandırması tehlikesi olmadan çok derin yineleme seviyeleri güvenle gerçekleştirilebilir.