Beberapa jenis tipuan diperlukan untuk program yang kompleks (misalnya struktur data rekursif atau berukuran variabel). Namun, tidak perlu menerapkan tipuan ini melalui pointer.
Mayoritas bahasa pemrograman tingkat tinggi (yaitu bukan Majelis) cukup aman-memori dan melarang akses pointer tidak terbatas. Keluarga C adalah yang aneh di sini.
C berevolusi dari B yang merupakan abstraksi yang sangat tipis pada perakitan mentah. B memiliki satu tipe: kata. Kata tersebut dapat digunakan sebagai integer atau sebagai pointer. Keduanya setara ketika seluruh memori dipandang sebagai array yang berdekatan. C menyimpan pendekatan yang agak fleksibel ini dan terus mendukung aritmatika pointer yang secara inheren tidak aman. Seluruh sistem tipe C lebih merupakan sebuah renungan. Fleksibilitas terhadap akses memori ini menjadikan C sangat cocok untuk tujuan utamanya: membuat prototip sistem operasi Unix. Tentu saja Unix dan C ternyata cukup populer, sehingga C juga digunakan dalam aplikasi di mana pendekatan tingkat rendah terhadap memori ini tidak terlalu dibutuhkan.
Jika kita melihat bahasa pemrograman yang datang sebelum C (misalnya Fortran, dialek Algol termasuk Pascal, Cobol, Lisp, ...) beberapa dari mereka mendukung pointer mirip-C. Khususnya, konsep penunjuk nol diciptakan untuk Algol W pada tahun 1965. Tetapi tidak satu pun dari bahasa tersebut yang mencoba menjadi bahasa sistem abstraksi rendah seperti C, efisien, dan Fortran dimaksudkan untuk komputasi ilmiah, Algol mengembangkan beberapa konsep yang cukup maju, Lisp mengembangkan lebih dari proyek penelitian daripada bahasa tingkat industri, dan Cobol berfokus pada aplikasi bisnis.
Pengumpulan sampah sudah ada sejak akhir 50-an, yaitu jauh sebelum C (awal 70-an). GC membutuhkan keamanan memori agar berfungsi dengan benar. Bahasa sebelum dan sesudah C menggunakan GC sebagai fitur normal. Tentu saja itu membuat bahasa jauh lebih rumit dan mungkin lebih lambat, yang terutama terlihat pada saat mainframe. Bahasa-bahasa GC cenderung berorientasi pada penelitian (misalnya Lisp, Simula, ML) dan / atau membutuhkan workstation yang kuat (mis. Smalltalk).
Dengan komputer yang lebih kecil, komputer yang lebih kuat pada umumnya dan bahasa GC secara khusus menjadi lebih populer. Untuk aplikasi non-real time (dan kadang-kadang bahkan saat itu) GC sekarang merupakan pendekatan yang disukai. Tetapi algoritma GC juga telah menjadi subjek penelitian yang intens. Sebagai alternatif, keamanan memori yang lebih baik tanpa GC juga telah dikembangkan lebih lanjut, terutama dalam tiga dekade terakhir: inovasi penting adalah RAII dan smart pointer di C ++ dan sistem seumur hidup / pemeriksa pinjaman Rust.
Java tidak berinovasi dengan menjadi bahasa pemrograman memori-aman: pada dasarnya mengambil semantik dari bahasa Smalltalk GCed, memori aman dan menggabungkannya dengan sintaks dan mengetik statis C ++. Itu kemudian dipasarkan sebagai C / C ++ yang lebih baik, lebih sederhana. Tapi itu hanya dangkal keturunan C ++. Kurangnya pointer Java berutang lebih banyak pada model objek Smalltalk daripada penolakan model data C ++.
Jadi bahasa "modern" seperti Java, Ruby, dan C # tidak boleh diartikan sebagai mengatasi masalah pointer mentah seperti di C, tetapi harus dilihat sebagai menggambar dari banyak tradisi - termasuk C, tetapi juga dari bahasa yang lebih aman seperti Smalltalk, Simula, atau Lisp.