Программирование как контракт с дьяволом
May. 3rd, 2015 12:29 amThe purpose of a program is informal, often unstated, criterion and the transition from informal to formal objects must forever be unformalized, lest we caught in the paradox of assuming the formalization of an object we know only informally.Не проси богов ни о чем, рискуешь получить просимое.
Social processes and proofs of theorems and programs
DeMillo, Lipton, Perils
Древние греки иллюстрировали эту максиму историями Мидаса и Титона. Первый попросил Диониса, чтобы всё, к чему он прикоснётся, обращалось в золото. И это ему было даровано. Как выяснилось на тестовом прогоне, в обществе где все едят руками такой дар может привести к смерти от истощения. Не говоря уже о сложностях в социальной жизни - ни поздороваться, ни обнять... За второго попросила любовница. Ему посчастливилось любиться с Эос, богиней утренней зари. Та и замолвила словечко Зевсу. Попросила для своего любовника вечной жизни. И это ему было даровано. Как выяснилось на тестовом прогоне, вечная жизнь без вечной молодости штука не очень приятная. Прожив заметно больше отмеренного человеку срока, Титон страдал от всех старческих болезней, включая слабоумие, не мог пошевелить ни рукой, ни ногой, ни, к полному расстройству Эос, более важными для любовника органами. Существует версия, что он постепенно ссохся в цикаду, видимо растворив внутренний скелет и нарастив внешний. Если версия верна, то среди этих мух-переростков есть одна бессмертная.
Античность закончилась, греческих богов дарующих человеку просимое в христианской Европе сменил дьявол. Европейские фольклор и литература во множестве содержат сюжеты сделки с дьяволом, смертный контрагент которых получал именно то, о чём просил. Впрочем, были и сюжеты в которых в формальную ловушку попадал дьявол, а не человек. Наиболее известный, видимо, это сюжет "приходи завтра" ("а чего ты сегодня пришёл, разве сегодня - завтра?").
Все сюжеты объединяет то, что герой комично или трагично проваливается в зазор между формальным (то что попрошено) и неформальным (то что хотелось).
Составление контракта с дьяволом, позволяющего через просимое получить желаемое, это высокое искусство формализации неформального, просчёт последствий, обработка исключительных ситуаций, тщательное обговаривание вырожденных и пограничных случаев... вобщем всё то, что составляет суть, ядро и основу работы программиста.
В конце концов, компьютер всегда делает именно то, о чём ты его попросил.
no subject
Date: 2015-05-05 11:28 pm (UTC)Так что даже для формальных языков не все так уж тривиально.
Но вообще тема интересная. Действительно, для составления дуракоустойчивых контрактов с дьяволом нужен формальный язык. С формальной же семантикой.
no subject
Date: 2015-05-06 12:00 am (UTC)А у нас на роль очевидной базы претендует разве что физика, на уровне элементарных частиц. Все остальное уже сомнительно. Но эта физика настолько далеко внизу, что никаких шансов сказать что-то содержательное на таком языке просто нет.
И все объекты, которыми мы пользуемся в нашем языке настолько высокоуровневые, что что же они означают "точно" определить очень сложно.
Может быть можно найти другую формальную базу, поближе -- но это нужно уже как-то аргументировать.
no subject
Date: 2015-05-06 01:59 am (UTC)Но допустим вы определили семантику ассемблерной программы. Помогате ли это с формализацией семантики высокоуровневого языка? Тут можно обратить внимание, что языки высокого уровня родились, чтобы семантика программы не зависела от железа. В этом смысле, допустим brainfuck вполне высокоуровневый язык.
Пробуя выразить семантику текста на языке высокого уровня через ассемблер, мы можем заметить, что даже для одного о того же железа (или одного и того же байткода) текст программы, даже на таком приближенном к ассемблеру языке как С, можно скомпилировать в довольно разные ассемблерные тексты используя разные компиляторы и их ключи. Теперь требуется доказывать, что семантика всех этих разных ассемблерных/байткодных текстов эквивалентна. В итоге выходит, что через редукцию вы определяет семантику какого-то конкретного семейства компиляторов, а не языка.
Если для С подход с редукцией дает хотя бы иллюзию корректного выхода, то попробуйте редуцировать к ассемблеру текст на SQL...
То есть даже с формальными языками редукция к нижнему уровню работает плоховато. С неформальными языками она не работает вовсе.
no subject
Date: 2015-05-06 02:25 am (UTC)Некуда в том смысле, что на этом уровне уже достаточно точно задана семантика. Есть внутренние детали типа обращения к виртуальной памяти и т.п., но даже ими можно пренебречь и получить очень хорошую модель вычислений.
Ассемблер это уровень абстракции, на который можно опираться, он не подведет.
Действительно, Вы правы, когда я говорил про редукцию к ассемблеру я имел ввиду языки типа С/С++. Если авторы языка сделали свою виртуальную машину, редуцировать его к ассемблеру непродуктивно. Но это и не нужно, так как значит у нас есть другой надежный базовый уровень -- эта виртуальная машина.
no subject
Date: 2015-05-10 08:46 am (UTC)Есть же нормальные, человеческие языки с денотационной (напр., лямбда-исчисление) или аксиоматической (напр., категорной) семантикой: лиспы, ML'ли, Haskell.
no subject
Date: 2015-05-10 07:31 pm (UTC)no subject
Date: 2015-05-10 07:42 pm (UTC)Не всем же на PHP кодить, некоторые могут освоить и инструменты помощнее.
no subject
Date: 2015-05-12 12:22 pm (UTC)Высокий порог вхождения с точки зрения промышленного программирования означает, что вам очень трудно будет набрать команду чтобы развивать и поддерживать codebase. Что эффективно и означает академизм.
no subject
Date: 2015-05-13 06:49 am (UTC)Тут хорошим примером является PHP: обладая изначально отвратительным дизайном, но (из-за своей простоты) огромным числом пользователей, он постепенно в силу потребностей пользователей и необходимости более абстрактных методов написания программ эволюционировал в нечто относительно приличное. Правда, фундаментальные последствия родовой травмы так и остались непреодолены, поэтому писать на PHP -- пытка.
no subject
Date: 2015-05-11 10:30 pm (UTC)Просто пошел за логикой мысли про ограниченность и формальность компьютерного мира, а из неё сразу получается ассемблер и т.п.
no subject
Date: 2015-05-10 02:11 pm (UTC)