Я полагаю, что требование Paul Graham состоит в том, что шаблоны разработки должны быть выражены на языке. Если существует X шаблонов, это означает, что люди вынуждены переписать последовательности кода, чтобы сделать это, и должен быть особенный метод языка выражения его. Это могло быть встроено в язык (хотя это является неловким, и может создать новые шаблоны разработки), или это могло быть automatable в языке (таком как макросы языка Common LISP; шаблоны C++, особенно, когда используется странными способами, могут сделать почти такой же иногда).
, Например, давайте рассмотрим намного более простой шаблон: цикл постепенного увеличения. Имея необходимость сделать что-то на каждом элементе в последовательности довольно распространено, и если бы у нас не было чего-то соответствующего для оператора, то мы, несомненно, приняли бы некоторое общее соглашение кодирования выразить его, и кто-то (или некоторая четверка) упакует это вместе с другими столь же элементарными конструкциями и запишет книгу об этом.
Точно так же при использовании Шаблона "фабрика", или язык мог включать функцию Factory, или могло быть возможно автоматизировать его в языке. А именно, Paul хочет быть в состоянии записать макрос Lisp, чтобы реализовать его, вместо того, чтобы записать Фабрики сам много раз.
опасность с использованием шаблона разработки состоит в том, что это - знакомая платформа кода, которую мы продолжаем вводить, и поэтому у нас есть блоки кода, который мы склонны не читать и писать с полным вниманием. Неудобство - то, что они - код, который мы должны ввести снова и снова, и чувство, что перезапись действительно должна быть автоматизирована.
, Являются ли шаблоны основной частью использования языков, как GoF, говорит или может быть абстрагирован далеко, как PG говорит, существенно эмпирический вопрос, вероятно, лучше всего решенный путем поиска языков, где сами шаблоны являются ненужными и наблюдают, чтобы видеть, нужны ли им действительно новые шаблоны.
Языки программирования: принципы и практика , 2-е издание, Кеннет С. Лоуден (известный учебник по языкам программирования) отмечает, что «обработка исключений была впервые создана языком PL / I в 1960-х и значительно продвинулись в CLU в 1970-х. Однако только в 1980-х и начале 1990-х годов вопросы проектирования были в значительной степени решены »(283).
Я помню, как использовал обработчики исключений на языке Xerox Mesa в ... гм ... 1984 году. Этот язык существовал задолго до того. У Mesa была интересная модель исключения. Помимо распространения и обработки исключения обычным способом, обработчик может «возобновить» исключение, заставляя выполнение возвращаться из оператора «throw».
Мы не должны забывать C, у которого в 1970-х были setjmp (3)
и longjmp (3)
.
А до этого Basic , с при ошибке goto ...
Я никогда не видел реализации algol68, но слышал, что в ней есть кухонная раковина ...
«Transput» в Алголе 68 имеет обработку «событий», но ее недостаточно упростить, чтобы программист мог ее расширить.
Стандарт ALGOL 68 широко использует процедуры обработки событий в «стандартной передаче» (stdio) для управления различными событиями, возникающими при чтении (или записи) данных в файл или внешнее устройство. Встроенные подпрограммы "при событии":
В 1983 году принимались предложения разрешить программисту определять свои собственные исключения. AFAIK ни одно из этих предложений не было принято IFIP Организации Объединенных Наций.
Однако российский орган стандартизации «ГОСТ» стандартизировал обработку исключений ближе к концу Glasnost / Гласност в стандарте »ГОСТ 27975 -88 Язык программирования ALGOL 68 расширенный - Язык программирования АЛГОЛ 68 расширенный "
В ГОСТ 27975-88 используются дополнительные ключевые слова: MODULE, PUB, POSTLUDE, NEST, EGG, ON, EXCEPTION и RAISE.
Вот оригинал UK предложения:
AB49.1983-май : "Предложение по обработке исключений в АЛГОЛЕ 68", автор CH Lindsey - Страницы: 10 - 15
AB49.1983-май : " Буран_ (космический корабль) : Шаттл дважды облетел Землю за 206 минут полета. Он совершил автоматическую посадку на взлетно-посадочную полосу на космодроме Байконур , где, несмотря на скорость бокового ветра 61,2 км (38,0 миль) / час, приземлился всего на 3 метра (9,8 футов) в поперечном направлении и 10 метров (33). ft) в продольном направлении от цели.
CLU имел обработку исключений в начале 1970-х годов.
Обработка исключений действительно восходит к тому, что было раньше, чем языки программирования; сначала это был аппаратный механизм для перехвата ошибок (тех, которые вызвали остановку выполнения) и, возможно, перехода к подпрограмме.
Например, ЦП VAX мог обнаруживать доступ к виртуальному адресу, не имеющему физического отображения, и вызывать подпрограмму, которая либо загружала соответствующую страницу из подкачки, либо останавливала программу. Механизм, по сути, тот же, что и в современных процессорах (см. «Буфер быстрого преобразования»). Таким образом, в некотором смысле первым языком, в котором были исключения, был ассемблер.
Первыми структурированными языками, в которых были исключения, по-видимому, были PL / I и CLU (см. Mipadi выше).
Относительно поддержки КОБОЛом обработки исключений: Классическая (ввод/вывод и арифметическая) обработка исключений существует по крайней мере с 1968 года, как стандарт COBOL. Обработка исключений OO была добавлена в COBOL в стандарте 2002 года.
.