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 СУБД? -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/4ff1ce2a.9070...@yandex.ru