Эта заметка является кратким введением в серию из трех отдельных, но взаимосвязанных статей, относящихся к Третьему Манифесту. Третий Манифест – для краткости, просто Манифест – это наше с Хью Дарвеном формальное предложение основания для систем управления данными и базами данных (СУБД). Подобно исходным статьям Кодда, посвященным реляционной модели данных, наш Манифест можно считать абстрактной моделью для разработки СУБД. По сути, он состоит из набора тщательно подобранных принципов, представленных в форме предписаний и запретов, приверженность к которым мы с Хью требуем в гипотетическом языке программирования баз данных, называемом нами языком D. Различные предписания и запреты подробно описаны в нашей книге Databases, Types, and the Relational Model: The Third Manifesto, 3rd edition (Addison-Wesley, 2006), которую я далее буду называть «книгой о Манифесте».
Далее, любая научная попытка почти обязательно подвергается анализу и сомнениям, и в этом отношении Манифест и язык D не являются исключениями. На самом деле, некоторые исправления, которые мы смогли сделать в последние годы, являются прямым результатом критических замечаний, прозвучавших в разное время. В ряде других случаев мы смогли показать, что по некоторым причинам критика была безосновательной; в некоторых же случаях вопрос еще не решен в том смысле, что остается неясным, требуются ли какие-либо изменения. Три представляемые вашему вниманию статьи связаны с критическими замечаниями, частично или полностью относящимися к этой третьей категории. Эти критические замечания выявились в ходе частной переписки в конце 2005 – начале 2006 гг. между Хью и двумя людьми (имена которых здесь умышленно не приводятся). По существу, эти два критика утверждают следующее:
- В языке D допускаются неразрешимые (являющиеся парадоксальными) выражения.
- От языка D требуется вычислительная полнота.
- От языка D требуется поддержка переменных отношений (relvar) и операции присваивания отношений.
Сразу скажу, что второе и третье утверждения являются, безусловно, верными (по крайней мере, они верны настолько, насколько верно наше допущение (явно выраженное в книге о Манифесте) о том, что язык D обладает императивным стилем). Вероятно, верным является и первое утверждение (по крайней мере, такое допущение не повредит целям этой вводной заметки). Поэтому в каждом случае проблему представляет не само утверждение, а выводимые из него следствия. Я посвящаю каждому из этих утверждений по одной из следующих трех статей:
- Гедель, Рассел, Кодд: Рекурсивная золотая чехарда (Gödel, Russell, Codd: A Recursive Golden Crowd)
- А теперь про нечто полностью вычислительное (And Now for Something Completely Computational)
- Быть или не быть значению переменной (To Be Is to Be a Value of a Variable)
Пожалуйста, примите к сведению, что эти статьи не представляют собой последнее слово по поводу обсуждаемых вопросов, это всего лишь моя немедленная реакция на три критических замечания (в частности, на вынесенные ими на поверхность различные проблемы, которые могут быть тщательно проанализированы). Как я уже говорил, статьи являются взаимосвязанными; однако я писал их таким образом, чтобы обеспечить их независимость друг от друга – частично потому, что соответствующие вопросы можно, в известной мере, обсуждать по отдельности, но главным образом, по той причине, что в противном случае было труднее воспринимать мои аргументы. Однако я должен предупредить вас, что это мое решение не означает, что материал статей не перекрывается.
Есть еще пара предварительных замечаний, которые мне следует привести в этом введении. Первое относится к тому, что мы называем Tutorial D и его связи с языком D. Название D является родовым – оно используется в книге о Манифесте для обозначения любого языка, соответствующего принципам, которые заложены в Манифесте. Таким образом, может существовать любое число различных языков, оцениваемых как допустимый D. Язык Tutorial D является одним из таких языков; он определяется, более или менее формально, в самой книге о Манифесте и используется во всей книге (и в других публикациях) как базис для примеров. Однако, к сожалению, наши критики часто не проводят должного различия между D и Tutorial D, хотя между ними существует явное логическое различие. В результате иногда трудно сказать, направлена ли критика на Манифест в целом или же на Tutorial D, рассматриваемый как конкретная и, возможно, дефектная попытка определения D. В этой ситуации иногда бывает трудно отвечать на критические замечания.
Что касается второго предварительного замечания, я начну с немного измененной выдержки из самой книги о Манифесте:
Мы должны подчеркнуть, что мы не предлагаем какую-либо разновидность «новой» или «расширенной» реляционной модели. Скорее, мы говорим о том, что можно было бы назвать «классической» версией этой модели; мы стараемся предоставить настолько тщательное и точное описание этой модели, насколько способны на это. Действительно, мы пользуемся возможностью расставить точки над несколькими i и черточки в нескольких t (т.е. немного прибраться там и сям); однако модель в том виде, в котором мы ее описываем, в существенных аспектах не отличается от исходной версии Кодда, зафиксированной [в его ранних статьях] … Идеи Манифеста ни в коей мере не направлены на замену идей реляционной модели; скорее, идеи реляционной модели используются как основа для построения идей Манифеста … По нашему мнению, Манифест соответствует духу исходных работ Кодда и следует заложенному им пути. Нас интересует эволюция, а не революция.
Причина, по которой я процитировал здесь этот длинный пассаж, объясняется феноменом, наблюдаемом нами в некоторых критических замечаниях по поводу нашей работы, а именно, в тенденции к жалобам на то, что наши предложения в чем-то конфликтуют с собственными статьями Кодда – из чего, вероятно, должна следовать ложность наших предложений. Мы отвергаем существование такого конфликта как возможного повода для критики, и мы отвергаем выводимое из этого следствие. С нашей точки зрения, гений Кодда проявился, прежде всего, в его изобретении реляционной модели, а также в его исключительной серии статей по этому поводу в 1969-1974 гг. Однако из этого не следует, что мы безоговорочно согласны со всем, что написал Кодд о реляционной модели данных. Поэтому, безусловно, в некоторых аспектах Манифеста наши идеи отклоняются от идей Кодда – спешу добавить, что не во многих аспектах, а лишь в некоторых. Показательным примером является поддержка неопределенных значений; Кодд этого требовал (кроме как в ранних статьях о реляционном подходе), а Манифест отвергает.
Заканчивая это введение, я бы хотел поблагодарить Хью Дарвена за его анализ и критику ранних вариантов всех трех статей.
Первая статья цикла