Здравствуйте, FDSC, Вы писали:
FDS> Есть ли язык программирования, в котором есть следующие фичи:
Да любой интерпретируемый или managed, например java
FDS> 1. Необходимо задавать невозможность вызова в модулях функций (запрет файлового ввод-вывода, например), исключая разрешённые модули
java.lang.SecurityManager
FDS> 2. Аналогичный запрет для всех функций, которые вызываются из данной функции
Запрет на уровне класса.
FDS> 3. Помечать код как неизменяющий состояние программы
Это как? Если у некоего кода нет доступа к некоему состоянию, то и изменить не может, доступа к приватным данным тоже нет (кроме как через публичные методы). Или иммутабельные объекты что-ли?
FDS> 4. Помечать объекты дополнительными типизационными метками (в статическом виде). Например, красная строка должна быть несовместима с зелёной строкой, но зелёная неявно приводима к красной.
А чем просто типы не устраивают?
class RedString {private final String content;}
FDS> 5. Контролировать состояние объекта как конечного автомата, в идеале, в статике. Грубо говоря, объект не инициализирован, объект инициализирован, объект в работе, объект завершил работу, объект подвергся деструкции.
Сборщик мусора же. Объекта либо нет, либо к нему доступа нет и деструкторы не нужны.
Все остальные кастомные состояния контролируются кодом публичных методов.