Металингвистическая абстракция

Принцип в информатике предметно-ориентированных языков для решения проблем

В информатике металингвистическая абстракция — это процесс решения сложных проблем путем создания нового языка или словаря для лучшего понимания проблемного пространства. В более общем смысле, она также охватывает способность или умение программиста мыслить вне предвзятых представлений о конкретном языке, чтобы исследовать проблемное пространство в поисках наиболее естественных или когнитивно эргономичных для него решений. Это повторяющаяся тема в основополагающем учебнике MIT Structure and Interpretation of Computer Programs , который использует Scheme , диалект Lisp , в качестве основы для построения новых языков.

Объяснение

Например, рассмотрим моделирование аэропорта внутри компьютера. Аэропорт имеет такие элементы, как пассажиры, бронирования, сотрудники, бюджеты, самолеты, багаж, прибытия и отправления, а также транзитные услуги.

Процедурный программист (например, C ) может создавать структуры данных для представления этих элементов аэропорта и процедуры или процедуры для работы с этими структурами данных и их обновления, моделируя аэропорт как ряд процессов, которым подвергаются его различные элементы. Например, bookings — это база данных, используемая для синхронизации пассажиров и самолетов с помощью обновлений, регистрируемых как прибытия и отправления, бюджеты — это то же самое, но для денег: аэропорты — это множество вещей, которые нужно делать в правильном порядке, чтобы пассажиры добрались до места назначения.

Объектно-ориентированный программист (например, Java ) может создавать объекты для представления элементов аэропорта с методами , которые представляют их поведение, моделируя аэропорт как набор возможно связанных вещей, которые характерно взаимодействуют друг с другом. Например, пассажиры, сотрудники и самолеты обладают атрибутами местоположения, которые могут быть изменены с помощью применимых методов транзита: транзитные службы имеют методы для доставки сотрудников и пассажиров в аэропорты и из аэропортов, самолеты имеют методы для доставки пассажиров вместе с собой между различными аэропортами: аэропорты представляют собой группу вещей, работающих вместе, как и предполагалось.

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

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

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

Смотрите также

Ссылки

  1. ^ Структура и интерпретация компьютерных программ, часть 4 — Металингвистическая абстракция
Взято с "https://en.wikipedia.org/w/index.php?title=Металингвистическая_абстракция&oldid=1224576947"