Наука — Школе |
Для знатоков старого Паскаля можно сказать, что автоматическое управление памятью — это механизм, исключающий необходимость (и даже запрещающий) использовать оператор DISPOSE старого Паскаля: зарезервированные на куче (посредством NEW) блоки памяти будут автоматически утилизированы системой, когда они больше не будут нужны в программе (т.е. когда на них больше не будет ни прямых, ни косвенных ссылок из программы). Этим исключаются два больших класса ошибок, которые очень трудно находить в больших программах с существенно динамическими структурами данных: висячие указатели (dangling pointers) и утечки памяти (memory leaks). Ошибки, связанные с управлением памятью, часто приводят к серьезным нарушениям систем безопасности в вычислительных системах.
Автоматическое управление памятью впервые возникло в функциональном языке Лисп (1959), т.к. в такого рода языках оно является принципиальным требованиям. Затем оно широко использовалось в интерпретируемых средах. В компилируемом языке, построенном на процедурной основе, АУП впервые было реализовано в Системе Оберон Н.Вирта и Ю.Гуткнехта, и системы семейства Оберон — в т.ч. Блэкбокс — до сих пор (2005) остаются уникальными в этом отношении.
В системах процедурного программирования старого типа (фортран, старый Паскаль, Дельфи Паскаль, С, С++ ...) АУП невозможно по принципиальным техническим причинам: для его реализации необходимо распространить механизмы строгой статической типизации на указательные переменные и в числе прочего запретить адресную арифметику.
Специалисты признают, что именно автоматическое управление памятью (а не широко рекламируемые средства объектно-ориентированного программирования) является основной технологической составляющей быстрого успеха таких "динамических" языков как Java, Perl, python, и т.п.
Наука — Школе |