Макрос

Макрос

Мáкрос (от англ. macros, мн.ч. от macro) — программный объект, который во время вычисления заменяется на новый объект, создаваемый определением макроса на основе его аргументов, затем выражается обычным образом.

Содержание

Макросы в прикладных программах

Во многих «офисных» продуктах (OpenOffice.org, Microsoft Office и др.), в графических программах (например, CorelDRAW) при обработке макроса автоматически выполняется заданная для каждого макроса последовательность действий — нажатия на клавиши, выбор пунктов меню и т. д. Предоставляется интерфейс для записи новых и перезаписи существующих макросов.

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

Корректный перевод термина с английского — «макрокоманда», слово же «макрос» получило распространение благодаря использованию в локализованных продуктах американской корпорации Microsoft.

К лучшим из существующих на сегодняшний день универсальным программам для создания макросов и автоматизации работы можно отнести линейки "Comfort Keys", "Robotask" и "Hot Keyboard".[источник не указан 569 дней] Каждая из данных программ обладает собственными преимуществами перед остальными.[уточнить] Говоря о специализированных программах данного направления, следует упомянуть об "AutoHook" для упрощения работы в "AutoCAD", причём наиболее функциональной является версия программы для "AutoCAD 2006", а не для более поздних версий (что проверено для версий "2007" и "2008", работающих с "AutoCAD"ом соответствующих годов выпуска).

Макросы в программировании

В языках ассемблера, а также в некоторых других языках программирования, макрос — символьное имя, заменяемое при обработке препроцессором на последовательность программных инструкций.

Для каждого интерпретатора (языков ассемблера) существует специальный синтаксис объявления и вызова макросов. Макрос может «разворачиваться» в различные последовательности инструкций при каждом вызове, в зависимости от сработавших разветвлений внутри макроса и переданных ему аргументов.

Макросы в языке Лисп

Часто бывает полезно не прописывать вычисляемое выражение вручную, а сформировать его с помощью программы. Эта идея автоматического динамического программирования особенно хорошо[источник не указан 135 дней] реализуется в языке Лисп, поскольку программа в этом языке также представляется в виде списка. Управлять тем, что надо вычислить, а что оставить, без изменения, можно с помощью использования EVAL и QUOTE, соответственно[1]. Однако, наиболее естественно программное формирование выражений осуществляется с помощью специального механизма — макросов (macro). Внешне макросы определяются и используются так же, как функции, отличается лишь способ их вычисления. Макросы дают возможность расширять синтаксис и семантику Лиспа и использовать новые подходящие для решаемой задачи формы предложений.

Абстракции такого характера называют абстракциями проблемной области (domain abstraction), а определяемое ими расширение языка Лисп — встроенным языком (embedded language). Однако, с их использованием тоже связаны свои трудности и опасности — создаваемые в процессе вычислений формы часто трудно увидеть непосредственно из определения макроса или из формы его вызова. Синтаксис определения макроса выглядит так же, как синтаксис используемой при определении функций формы DEFUN:

(DEFMACRO имя список_формальных_параметров тело)

.

Вызов макроса совпадает по форме с вызовом функции, но его вычисление отличается от вычисления вызова функции.

  • Первое отличие состоит в том, что в макросе не вычисляются аргументы — тело макроса вычисляется с аргументами в том виде, как они записаны.
  • Второе отличие связано со способом вычисления тела макроса — вычисление вызова макроса состоит из двух последовательных этапов.
    • На первом этапе осуществляется вычисление тела определения с аргументами из вызова таким же образом, как и для функции. Этот этап называют этапом расширения (expansion) или раскрытия макроса, поскольку возникающая форма, как правило, больше и сложнее исходной формы вызова. Часто говорят и о трансляции (translation) макросов, поскольку на этапе расширения макровызов они транслируется в некоторое вычислимое выражение на языке Лисп.
    • На втором этапе вычисляется полученная из вызова раскрытая форма, значение которой возвращается в качестве значения всего макровызова. Существенно отметить, что если во время расширения макровызова доступны контекстные связи из определения, то вычисление раскрытой формы производится вне контекста макровызова.

Приведем пример макроса, определяющего SETQQ, который действует наподобие SETQ, но блокирует вычисление и второго своего аргумента:

 _(defmacro setqq (х у)
 (list 'setq х (list (quote у))) 
 SETQQ
 _(setqq список (a b с)) ; 
 (ABC)       
 _список
 (А В С).

Поясним выполняемые действия. После этапа расширения макровызова значением тела макроса было:

(SETQ СПИСОК (QUOTE (А В С)))

На втором этапе эта программно созданная форма вычисляется обычным образом и её значение возвращается в качестве значения вызова макроса. В данном случае у возникшей формы есть побочный эффект.

Итак, макрос — это форма, которая во время вычисления заменяется на новую, обычно более сложную форму, которая затем вычисляется, но вычисления на втором этапе производится вне контекста макровызова, и поэтому статические связи из макроса не действуют.

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

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

В заключение приведем без комментариев пример на определение новых синтаксических форм[2], которые с помощью макросов транслируются в известные интерпретатору или ранее определённые формы. Пусть, мы хотим использовать для представления условного выражения предложение на русском языке[стиль!]:

(ЕСЛИ условие ТО р ИНАЧЕ q).

Его можно было бы определить следующим образом:

 (defmacro если (условие то р иначе q)(if ,условие ,р ,q))
 _(setq х '(alea iacta est)) 
 (ALEA IACTA EST)
 _(если (atom x) то 'орел иначе 'решка)
 РЕШКА.

См. также

Ссылки

Примечания

  1. Функции пользователя. Макросы в системе muLISP85
  2. Хьювенен Э., Сеппанен Й. Мир Лиспа., т.1

Wikimedia Foundation. 2010.

Игры ⚽ Поможем написать курсовую
Синонимы:

Полезное


Смотреть что такое "Макрос" в других словарях:

  • Макрос — греческая односложная стопа, обычно состоящая из одного долгого слога (две моры). У нас примеры макросов у Асеева: «Соловей, вей, вей, Запороги, гей, гей» в ударном стихе образуются, разумеется, путем паузования. Литературная энциклопедия:… …   Литературная энциклопедия

  • МАКРОС — Макрокоманда в программном коде, последовательность нескольких команд или процедур, объединенных для выполнения определенной задачи. Макросы служат для ускорения выполнения сложных действий, повторяющихся много раз. Благодаря макросам не… …   Словарь бизнес-терминов

  • макрос — сущ., кол во синонимов: 6 • макро (3) • макрокоманда (2) • подпрограмма (2) • …   Словарь синонимов

  • Макрос —     МАКРОС греческая односложная стопа, обычно состоящая из одного долгого слога (две моры). У нас примеры макросов у Асеева: «Соловей, вей, вей, Запороги, гей, гей» в ударном стихе образуются, разумеется, путем паузования …   Словарь литературных терминов

  • макрос — — [http://www.iks media.ru/glossary/index.html?glossid=2400324] Тематики электросвязь, основные понятия EN macro …   Справочник технического переводчика

  • Макрос в языке ассемблера — Макрос символьное имя, заменяющее несколько команд языка ассемблера. Макросы могут включать в себя инструкции, данные, метки (в том числе и локальные), директивы (в том числе условные) ассемблера, содержать вызов других макросов, могут принимать… …   Википедия

  • макрос — м акрос, а …   Русский орфографический словарь

  • макрос — Syn: макроопределение …   Тезаурус русской деловой лексики

  • макрос — у, ч., спец. Набір інструкцій, програма, які інтерпретуються прикладною програмою або системою для автоматизації яких небудь дій …   Український тлумачний словник

  • макрос — сомрак …   Краткий словарь анаграмм


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»