~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ 9A16D1B3E856C9FDB37B6055D70C8F57__1715238720 ✰
Заголовок документа оригинал.:
✰ Extensible programming - Wikipedia ✰
Заголовок документа перевод.:
✰ Расширяемое программирование — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Extensible_programming ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/9a/57/9a16d1b3e856c9fdb37b6055d70c8f57.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/9a/57/9a16d1b3e856c9fdb37b6055d70c8f57__translat.html ✰
Дата и время сохранения документа:
✰ 16.06.2024 10:30:09 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 9 May 2024, at 10:12 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Расширяемое программирование — Википедия Jump to content

Расширяемое программирование

Из Википедии, бесплатной энциклопедии

Расширяемое программирование — это термин, используемый в информатике для описания стиля компьютерного программирования, который фокусируется на механизмах расширения языка программирования , компилятора и системы времени выполнения (среды). Расширяемые языки программирования, поддерживающие этот стиль программирования, были активной областью работы в 1960-х годах, но в 1970-х это движение было маргинализировано. [1] Расширяемое программирование стало темой нового интереса в 21 веке. [2]

Историческое движение [ править ]

Первая статья обычно [1] [3] С движением за расширяемые языки программирования связана статья М. Дугласа Макилроя 1960 года о макросах для языков программирования высокого уровня . [4] Другое раннее описание принципа расширяемости встречается в статье Брукера и Морриса 1960 года о компиляторе-компиляторе . [5] Пик движения был отмечен двумя академическими симпозиумами, в 1969 и 1971 годах. [6] [7] К 1975 году обзорная статья о движении Томаса А. Стэндиша [1] по сути, было вскрытие. Форт был исключением, но он остался практически незамеченным.

Характер исторического движения [ править ]

Как обычно предполагалось, расширяемый язык состоял из базового языка, обеспечивающего элементарные вычислительные возможности, и метаязыка , способного модифицировать базовый язык. Тогда программа состояла из модификаций метаязыка и кода на модифицированном базовом языке.

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

любой язык программирования, в котором программы и данные по существу взаимозаменяемы, можно рассматривать как расширяемый [sic] язык. ... это очень легко увидеть из того факта, что Лисп уже много лет используется как расширяемый язык. [8]

На конференции 1969 года Simula была представлена ​​как расширяемый язык.

Стэндиш описал три класса языковых расширений, которые он назвал парафразой , орфразой и метафразой (иначе парафраз и метафраза были терминами перевода ).

  • Парафраз определяет средство, показывая, как заменить его на что-то ранее определенное (или подлежащее определению). В качестве примеров он упоминает определения макросов, определения обычных процедур, грамматические расширения, определения данных, определения операторов и расширения структур управления.
  • Ортофраз добавляет к языку функции, которые невозможно было реализовать с помощью базового языка, например, добавление системы ввода-вывода (I/O) к базовому языку, ранее не имевшему примитивов ввода-вывода. Расширения следует понимать как орфразы относительно некоторого данного базового языка, поскольку признак, не определенный в терминах базового языка, должен быть определен в терминах какого-либо другого языка. Это соответствует современному понятию плагинов .
  • Метафраза изменяет правила интерпретации, используемые для ранее существовавших выражений. Это соответствует современному понятию рефлексивного программирования (рефлексии).

исторического движения Смерть

Стэндиш объяснил неудачу движения за расширение сложностью программирования последовательных расширений. Программист может построить первую оболочку макросов на базе базового языка. Затем, если на основе этого будет построена вторая оболочка макросов, любой последующий программист должен быть хорошо знаком как с базовым языком, так и с первой оболочкой. Третья оболочка потребует знакомства с основой, а также с первой и второй оболочками и так далее. Целью движения за абстракцию , пришедшего на смену движению за расширяемость, является защита программиста от деталей более низкого уровня.

Несмотря на более раннее представление Simula как расширяемой, к 1975 году исследование Стэндиша, похоже, на практике не включало новые технологии, основанные на абстракции (хотя он использовал очень общее определение расширяемости, которое технически могло их включать). История абстракции программирования 1978 года, начиная с изобретения компьютера до этого момента, не упоминала макросы и не давала никаких намеков на то, что движение за расширяемые языки когда-либо имело место. [9] Макросы были предварительно допущены в движение абстракций к концу 1980-х годов (возможно, из-за появления гигиенических макросов ), получив псевдоним синтаксические абстракции . [10]

Современное движение [ править ]

В современном понимании система, поддерживающая расширяемое программирование, будет обеспечивать все функции, описанные ниже. [ нужна цитата ] .

Расширяемый синтаксис [ править ]

Это просто означает, что компилируемые исходные языки не должны быть закрытыми, фиксированными или статическими. Должна быть предусмотрена возможность добавления новых ключевых слов, концепций и структур к исходному языку(ам). Языки, которые позволяют добавлять конструкции с синтаксисом, определяемым пользователем, включают Coq , [11] Ракетка , Camlp4 , OpenC++ , Seed7 , [12] Ред , Ребол и Феликс . Хотя допустимо, чтобы некоторые фундаментальные и внутренние особенности языка были неизменяемыми, система не должна полагаться исключительно на эти особенности языка. Должна быть возможность добавления новых.

Расширяемый компилятор [ править ]

В расширяемом программировании компилятор не является монолитной программой, преобразующей входные данные исходного кода в двоичный исполняемый вывод. Сам компилятор должен быть расширяемым до такой степени, что на самом деле он представляет собой набор плагинов, которые помогают переводить входные данные исходного языка во что угодно . Например, расширяемый компилятор будет поддерживать генерацию объектного кода, документацию по коду, переформатированный исходный код или любой другой желаемый результат. Архитектура компилятора должна позволять пользователям «попадать внутрь» процесса компиляции и предоставлять альтернативные задачи обработки на каждом разумном этапе процесса компиляции.

Только для задачи перевода исходного кода во что-то, что может быть выполнено на компьютере, расширяемый компилятор должен:

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

Расширяемая среда выполнения [ править ]

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

Содержимое отделено от формы [ править ]

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

Поддержка отладки исходного языка [ править ]

Системы расширяемого программирования должны поддерживать отладку программ с использованием конструкций исходного исходного языка независимо от расширений или преобразований, которым подверглась программа, чтобы сделать ее исполняемой. В частности, нельзя предполагать, что единственный способ отображения данных времени выполнения — это структуры или массивы . Отладчик, или, точнее, «инспектор программ», должен позволять отображать данные времени выполнения в формах, подходящих для исходного языка. Например, если язык поддерживает структуру данных для бизнес-процесса или рабочего процесса , отладчик должен иметь возможность отображать эту структуру данных в виде диаграммы «рыбий скелет» или другой формы, предоставляемой плагином.


Примеры [ править ]

См. также [ править ]

Ссылки [ править ]

  1. ^ Перейти обратно: а б с Стэндиш, Томас А., « Расширяемость в разработке языков программирования », Уведомления SIGPLAN, 10 вып. 7 (июль 1975 г.), стр. 18–21.
  2. ^ Грегори В. Уилсон, « Расширяемое программирование для 21 века », ACM Queue 2 no. 9 (декабрь/январь 2004–2005 гг.).
  3. ^ Саммет, Джин Э., Языки программирования: история и основы , Прентис-Холл, 1969, раздел III.7.2
  4. ^ Макилрой, доктор медицинских наук, « Расширения макроинструкций языков компилятора », Communications of ACM 3 no. 4 (апрель 1960 г.), стр. 214–220.
  5. ^ Брукер, Р.А. и Моррис, Д., « Общая программа перевода для языков фразовой структуры », Журнал ACM 9 вып. 1 (январь 1962 г.), стр. 1–10. Документ был получен в 1960 году.
  6. ^ Кристенсен, К. и Шоу, СиДжей, ред., Труды симпозиума по расширяемым языкам, Уведомления SIGPLAN, 4 вып. 8 (август 1969 г.).
  7. ^ Шуман, С.А., изд., Труды Международного симпозиума по расширяемым языкам, Уведомления SIGPLAN, 6 вып. 12 (декабрь 1971 г.).
  8. ^ Харрисон, MC, в «Группе экспертов по концепции расширяемости», стр. 53–54 симпозиума 1969 года.
  9. ^ Гуарино, Л.Р., « Эволюция абстракции в языках программирования». [ мертвая ссылка ] ", CMU-CS-78-120 , факультет компьютерных наук, Университет Карнеги-Меллон, Пенсильвания, 22 мая 1978 г.
  10. ^ Габриэль, Ричард П., изд., « Проект отчета о требованиях к общей системе прототипирования », Уведомления SIGPLAN 24 нет. 3 (март 1989 г.), стр. 93 и далее.
  11. ^ «Расширения синтаксиса и области обозначений — документация Coq 8.17.0» . coq.inria.fr . Проверено 25 мая 2023 г.
  12. ^ Зингаро, Дэниел, « Современные расширяемые языки », отчет SQRL 47 Университета Макмастера (октябрь 2007 г.), стр. 16.

Внешние ссылки [ править ]

Общие [ править ]

  1. Статья Грега Уилсона в очереди ACM
  2. Слэшдот Обсуждение
  3. Современные расширяемые языки. Архивировано 12 июня 2011 г. в Wayback Machine - статья Дэниела Зингаро.

Инструменты [ править ]

  1. MetaL - реализация расширяемого программирования компилятора.
  2. XPS – расширяемая система программирования (в разработке)
  3. MPS – система метапрограммирования JetBrains

Языки с расширяемым синтаксисом [ править ]

  1. ОпенЗз
  2. xtc – расширяемый C
  3. английский сценарий
  4. Немерле Макросы
  5. Бу синтаксические макросы
  6. Компилятор промежуточного формата Стэнфордского университета
  7. Seed7 – расширяемый язык программирования.
  8. Катадин - язык с синтаксисом и семантикой, которые изменяются во время выполнения.
  9. π — язык с расширяемым синтаксисом, реализованный с помощью парсера Earley.
Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: 9A16D1B3E856C9FDB37B6055D70C8F57__1715238720
URL1:https://en.wikipedia.org/wiki/Extensible_programming
Заголовок, (Title) документа по адресу, URL1:
Extensible programming - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)