Подтвердить что ты не робот

Кто изобрел прокси-сервер и когда?

Кажется, что до недавних лет обычный способ передать дополнительный тип функции состоял в том, чтобы сделать что-то вроде

f (undefined :: T)

Киселев и Шан даже использовали этот подход в своей классической статье о классовом отражении, вдохновившем пакет reflection. Они оправдали очевидное уродство, отметив, что фиктивная ценность никогда не проверяется. И только немного менее уродливое воплощение появляется в Data.Bits.finiteBitSize, которое принимает значение, которое оно игнорирует, чтобы получить его тип.

Затем кто-то выяснил прокси-идиому, и все изменилось. Теперь мы всегда видим гораздо более удовлетворительные

f (Proxy :: Proxy T)

(в стандартном коде - приложение типа GHC - это еще одна история).

Кто это понял? Это впервые появилось в коде где-нибудь или в бумаге?

4b9b3361

Ответ 1

Фантастический вопрос. TypeLevelReasoning, раннее предложение GHC с апреля 2013 года, ссылается на поток libraries "Прокси, новый тип и равенство типа" (оригинальный плакат Ричард Эйзенберг, движущая сила многих недавних зависимых работ Хаскелла). Этот поток ссылается на другой поток libraries "Proxy and new-typeable" (оригинальный плакат Shachaf Ben-Kiki), который был запущен в ответ на патч из ветки new-typeable. Трудно найти запись старых имен ветвей и на которых они указывают, но совершить 3d53407 от José Pedro Magalhães, кажется, это сжатая версия этой ветки. Действительно, это первая попытка совершить посадку в GHC, чтобы ввести тип data Proxy t = Proxy. Эйзенберг позже перенесет этот тип на Data.Proxy в совершить 01aa22b в феврале 2013 года. Окончательный дизайн Proxy кажется коллективным синтезом идей от многих людей. Тем не менее, мы можем найти академические ссылки на Proxy в работе Magalhães, например, его презентацию "Правильный вид общего программирования" (октябрь 2012 г.) ) и его сообщение в блоге "Скоро в GHC HEAD: poly-kinded Typeable" (ноябрь 2012 г.). Вероятно, мы можем связать с ним включение Proxy в базу.

Однако идея типа Proxy кажется намного старше:

Именно здесь мои поисковые запросы Google становятся сухими. Кажется, я не могу найти антецедента к этой статье 2005 года.

Coda: предложение Shachaf в этом потоке универсального квантования типа прокси с помощью forall proxy a. proxy a (которое базовые библиотеки все еще используют по сей день) вместо forall a. Proxy a само по себе интересно, так как это и другие электронные письма в потоке предположим, что в какой-то момент могло быть несколько экземпляров Proxy, плавающих вокруг экосистемы Хаскелла. Как упоминалось в комментариях, Библиотека тегов с меткой Kmett имела его еще в июне 2010 года.