Код: Выделить всё
MODULE Proba;
(* Proba.Do ~ *)
VAR m: POINTER {UNSAFE, UNTRACED, DISPOSABLE} TO ARRAY 5 OF INTEGER;
PROCEDURE Do*();
BEGIN
(* NEW(m); *)
DISPOSE(m);
END Do;
END Proba.
Код: Выделить всё
(** This procedure releases memory that was previously acquired by a call to the [[Runtime.New]] procedure. *)
(** The compiler implements DISPOSE statements on types marked as disposable with a call to this procedure. *)
PROCEDURE Dispose- (VAR pointer {UNTRACED}: BaseTypes.Pointer);
...
По секрету говоря, я давно хотел сделать возможность явно выделять/удалять память, поскольку сборщик мусора плохо работает с большим объёмом выделенных объектов. Не сказать, чтобы я придумал, как сделать, чтобы программа осталась столь же надёжной, как и была. Всё же тут может возникнуть проблема висячих указателей, со всеми вытекающими. Но для реализации отдельных структур данных (например, какой-нибудь базы словоформ в памяти) можно жёстко ограничить область применения явного выделения/удаления памяти, хорошо всё проверить и гарантировать отсутствие падений. И вот похоже, что это где-то уже было, но стухло. Поскольку я это накопал - теперь написал про это вот эту статейку.