Металингвистическая абстракция
В информатике металингвистическая абстракция — это процесс решения сложных проблем путем создания нового языка или словаря для лучшего понимания проблемного пространства. В более общем смысле, оно также включает в себя способность или умение программиста мыслить за пределами предвзятых представлений о конкретном языке, чтобы исследовательски исследовать проблемное пространство в поисках решений, которые являются наиболее естественными или когнитивно эргономичными для него. . Это повторяющаяся тема в оригинальном MIT учебнике «Структура и интерпретация компьютерных программ» , в котором используется Scheme , диалект Lisp , в качестве основы для создания новых языков.
Объяснение [ править ]
Например, рассмотрим моделирование аэропорта внутри компьютера. В аэропорту есть такие элементы, как пассажиры, бронирования, сотрудники, бюджеты, самолеты, багаж, прибытие и отправление, а также транзитные услуги.
Программист процедурного языка (например, C ) может создавать структуры данных для представления этих элементов аэропорта, а также процедуры или процедуры для работы с этими структурами данных и их обновления, моделируя аэропорт как серию процессов, которым подвергаются его различные элементы. Например, заказы — это база данных, используемая для синхронизации пассажиров и самолетов с помощью обновлений, регистрируемых по мере прибытия и вылета. Бюджеты аналогичны, но в отношении денег: аэропорты — это множество вещей, которые нужно делать в правильном порядке, чтобы пассажиры добирались туда, куда они хотят. собираемся.
Объектно -ориентированный программист (например, Java ) может создавать объекты для представления элементов аэропорта с помощью методов , которые представляют их поведение, моделируя аэропорт как набор возможно связанных вещей, которые характерно взаимодействуют друг с другом. Например, пассажиры, сотрудники и самолеты обладают атрибутами местоположения, которые можно изменить с помощью применимых методов транзита: у транзитных служб есть методы, позволяющие доставлять сотрудников и пассажиров в аэропорты и обратно, у самолетов есть методы, позволяющие доставлять пассажиров вместе с собой между разными аэропортами: аэропорты — это группировка вещей, работающих вместе по назначению.
Функциональный Scheme программист (например, ) может создавать функции более высокого порядка, представляющие как элементы, так и поведение или процессы аэропорта, моделируя аэропорт как карту отношений между элементами в его различных доменах и элементами в их различных кодоменах. Например, аэропорты сопоставляют бюджеты с графиками бронирования, каждый из которых сам по себе представляет собой карту элементов с элементами: балансы доходов и расходов, а также балансы прибытий и отправлений, каждый из которых рекурсивно представляет собой собственное отображение элементов и своих собственных отображений. в своем роде, в совокупности включающие набор морфизмов: аэропорты транзитивно являются оценочной трансформацией определенной экономики пространства-времени.
Наконец, программист-металингвист может абстрагировать проблему, создав новые предметно-ориентированные языки для моделирования аэропортов со своеобразными примитивами и типами для этого. Новая формулировка может включать в себя любой или все вышеперечисленные подходы там, где это наиболее целесообразно. [1] потенциально позволяя программисту сохранить как абстрактную общность функциональной модели, интуитивную чувствительность объектной модели, так и прагматизм процедурной модели, основанный на деталях.
Потому что создание функциональных металингвистических абстракций в нефункциональных языках может быть обременительным, в то время как обратное обычно тривиально (например, обычно гораздо проще взять абстракцию программирования без побочных эффектов и просто добавить к ней эффекты, чем взять абстракция с сохранением состояния и обход или инкапсуляция распространения состояния), а из-за синтаксической гибкости и ссылочной безопасности функциональных макросов металингвистическое программирование в основном является идиоматическим из языков функционального программирования.
См. также [ править ]
- Специализированный для предметной области язык - компьютерный язык, специализированный для определенного набора требований или функций.
- Мультимоделирование, специфичное для предметной области - парадигма разработки программного обеспечения
- Языко-ориентированное программирование - парадигма программирования.
- Метакомпилятор - программа, генерирующая парсеры или компиляторы.
- Метаязык – язык, используемый для описания другого языка.
- Металингвистическая осведомленность - способность сознательно размышлять о природе языка.
Ссылки [ править ]
- ^ Структура и интерпретация компьютерных программ, Часть 4 - Металингвистическая абстракция