M4 (компьютерный язык) - M4 (computer language)

м4
Парадигмамакрос
РазработаноБрайан Керниган, Деннис Ричи
Впервые появился1977; 43 года назад (1977)
Главный реализации
GNU m4

м4 это универсальный макропроцессор включен в большинство Unix-подобный операционных систем и является компонентом POSIX стандарт.

Язык был разработан Брайан Керниган и Деннис Ричи для исходных версий UNIX. Это расширение более раннего макропроцессора м3, написанный Ричи для неизвестного миникомпьютера AP-3.[1]

Макрос препроцессор работает как инструмент замены текста. Он используется для повторного использования текстовых шаблонов, обычно в компьютерное программирование приложений, но также и в приложениях для редактирования и обработки текста. Большинству пользователей требуется m4 как зависимость от GNU autoconf.

История

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

В 1960-х годах первый макропроцессор общего назначения M6 использовался в AT&T Bell Laboratories, который был разработан Дуглас Макилрой, Роберт Моррис и Эндрю Холл.[2]

Керниган и Ричи разработали m4 в 1977 году, основываясь на идеях Кристофер Стрейчи. Отличительные черты этого стиля предварительной обработки макросов:

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

Реализация Рациональный Фортран с самого начала использовал m4 в качестве макроса; и большинство Unix варианты поставляются вместе с ним.

По состоянию на 2020 год многие приложения продолжают использовать m4 как часть GNU Проекта autoconf. Он также появляется в процессе настройки Отправить почту (широко распространенный агент по пересылке почты ) и для создания посадочных мест в gEDA набор инструментов. В SELinux Справочная политика во многом полагается на макропроцессор m4.

m4 имеет множество применений в генерация кода, но (как и в случае с любым макропроцессором) проблемы может быть трудно отладить.[3]

особенности

m4 предлагает следующие возможности:

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

В отличие от большинства более ранних макропроцессоров, m4 не нацелен на конкретный компьютер или человеческий язык; исторически, однако, его развитие возникло для поддержки Ratfor диалект Фортран. В отличие от некоторых других макропроцессоров, m4 Полный по Тьюрингу а также практический язык программирования.

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

пример

В следующем фрагменте дается простой пример, который может стать частью библиотеки для создания HTML код. Он автоматически определяет закомментированный макрос для нумерации разделов:

divert (-1) m4 имеет несколько очередей вывода, которыми можно управлять с помощью макроса'divert '. Допустимые очереди находятся в диапазоне от 0 до 10 включительно, при этом очередь по умолчанию равна 0. В качестве расширения GNU m4 поддерживает больше переадресаций, ограниченных только размером целочисленного типа. Вызов макроса «divert» с недопустимой очередью приводит к тому, что текст будет отложен до следующего вызова. Обратите внимание, что даже когда вывод отбрасывается, кавычки вокруг `divert 'и других макросов необходимы для предотвращения расширения. # Макросы не раскрываются в комментариях, что означает, что такие ключевые слова, как divert и другие встроенные функции, могут использоваться без последствий. # HTML служебный макрос: define (`H2_COUNT ', 0) # Макрос H2_COUNT переопределяется каждый раз, когда используется макрос H2: define (` H2', `define (` H2_COUNT ', incr (H2_COUNT))<h2>H2_COUNT. 1 доллар</h2>') divert (1) dnldnldnl Макрос dnl заставляет m4 отбрасывать оставшуюся часть строки, таким образом, dnl предотвращает появление нежелательных пустых строк в выводе. dnlH2 (Первая часть) H2 (Вторая часть) H2 (Заключение) dnldivert (0) dnldnl<HTML>undivert (1) dnl Одна из очередей отправляется на вывод.</HTML>

Обработка этого кода с помощью m4 генерирует следующий текст:

<HTML><h2>1. Первый раздел</h2><h2>2. Второй раздел</h2><h2>3. Заключение</h2></HTML>

Реализации

FreeBSD, NetBSD, и OpenBSD предоставить независимые реализации языка m4. Кроме того, Семейная реликвия Инструменты разработки включают бесплатную версию языка m4, производную от OpenSolaris.

M4 был включен в Inferno Операционная система. Эта реализация более тесно связана с оригинальным m4, разработанным Керниган и Ричи в Версия 7 Unix чем его более искушенные родственники в Система UNIX V и POSIX.[4]

GNU m4 это реализация m4 для Проект GNU.[5][6] Он разработан, чтобы избежать многих видов произвольных ограничений, встречающихся в традиционных реализациях m4, таких как максимальная длина строки, максимальный размер макроса и количество макросов. Удаление таких произвольных ограничений - одна из заявленных целей проекта GNU.[7]

GNU Autoconf пакет широко использует возможности GNU m4.

GNU m4 в настоящее время поддерживается Гэри В. Воганом и Эриком Блейком. Выпущено на условиях Стандартная общественная лицензия GNU, GNU m4 - это свободное программное обеспечение.

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

использованная литература

  1. ^ Брайан В. Керниган и Деннис М. Ричи. Макропроцессор m4. Технический отчет, Bell Laboratories, Мюррей-Хилл, Нью-Джерси, США, 1977. pdf
  2. ^ Коул, А. Дж. (1981). Макро процессоры (2-е, перераб.). CUP Архив. п. 254.
  3. ^ Кеннет Дж. Тернер. Использование макроязыка m4. Технический отчет CSM-126, Департамент вычислительной техники и математики, Университет Стерлинга, Шотландия, сентябрь 1994 г. pdf
  4. ^ м4 (1) – Inferno Общие команды Руководство по эксплуатации
  5. ^ Веб-сайт GNU m4 "GNU M4", по состоянию на 25 января 2020 г.
  6. ^ Руководство по GNU m4, онлайн и для загрузки в HTML, PDF и других формах. «GNU M4 - макропроцессор GNU», по состоянию на 25 января 2020 г.
  7. ^ «Стандарты кодирования GNU: написание надежных программ».quote: «Избегайте произвольных ограничений на длину или количество любых структур данных».

внешние ссылки