Re: Несколько вопросов вразброс
02.07.2012 19:42, Artem Chuprina пишет:
> Артём Н. -> debian-russian@lists.debian.org @ Mon, 02 Jul 2012 19:13:04 +0400:
>
> >> >> АН> Хм... Да, пожалуй, это верно.
> >> >> АН> Но, если система выполняет ответственные действия..?
> >> >> АН> Вопрос в том совместить требования надёжности и корректности с
> >> >> АН> отказоустойчивостью и возможностью восстановления после сбоя?
> >> >> Кодогенерация сишного или даже ассемблерного кода на какой-нибудь agda.
> >> >> Которая из тебя душу вынет, пока ты ей корректность не докажешь.
> >> >> Правда, порог вхождения весьма высокий.
> >> АН> Про Agda не слышал. Что-то небогато по ней документации, но,
> >> АН> насколько я понял, это система автоматического доказательства
> >> АН> теорем. Не очень понимаю, как она может быть использована, в данном
> >> АН> контексте: тесты же должны выполняться после компиляции..?
> >> В данном случае компиляция выполняется вместо тестов. Тесты, в отличие
> >> от доказательства корректности, не являются гарантией надежности.
> АН> Но ведь полное доказательство корректности провести невозможно..?
> Кто сказал?
Ну это самоочевидно. В крайнем случае, возможно провести доказательство
корректности отдельно взятой функции, если она минимальна (имеет строго
определённые области значения и области определения, причём количество таких
областей ограничено и известный тип зависимостей для этих областей), что
позволяет доказать корректность, используя определённый набор правил...
А как доказать корректность сложной функции, которая образует систему простых?
Как проверить все связи?
Как доказать корректность функции с побочными эффектами?
И, например, "крайний" случай: возможно ли доказать корректность поведения
произвольной ИНС?
> >> >> Любой статически типизированный функциональный язык с нормальной
> >> >> системой типов, начиная с того же Haskell или Ocaml.
> >> АН> Ocaml? Любопытно. Пожалуй, посмотрю подробнее.
> >> АН> Для него есть какая-то IDE? И как с библиотеками?
> >> Я знаю одну IDE на все случаи жизни. Emacs.
> АН> И для всяких там GUI? ;-) В общем, я им не пользуюсь.
> Ну да. Поскольку мои дизайнерские способности ниже средних, в отличие
> от способностей в разработке поведения, я предпочитаю GUI, которые
> пишут, а не рисуют. Внешний вид - дефолтный, а поведение описывается
> словами.
Дык, "внешний вид" - это не картинка кнопки, а компоновка. Всё же словами не
опишешь. Видеть надо.
> JAPH - это не для того, чтобы писать работающую программу :)
Однако, они показывают вариации синтаксиса: такой разный стиль...
> Впрочем,
> "как на шелл" - это лучше на шелле же и писать. Ну, с привлечением sed
> и/или awk. perl позволяет писать совершенно третьим способом, и вот
> именно им и надо писать надежные программы на нем.
Эээ.... Каким?
> >> А если ты хочешь действительно прекрасного синтаксиса, возьми tcl. У
> >> него _полное_ описание синтаксиса и семантики укладывается, если я
> >> правильно помню, в одну страницу A4, а if - всего лишь процедура из
> >> стандартной библиотеки. И все необходимое из того, что я описывал, есть.
> АН> Угу. Я читал описание. Не знаю, сомнительно...
> Работает.
Ну да, только почему-то широко его не используют... Разве что, для прототипов.
> >> >> OPT_PARAM1=${OPT_PARAM1:-value1}
> >> >> и позволить пользователю переопределять именно OPT_PARAM_1,
> >> >> использование которой он потом увидит, а не неочевидно с нею связанную
> >> >> ENV_USER_PARAM1
> >> АН> Проверять наличие в окружении OPT_PARAM перед чтением конфига.
> >> АН> И записывать во внутреннюю переменную. Затем делать подстановку переменной по
> >> АН> умолчанию, взятой из конфига.
> >> А чего ради так извращаться, если есть более прямой путь?
> АН> Чтобы не усложнять конфиг и не вносить в него код. Не делать его неочевидным, не
> АН> увеличивать в размере и, следовательно, не усложнять для изменения
> АН> пользователем. При этом, гибкость почти не уменьшится.
> Если конфиг надо писать пользователем, то опять же, возьми tcl.
Ну, а в чём будет разница?
Тут дело же не в реализации, а в подходе...
> >> >> Зато, правда, тогда зачитывать этот конфиг можно будет не
> >> >> только шеллом. Но поскольку по опыту ситуация, когда один и тот же
> >> >> конфиг и сурсится шеллом, и читается чем-то еще, встречается крайне
> >> >> редко...
> >> АН> По-моему, тут дополнительные сложности и нарушение ортогональности...
> >> А по-моему, нарушение ортогональности - это как раз модификация
> >> результата чтения конфига в использующем его скрипте.
> АН> В чём нарушение?
> АН> 1. Модификации не происходит. Уменьшение ортогональности даёт взаимодействие с
> АН> переменными окружения (возможность переопределения значений сама по себе),
> АН> независимо от реализации.
> Модификации не происходит. А вот как соотносится то, что написано в
> конфиге и то, что используется на самом деле, хрен разберешь.
Да, согласен. Но здесь проблема в очевидности. Вероятно, понятия связаны.
> АН> 2. Это просто обработка значений. Переменная как влияла на подмножество
> АН> действий/объектов, так и влияет. Размер подмножества не расширяется.
> Э, нет. Она начинает на него влиять куда как более обусловленно. "Если
> выполняется это условие, проверяемое в 235-й строке, но не вон то,
> проверяемое в 538-й, то влияет, а может, и нет..."
Ээээ... Не очень вас понял. Есть переменная.
Она влияет на определённое подмножество объектов.
Её возможно задать.
Задаётся она один раз.
Задан она может быть в конфиге или в переменных окружения.
Это понижает ортогональность (ради повышения настраиваемости), поскольку есть
две точки входа, вместо одной - конфига.
Есть два варианта реализации:
1. Обработка в конфиге.
2. Обработка в основном коде.
При обработке в конфиге, есть ощущение того, что остаётся одна точка входа -
конфиг. Реально, как две точки было, так две и осталось.
Просто часть логики перелезла в конфиг. Что его усложнило.
При обработке в основном коде возможен неправильный вариант, очень сильно
повышающий ортогональность - размазать получение параметра по всему коду.
Я же говорю о правильном - локализация получения параметров в одной функции,
вызываемой один раз при инициализации.
Где тут существенное понижение ортогональности по сравнению с первым вариантом?
> >> АН> Лучший вариант - сделать единообразный формат конфига.
> >> АН> Или сервер, отдающий конфиг в каком-либо общем формате.
> >> Все известные мне попытки последнего сводятся в итоге к переусложнению
> >> конструкции и тому, что самым сложным и ненадежным местом в системе
> >> оказывается получение какой-то несчастной директории для сохранения
> >> файлов.
> АН> Хм... Любопытно. Может быть. Но вероятно, если такое требуется,
> АН> вариантов нет.
> Не вариантов, а мозгов нет.
Хех, у меня?
Ну а какие варианты, когда требуется такая сложная система? Изобретать свой
велосипед, в итоге сводящийся с СУБД?
> Варианты как раз есть. Собственно,
> проблема с ними в том, что они пытаются решать задачу, которую решать не
> надо. Вообще не надо. И мало того, пытаются решать ее способом,
> которым почти никакие задачи решать не надо, а те, которые надо, они
> решать еще не доросли.
Кто? o.O СУБД?
Reply to: