Якийсь тип непрямості необхідний для складних програм (наприклад, рекурсивних або змінних структур даних). Однак реалізувати цю непрямість за допомогою покажчиків не потрібно.
Більшість мов програмування високого рівня (тобто не Асамблея) досить безпечні для пам’яті і забороняють необмежений доступ вказівника. Сімейство С тут є дивним.
С розвинувся з B, що було дуже тонкою абстракцією над сирим складом. Б мав один тип: слово. Слово може використовуватися як ціле число або як вказівник. Ці два еквівалентні, коли вся пам'ять розглядається як єдиний суміжний масив. C зберігав цей досить гнучкий підхід і продовжував підтримувати за своєю суттю небезпечну арифметику вказівника. Вся система типу С є більш задумливою. Ця гнучкість доступу до пам'яті зробила C дуже придатним для його основного призначення: прототипування операційної системи Unix. Звичайно, Unix і C виявилися досить популярними, так що C використовується також у додатках, де цей підхід до низької пам’яті насправді не потрібен.
Якщо ми подивимось на мови програмування, що виходили до C (наприклад, діалекти Fortran, Algol, включаючи Pascal, Cobol, Lisp,…), деякі з них підтримують C-подібні покажчики. Зокрема, концепція нульових покажчиків була винайдена для Algol W в 1965 році. Але жодна з цих мов не намагалася бути мовою C-подібних, ефективних систем з низькою абстракцією: Fortran призначений для наукових обчислень, Algol розробив деякі досить передові концепції, Lisp - це більше науково-дослідного проекту, ніж мови галузевого рівня, і Кобол був зосереджений на бізнес-додатках.
Збір сміття існував з кінця 50-х років, тобто задовго до С (на початку 70-х). Для належної роботи GC вимагає безпека пам'яті. Мови до і після С використовували GC як звичайну функцію. Звичайно, це робить мову набагато складнішою та, можливо, повільнішою, що було особливо помітно під час мейнфреймів. Мови GC, як правило, орієнтовані на дослідження (наприклад, Lisp, Simula, ML) та / або потребують потужних робочих станцій (наприклад, Smalltalk).
З меншими, більш потужними комп’ютерами, що обчислюють загалом, а мови GC, зокрема, стали більш популярними. Для додатків у реальному часі (а іноді навіть тоді) GC є кращим підходом. Але алгоритми ГК також були предметом інтенсивних досліджень. Як альтернатива, покращена безпека пам’яті без GC також була розвинута в подальшому, особливо за останні три десятиліття: помітними нововведеннями є RAII та розумні покажчики в системі C ++ та система перевірки / запозичення життя Руста.
Java не впроваджувала інновацій, будучи безпечною для пам'яті мовою програмування: вона в основному прийняла семантику мови GCed, безпечної для пам'яті мови Smalltalk та поєднала їх із синтаксисом та статичним типізацією C ++. Потім вона була продана як краща, простіша C / C ++. Але це лише поверхово нащадок C ++. Відсутність покажчиків Java завдячує набагато більшою мірою об'єктній моделі Smalltalk, ніж відмови від моделі даних C ++.
Тому "сучасні" мови, такі як Java, Ruby та C #, не слід трактувати як подолання проблем сировинних покажчиків, як у C, але їх слід розглядати як черпання з багатьох традицій - включаючи C, а також із більш безпечних мов, таких як Smalltalk, Simula, або Лісп.