Jump to content

m4 (компьютерный язык)

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

m4 макропроцессор общего назначения, включенный в большинство Unix-подобных операционных систем и являющийся компонентом стандарта POSIX .

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

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

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

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

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

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

В реализации Rational Fortran с самого начала в качестве макродвижка использовался m4, и большинство вариантов Unix поставляются с ним.

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

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

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

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

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

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

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

divert(-1)

m4 has multiple output queues that can be manipulated with the
`divert' macro. Valid queues range from 0 to 10, inclusive, with
the default queue being 0. As an extension, GNU m4 supports more
diversions, limited only by integer type size.

Calling the `divert' macro with an invalid queue causes text to be
discarded until another call.  Note that even while output is being
discarded, quotes around `divert' and other macros are needed to
prevent expansion.

# Macros aren't expanded within comments, meaning that keywords such
# as divert and other built-ins may be used without consequence.

# HTML utility macro:

define(`H2_COUNT', 0)

# The H2_COUNT macro is redefined every time the H2 macro is used:

define(`H2',
	`define(`H2_COUNT', incr(H2_COUNT))<h2>H2_COUNT. $1</h2>')

divert(1)dnl
dnl
dnl The dnl macro causes m4 to discard the rest of the line, thus
dnl preventing unwanted blank lines from appearing in the output.
dnl
H2(First Section)
H2(Second Section)
H2(Conclusion)
dnl
divert(0)dnl
dnl
<HTML>
undivert(1)dnl One of the queues is being pushed to output.
</HTML>

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

<HTML>
<h2>1. First Section</h2>
<h2>2. Second Section</h2>
<h2>3. Conclusion</h2>
</HTML>

Реализации

[ редактировать ]

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

M4 был включен в операционную систему Inferno . Эта реализация более тесно связана с исходным m4, разработанным Керниганом и Ритчи в версии 7 Unix, чем с его более сложными родственниками в UNIX System V и POSIX . [ 5 ]

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

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

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

См. также

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

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 2f0af35b16f7c7bfda4352051d5c3c17__1694940660
URL1:https://arc.ask3.ru/arc/aa/2f/17/2f0af35b16f7c7bfda4352051d5c3c17.html
Заголовок, (Title) документа по адресу, URL1:
m4 (computer language) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)