Değere göre arama ve başvuruya göre arama, uzun zaman önce parametre geçiş modları ile hatalı olan uygulama teknikleridir.
Başlangıçta, FORTRAN vardı. FORTRAN sadece referans çağrısına sahipti, çünkü alt rutinler parametrelerini değiştirebiliyordu ve hesaplama döngüleri birden fazla parametre geçme moduna izin veremeyecek kadar pahalıydı, artı FORTRAN ilk tanımlandığında programlama hakkında yeterince bilgi sahibi değildi.
ALGOL isim-by-isim ve by-value ile geldi. Değeri arama, değiştirilmemesi gereken şeyler içindi (giriş parametreleri). Ada göre yapılan çağrı, çıktı parametreleri içindi. Adına göre çağrı büyük bir güveç olduğu ortaya çıktı ve ALGOL 68 bunu bıraktı.
PASCAL, değerine göre arama ve referansa göre arama sağladı. Programcıya, parametre yığınını üflemekten kaçınmak için derleyiciye referans olarak büyük bir nesneyi (genellikle bir dizi) geçirdiğini, ancak nesnenin değiştirilmemesi gerektiğini söyleme yolu yoktur.
PASCAL, dil tasarım sözlüğüne işaretçiler ekledi.
C, bir değer göstergesini ve bellekteki herhangi bir nesneye bir gösterici döndürmek için bir kludge operatörü tanımlayarak referans-referans çağrısını sağladı.
Daha sonra diller C'yi kopyaladı, çünkü tasarımcılar daha önce başka hiçbir şey görmediler. Bu muhtemelen, aramaya göre arama değerinin bu kadar popüler olmasının nedenidir.
C ++ referans çağrısı sağlamak için C çamurunun üstüne bir çamur ekledi.
Şimdi, bir değere göre çağrıya karşı-referansa göre çağrıya karşı-çağrı-by-pointer-kludge'in doğrudan bir sonucu olarak, C ve C ++ (programlayıcılar) const işaretçileri ve işaretçilerine yapışacak korkunç baş ağrıları vardır (salt okunur). itiraz ediyor.
Ada bütün bu kabustan uzak durmayı başardı.
Ada açık bir değer-by-by-referans çağrısına sahip değildir. Daha ziyade, Ada'nın parametreleri (okunabilir ancak yazılmayabilir), parametreleri (okunmadan önce yazılması zorunludur) ve parametreleri, herhangi bir sırada okunup yazılabilen parametreleri vardır. Derleyici, belirli bir parametrenin değere mi yoksa referansa göre mi geçileceğine karar verir: programlayıcı için şeffaftır.
void acceptEntireProgrammingLanguageByValue(C++);