В октябре 1998 года, разочарованный упрощенным пониманием ООП, Алан Кей написал сообществу Squeak знаковое письмо. В нем он напомнил, что главная идея Smalltalk, о которой все забыли, — это не классы, а отправка сообщений. Это письмо стало манифестом, отделяющим оригинальную философию объектов от ее популярной интерпретации. Публикуем перевод этого короткого, но исторически важного документа.

Электронное письмо от 10.10.1998

Дорогие друзья, 

Мягко напомню, что на последней OOPSLA я приложил определенные усилия, чтобы донести до всех, что Smalltalk — это НЕ его синтаксис или библиотека классов, и что суть вообще не в классах. Мне жаль, что я давным-давно ввел для этой темы термин «объекты», поскольку из-за него многие фокусируются на второстепенной идее. 

Главная идея — это «отправка сообщений», именно она и составляет ядро Smalltalk/Squeak (и именно ее не удалось довести до конца в период работы в Xerox PARC). В японском языке есть небольшое слово — «ма» — означающее «то, что находится между». Возможно, ближайшим эквивалентом будет «промежуток». Ключ к созданию масштабных и расширяемых систем в первую очередь связан с проектированием способа взаимодействия между их модулями, а не с тем, какими должны быть их внутренние свойства или поведение. Взгляните на интернет: чтобы быть жизнеспособным, он должен (a) допускать существование множества различных идей и реализаций, которые не укладываются в какой-либо единый стандарт, и (b) поддерживать разные уровни безопасного взаимодействия между этими идеями. 

Если фокусироваться именно на отправке сообщений — и осознать, что хорошая метасистема способна обеспечивать позднее связывание разнообразных архитектур второго уровня, используемых в объектах, — то многие дискуссии в этой ветке, основанные на вопросах языка, пользовательского интерфейса или операционной системы, утрачивают смысл. Именно поэтому на последней OOPSLA я сетовал на то, что, хотя в PARC мы постоянно меняли Smalltalk и всегда считали его незавершенной работой, когда он вышел в большой мир, его стали воспринимать как «нечто, что просто нужно выучить», словно это был Pascal или Algol. Smalltalk-80 так и не стал платформой для следующих, более совершенных версий ООП. Учитывая нынешнее плачевное состояние программирования в целом, я считаю это серьезной ошибкой.

Кажется, я также отмечал, что жизненно важно не только иметь полноценную метасистему, но и создавать ограждения, помогающие контролировать переходы через метаграницы. Один из простейших примеров такого перехода лег в основу моих первых исследований конца 1960-х: я понял, что операция присваивания представляет собой изменение на метауровне по отношению к функциям, и поэтому их не следует смешивать на одном уровне — это послужило одной из причин инкапсулировать такого рода изменения состояния, не позволяя выполнять их произвольным образом. Я бы сказал, что система, которая позволяет выполнять другие метаоперации в ходе обычного программирования (например, менять значение наследования или того, что является экземпляром), плохо спроектирована. (Я считаю, что системы должны допускать подобные действия, но спроектировано это должно быть таким образом, чтобы существовали четкие ограничения, которые необходимо явно преодолевать при создании серьезных расширений.)

Я полагаю, что куда большего прогресса можно было бы достичь, если бы умные и талантливые участники рассылки Squeak глубже задумались о том, в каком направлении делать следующий шаг в метапрограммировании — как нам обрести силу, лаконичность И семантическую устойчивость?

Всем спасибо,
Алан