Здравствуйте, ·, Вы писали:
·>На каком основании компилятор будет принимать решение, что некая функция с неким именем calculateHash может или не может писать в файлы?
Просмотрит все вызываемые функции. Они не вызывают функции, которые пишут в файл или в поток ввода-вывода, не вызывают прерываний и не пишут в порты ввода-вывода.
>Так в итоге в сколько-либо сложном проекте у тебя дойдёт до того, что программист будет говорить что все функции могут всё.
Не дойдёт. А если дойдёт, значит проект должен выбрасываться и переписываться заново. Когда все функции могут всё — это как раз не то, что нужно.
·>Так практически любой ЯП это уже умеет. Если в файле не написано "import java.io.*" то io никакого в данном файле быть не может. Немного сложнее, но элементарно делается. Динамическую подгрузку кода не считаем, её можно явно оключить, как правило.
Может быть вызов через рефлекшн и непосредственно в коде с полной квалификацией (в C#, по крайней мере).
Ну, опять же, в Java может и не получится. В других языках это не так просто.
Ну и потом, там могут быть алиасы какие-нибудь и т.п.
·>Счётчик ссылок это тривиальный вариант реализации сборщика мусора.
Ну это не сборщик мусора, это немного другое. Но да.
FDS>>либо специализированная система выделения памяти.
·>Тут проблема не в выделении, а в освобождении. Т.к. именно при освобождении надо занулять.
Систем освобождения памяти не бывает

Только выделения.
·>Ну тогда просто — при завершении процесса занулить всю память.
не, это слишком долго. Вдруг процесс, всё же, упадёт?
> Интуиция подсказывает, что такое API должно предоставляться операционкой. А то утечёт что-нибудь в своп-файл, сработает какая-нибудь дефрагментация и нифига не занулится.
О таким API мне неизвестно. И в файл подкачки вполне утекает всё.
Чтобы не утекало, есть функция VirtualLock в WinAPI