Аппаратное обеспечение не имеет сборщика мусора ( было , некоторые аппаратные средства, которые имели элементарную поддержку для пересылки указателей, функция, полезная при создании некоторых сборщиков мусора, но это далеко от «GC в аппаратном обеспечении»). ). Соответственно, сборка не имеет ГХ. Ассемблер - это «язык программирования» (хотя и один из самых близких к «голому металлу»), так что вы идете: в широком спектре существующих языков программирования у некоторых не будет GC.
Бывает, что эффективный GC - это не то, что легко реализовать. Хорошие алгоритмы для этого были в разработке. Что еще более важно, большинство хороших алгоритмов GC хороши, потому что они выполняют некоторые сложные операции, такие как перемещение элементов данных в RAM; это необходимо для «реального времени GC», который предлагает гарантии на максимальное время, затрачиваемое на выделение (у вас не может быть таких гарантий при фрагментации, и вы не можете избежать фрагментации, не перемещая объекты в ОЗУ). Когда объект перемещается, все указатели на этот объект должны автоматически настраиваться, что может быть сделано только , если язык программирования предлагает сильные, неотвратимые типы. Например, это не может быть сделано с C или C ++. В C допустимо распечатывать байты, которые кодируют значение указателя, и затем пользователь вводит их обратно. GC не может изменить мозг пользователя, когда он перемещает объект ...
Таким образом, на практике языки без сильных типов не содержат GC. Это включает в себя C, C ++, Forth, все виды языков ассемблера с расширениями ... Это не мешает некоторым людям писать реализации GC для таких языков, например, Ганс Бем ГК для C и C ++ . Тем не менее, это означает, что сборщик мусора может потерпеть неудачу с (странными) программами, которые номинально "легальны" в отношении языкового стандарта.
Существуют также языки со строгими типами, но без GC, либо потому, что их разработчики не верили в это, либо полагали, что могли бы добиться большего успеха без дополнительного размера кода, либо извлекали выгоду из него (например, Javacard, Java для смарт-карт). , меньше GC, потому что установка GC в среде с 8 КБ кода и 512 байтами ОЗУ не просто).
Наконец, среди тысяч языков программирования, которые были разработаны («однажды в неделю, начиная с шестидесятых», как мне когда-то сказали), некоторые являются результатом поздних разговоров после слишком большого количества алкоголя, поэтому он не может Предполагается, что каждая функция или не все функции языков программирования являются результатом сбалансированного рационального мышления.