Ну-с, начнем по порядку.
bak писал(а):
Доказательное программирование - это составление алгоритмов и программ для ЭВМ с доказательством отсутствия в них ошибок.
Не похоже, чтобы структурное программирование чем-либо отличалось от этого определения. Я думаю, поэтому-то и нет отдельного термина на гнилом Западе. Зато и Дейкстра, и Грис, и Хоар (Hoar, C. Communicating Sequential Processes, 1978) использовали термин структурное именно в смысле доказательное. Термин нужен только чтобы свой несуществующий приоритет застолбить.
bak писал(а):
Спасибо за информацию об отсутствии исследований по "Доказательному программированию" на английском языке.
Я такого не говорил. Я говорил, что
термина такого я не встречал. А исследования по доказательству (в том числе автоматическому) ведутся, и активно. Если Вы посмотрите сообщения
Debiloid'а в этой теме, то увидите, что он успешно автоматически доказывал правильность программ в 10-15 тысяч строк (пишу по памяти). Но обычно автоматические системы доказательства правильности основаны на непроцедурных языках.
bak писал(а):
Программы без ошибок бывают. Они известны. Их можно найти в книгах и учебниках с доказательствами их правильности. Утверждающие обратное книг Э.Дийкстры и учебников по информатике не читали. Программ без ошибок не видели. Это плохо.
По-моему, плохо то, что эти программы известны. Лучше было бы, чтобы они назывались просто программами, а известны были бы программы с ошибками. А вот Ваша ссылка на учебники весьма смущает. Учебник -- это не серьезно. Это шутка. Во-первых, программа в учебнике в принципе не может быть большой. Серьезная программа -- это
строк. Даже нижняя граница -- 170 страниц -- практически неприемлема для учебника. А для 10 строк другие законы. Во-вторых, "для упрощения", "понятности подачи материала" учебник выбирает хорошо поставленную и хорошо решаемую формулировку задачи. Идет
намеренное абстрагирование от реальных условий функционирования программы. (За примером далеко ходить не надо. Сглаживающий фильтр Баттерворта первого порядка в любом учебнике будет написан в три строки (включая цикл). А Вы посмотрите на него в серьезной системе обработки сигналов. Если на страницу поместится -- хорошо. Про сортировку и вспоминать-то не хочется.) В-третьих, автор учебника не ограничен во времени на разработку своих программ. В реальной жизни программист работает в жестких временных рамках.
bak писал(а):
Сотрудники MS на своих конференциях прямо заявили, что доказательное программирование им не нужно.
Бог им судья. И Вильям Гейтс III, который им зарплату платит.
bak писал(а):
Лично у меня было шесть программных проектов, которые были сданы после 1-2 пуска на ЭВМ.
Мне очень нравится подход Д. Кнута, который установил экспоненциально растущий приз за ошибки, найденные в
. За первую ошибку -- 1 цент, за вторую -- 2 цента, за третью -- 4. Выплатил за все вместе около 20 долларов -- не раззорился. Готовы ли Вы также встать за своими продуктами (не за учебными программами, разумеется)?
bak писал(а):
Отладка программ на ЕС ЭВМ носила в МИЭМ столь мучительный характер, что студентам-математикам было проще описать программы на псевдокоде с доказательствами их правильности. Тем более, что в 1983г. Администрация МИЭМ отказала всем студентам-математикам в пуске их учебных программ в ВЦ МИЭМ.
Администрации МИЭМ - особая благодарность в переходе на технологию "доказательного программирования" - написания и анализа правильности программ без выхода на ЕС ЭВМ. Все студенты-математики писали и дрокументацию и доказательства правильности программ на родном русском языке, а программы на языках Fortran, PL/1, Basic, Pascal, C/C++.
При этом возникает интересный вопрос -- написали Вы программу на псевдокоде, доказали ее правильность, а дальше что? Откуда следует правильность трансляции псевдокода в реальный язык? Откуда следует правильность формализации интерфейса используемых в программе пакетов или библиотек?
Между прочим, этот вопрос -- вопрос трансляции -- отнюдь не праздный и не тривиальный. Там, где требуется серьезная надежность программ (я уже приводил пример медицины, теперь возьмем другой пример -- авиация), требуется сертификация не только программ, но и системы программирования. Поелику без оной сертификации компилятора и иже с ним наши знания о правильности программы улетучиваются.
bak писал(а):
Программы с доказательствами правильности можно писать на любом инструментальном языке программирования - Pascal, C/C++, Basic и т.п. Главное не в том - на каком языке пишутся программы, а какие алгормитмы реализуются в наших программах. "Алгоритмические ошибки" в программах - это ошибки, которые заложены в соответствующие алгоритмы.
Писать, разумеется, можно на любом языке. Можно объектно писать на ассемблере и неструктурно на Java. А вот удобно ли доказывать правильность программ на процедурно- ориентированных языках? Удобно ли
автоматически доказывать правильность таких программ?
Об "алгоритмических ошибках" -- отдельно. Я так понимаю, что остальные ошибки -- синтаксические. У меня истерика была, когда я услышал, что "программа прошла синтаксическую отладку". Или Вы используете какую-то более подробную классификацию ошибок?