… или «В поддержку шаблона полного подчинения»

HTML — отличный и надежный протокол, но его трудно обобщить в мире полных по Тьюрингу языков программирования. Так часто у вас есть возможность просто сказать компьютеру все, что вы хотите, чтобы он сделал; однако это также означает, что на вас возложена ответственность сообщать компьютеру все, что он должен делать. Обычно это никому не нужно.

Если бы я назвал HTML термином, описывающим, почему это такая крутая технология, я бы хотел подчеркнуть, как мало она на самом деле делает. В HTML5 менее 60 тегов, и большинство из них устарели. Удивительно, как много можно сделать, просто смешав вместе несколько таких примитивов.

Еще одной из моих любимых технологий является SQL. Этот язык запросов к базе данных более или менее изящно использует большую часть возможностей π-исчисления. Это делается на достаточно простом языке, поэтому многие непрограммисты регулярно используют этот мощный инструмент для создания динамических электронных таблиц или просматривают горы данных, чтобы найти ценную информацию.

Что общего у обеих этих технологий и что, как мне кажется, делает их такими мощными, так это их полное подчинение объекту-"драйверу". Для HTML есть браузер. Для SQL есть свой движок. Объект-водитель становится бесконечно сложным, но интерфейс помещает водителя в зону плодородия, где простые смертные могут взаимодействовать с этими динамичными объектами провидения.

Что побудило меня оглянуться назад на этот паттерн сейчас, так это то, с чем я недавно боролся и что, я думаю, со временем станет огромным: что-то, зловеще называемое проверкой заимствований. Это концепция, реализованная в языке программирования Rust и происходящая из теории линейных типов. Это разочаровывало меня снова и снова, и, вероятно, так же, как и других в более широком сообществе. Это бельмо на глазу архитектуры фон Неймана, и оно напрямую мешает работе многих прочных шаблонов кода, составляющих то, что обычно считается хорошим кодом.

Проще говоря, система проверки заимствований — это книжная библиотека, которая одалживает только тем посетителям, которые могут доказать, что вернут книгу до истечения срока.

Просто попробуйте проверить книгу. Это заставит вашу голову болеть.

Теперь вернемся к теме «божественного объекта». В этом случае легко увидеть, как Strict Library может хорошо подойти для этого шаблона. Пограничный код часто можно разбить на чистые функции или структуры данных. Эти маленькие кусочки можно соединить, чтобы создать еще более утонченную, но плоскую семантику. Я думаю, что мы еще увидим это в сообществе Rust. Вся эта идея все еще довольно молода на практике и еще не достигла масштаба. Однако по мере роста использования этого набора инструментов я держу пари, что мы увидим больше небольших библиотек и более чистую семантику: тогда подчинение станет одним из способов полностью отсрочить заимствование.