Karmaşık programlar için (örneğin özyinelemeli veya değişken boyutlu veri yapıları) bir çeşit dolaylı yayın gereklidir. Bununla birlikte, bu indirgeyi işaretçiler aracılığıyla uygulamak gerekli değildir.
Üst düzey programlama dillerinin çoğunluğu (örn. Montaj değil), bellek açısından güvenlidir ve sınırsız işaretçi erişimine izin vermemektedir. C ailesi burada garip.
C ham toplantının üzerinde çok ince bir soyutlama olan B'den çıktı. B'nin tek bir türü vardı: kelime. Sözcük bir tamsayı veya işaretçi olarak kullanılabilir. Tüm bellek tek bir bitişik dizi olarak görüntülendiğinde bu ikisi eşdeğerdir. C bu oldukça esnek yaklaşımı korudu ve doğal olarak güvensiz işaretçi aritmetiğini desteklemeye devam etti. Bütün C tipi sistem daha sonradan sonradan düşünülen bir sistemdir. Bellek erişimindeki bu esneklik C'yi birincil amacı için çok uygun hale getirdi: Unix işletim sisteminin prototipini oluşturma. Elbette Unix ve C'nin oldukça popüler olduğu ortaya çıktı, böylece C ayrıca belleğe bu düşük seviyeli yaklaşımın gerçekten gerekli olmadığı uygulamalarda da kullanılıyor.
C'den önce gelen programlama dillerine bakarsak (örn. Fortran, Algol lehçeleri, Pascal, Cobol, Lisp,… dahil), bunların bazıları C benzeri işaretçileri destekliyor. Özellikle, 1965'te Algol W için null işaretçi kavramı icat edildi. Ancak bu dillerden hiçbiri C benzeri, etkili bir düşük soyutlama sistemi dili olmaya çalışmadı: Fortran bilimsel hesaplama amaçlıydı, Algol oldukça gelişmiş kavramlar geliştirdi, Lisp endüstri düzeyinde bir dilden daha çok bir araştırma projesidir ve Cobol iş uygulamalarına odaklanmıştır.
Çöp toplama işlemi 50'li yılların sonlarından beri, yani C'den (70'lerin başı) çok önce vardı. GC'nin düzgün çalışması için bellek güvenliği gerekir. C öncesi ve sonrası diller GC'yi normal bir özellik olarak kullanmıştır. Tabii ki bu bir dili çok daha karmaşık ve muhtemelen daha yavaş yapar, bu da özellikle ana bilgisayarlar zamanında fark edilir. GC dilleri araştırmaya yönelik olma eğilimindedir (örn. Lisp, Simula, ML) ve / veya güçlü iş istasyonları gerektirir (örn. Smalltalk).
Daha küçük, daha güçlü bilgisayarlar genel olarak bilgisayar ve GC dillerinde özellikle daha popüler hale geldi. Gerçek zamanlı olmayan uygulamalar (ve hatta bazen de) için GC artık tercih edilen yaklaşımdır. Ancak GC algoritmaları da yoğun araştırmaların konusu olmuştur. Alternatif olarak, GC olmadan daha iyi bellek güvenliği daha da geliştirilmiştir, özellikle de son otuz yılda: C ++ ve Rust'un ömür boyu sistem / ödünç denetleyicisindeki RAII ve akıllı işaretçilerdir.
Java, bellek güvenli bir programlama dili olarak yenilik yapmadı: temelde GCed, bellek güvenli Smalltalk dilinin semantiğini aldı ve bunları C ++ sözdizimi ve statik yazımıyla birleştirdi. Daha sonra daha iyi, daha basit bir C / C ++ olarak pazarlandı. Ama bu sadece yüzeysel olarak bir C ++ soyundan geliyor. Java'nın işaretçi eksikliği, C ++ veri modelinin reddedilmesinden çok Smalltalk nesne modeline borçludur.
Dolayısıyla, Java, Ruby ve C # gibi “modern” diller, C'deki gibi ham işaretçilerin sorunlarının üstesinden gelmek olarak yorumlanmamalı, ancak C dahil birçok gelenekten değil, Smalltalk, Simula gibi daha güvenli dillerden çizim olarak görülmelidir. veya Lisp.