Форум
Философия программирования
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, scf, Вы писали: scf>Здравствуйте, FDSC, Вы писали: FDS>>Ещё пару вопросов насчёт выбора языка программирования. FDS>>Есть ли язык программирования, в котором есть следующие фичи: FDS>>1. Необходимо задавать невозможность вызова в модулях функций (запрет файлового ввод-вывода, например), исключая разрешённые модули FDS>>2. Аналогичный запрет для всех функций, которые вызываются из данной функции FDS>>3. Помечать код как неизменяющий состояние программы FDS>>4. Помечать объекты дополнительными типизационными метками (в статическом виде). Например, красная строка должна быть несовместима с зелёной строкой, но зелёная неявно приводима к красной. FDS>>Причём нужно, чтобы была возможность автоматически построить список всех явный приведений типов между зелёными и красными (а ещё лучше - запретить) FDS>>Аналогично, в идеале, метками, которые запрещают вызов у копии объекта каких-либо методов (например, деструктор или методы, изменяющие состояние). FDS>>5. Контролировать состояние объекта как конечного автомата, в идеале, в статике. Грубо говоря, объект не инициализирован, объект инициализирован, объект в работе, объект завершил работу, объект подвергся деструкции. scf>Эмммм, звучит так, как будто на эти требования можно натянуть стандартное ООП с ФП на любом языке, где есть ООП. scf>1. Запретить статические функции вообще, "разрешенные" интерфейсы явно передавать в модуль при его инициализации scf>2. Аналогично. если все функции - методы, то без экземпляра ты их не вызовешь scf>3. Я знаю два способа - const в плюсах и вообще (по-возможности) не иметь методов, изменяющих состояние программы. Т.е. все структуры данных иммутабельные, все "неконстантные" методы возвращают копию структуры данных с изменениями. Это надо смотреть в сторону ФП языков с монадами. scf>4. Наследование? Либо отказаться от неявного приведения и всегда приводить явно через набор функций-конверторов. scf>5. Имхо, лучше просто писать код так, чтобы контролировать состояние объектов было не нужно. Умные указатели в плюсах, язык с GC, правильно реализованная идиома владения. Вручную контролировать жизненный цикл объектов сложно, проще изменить архитектуру. scf>И вообще - статический стейт, статические синглтоны - это зло. Лучше использовать DI и самому управлять инициализацией.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …