İşlevsel programlamada, neredeyse tüm veri yapıları değiştirilemez olduğundan, durumun yeni bir yapıyı değiştirmesi gerektiğinde değişmezdir. Bu çok daha fazla bellek kullanımı anlamına mı geliyor?
Bu, veri yapısına, yaptığınız değişikliklerin ve bazı durumlarda optimize ediciye bağlıdır. Bir örnek olarak, bir listeye hazır olmayı düşünelim:
list2 = prepend(42, list1) // list2 is now a list that contains 42 followed
// by the elements of list1. list1 is unchanged
Burada ek bellek gereksinimi sabittir - yani çalışma zamanı maliyeti prepend
. Neden? Çünkü prepend
basitçe 42
başı ve list1
kuyruğu olan yeni bir hücre yaratır . Bunu list2
başarmak için kopyalamak veya başka şekilde yinelemek zorunda değildir . Bu saklamak için gerekli olan bellek hariç olup 42
, list2
kullanılan aynı hafıza yeniden kullanır list1
. Her iki liste de değişmez olduğundan, bu paylaşım tamamen güvenlidir.
Benzer şekilde, dengeli ağaç yapılarıyla çalışırken, çoğu işlem yalnızca logaritmik miktarda ek alan gerektirir, çünkü her şey, ancak ağacın bir yolu paylaşılabilir.
Diziler için durum biraz farklı. Bu nedenle, çoğu FP dilinde, diziler yaygın şekilde kullanılmamaktadır. Bununla birlikte, eğer böyle bir şey yaparsanız arr2 = map(f, arr1)
ve arr1
bu satırdan sonra bir daha hiç kullanılmazsa, akıllı bir iyileştirici aslında arr1
yeni bir dizi oluşturmak yerine mutasyona uğrayan bir kod oluşturabilir (programın davranışını etkilemeden). Bu durumda, performans elbette zorunlu bir dilde olacaktır.