stringtranslate.com

m4 (lenguaje informático)

m4 es un macroprocesador de uso general incluido en la mayoría de los sistemas operativos tipo Unix y es un componente del estándar POSIX .

El lenguaje fue diseñado por Brian Kernighan y Dennis Ritchie para las versiones originales de UNIX . Es una extensión de un macroprocesador anterior, m3, escrito por Ritchie para una minicomputadora AP-3 desconocida. [1]

El preprocesador de macros funciona como una herramienta de sustitución de texto. Se emplea para reutilizar plantillas de texto, normalmente en aplicaciones de programación informática , pero también en aplicaciones de edición y procesamiento de texto. La mayoría de los usuarios requieren m4 como dependencia de GNU autoconf .

Historia [2]

Los macroprocesadores se hicieron populares cuando los programadores utilizaban comúnmente el lenguaje ensamblador . En aquellos primeros días de la programación, los programadores notaron que gran parte de sus programas consistían en texto repetido e inventaron medios simples para reutilizar este texto. Los programadores pronto descubrieron las ventajas no sólo de reutilizar bloques enteros de texto, sino también de sustituir valores diferentes por parámetros similares. Esto definió el rango de uso de los macroprocesadores.

En la década de 1960, en AT&T Bell Laboratories se utilizaba uno de los primeros macroprocesadores de uso general, el M 6 , que fue desarrollado por Douglas McIlroy , Robert Morris y Andrew Hall. [3]

Kernighan y Ritchie desarrollaron m4 en 1977, basándose en las ideas de Christopher Strachey . Las características distintivas de este estilo de preprocesamiento macro incluyeron:

La implementación de Rational Fortran utilizó m4 como motor macro desde el principio, y la mayoría de las variantes de Unix se entregan con él.

A partir de 2021, muchas aplicaciones continúan usando m4 como parte de la autoconf del Proyecto GNU . También aparece en el proceso de configuración de sendmail (un agente de transferencia de correo muy extendido ) y para generar huellas en el conjunto de herramientas gEDA . La política de referencia de SELinux depende en gran medida del macroprocesador m4.

m4 tiene muchos usos en la generación de código , pero (como ocurre con cualquier macroprocesador) los problemas pueden ser difíciles de depurar. [4]

Características

m4 ofrece estas instalaciones:

A diferencia de la mayoría de los macroprocesadores anteriores, m4 no se dirige a ninguna computadora o lenguaje humano en particular; Históricamente, sin embargo, su desarrollo se originó por apoyar el dialecto Ratfor de Fortran . A diferencia de otros macroprocesadores, m4 es un lenguaje de programación práctico y completo de Turing .

Los identificadores sin comillas que coinciden con macros definidas se reemplazan con sus definiciones. Colocar identificadores entre comillas suprime la expansión hasta posiblemente más tarde, como cuando una cadena entre comillas se expande como parte del reemplazo de una macro. A diferencia de la mayoría de los idiomas, las cadenas en m4 se citan utilizando la comilla invertida (`) como delimitador inicial y el apóstrofo (') como delimitador final. Los delimitadores iniciales y finales separados permiten el anidamiento arbitrario de comillas en cadenas, lo que permite un alto grado de control de cómo y cuándo tiene lugar la expansión macro en diferentes partes de una cadena.

Ejemplo

El siguiente fragmento ofrece un ejemplo sencillo que podría formar parte de una biblioteca para generar código HTML . Define una macro comentada para numerar secciones automáticamente:

desviar(-1)m4 tiene múltiples colas de salida que se pueden manipular con elmacro "desviar". Las colas válidas van de 0 a 10, inclusive, conla cola predeterminada es 0. Como extensión, GNU m4 admite másdesvíos, limitados únicamente por el tamaño del tipo de número entero.Llamar a la macro "desviar" con una cola no válida provoca que el texto sedescartado hasta otra llamada. Tenga en cuenta que incluso mientras se realiza la salidadescartado, se necesitan comillas alrededor de "desviar" y otras macros paraimpedir la expansión.# Las macros no se expanden dentro de los comentarios, lo que significa que palabras clave como# ya que el desvío y otras funciones integradas se pueden utilizar sin consecuencias.# Macro de utilidad HTML:definir(`H2_COUNT', 0)# La macro H2_COUNT se redefine cada vez que se utiliza la macro H2:definir(`H2',`define(`H2_COUNT', incr(H2_COUNT)) < h2 > H2_COUNT. $1 </ h2 > ')desviar(1)dnldnldnl La macro dnl hace que m4 descarte el resto de la línea, por lo tantodnl evitando que aparezcan líneas en blanco no deseadas en la salida.dnlH2 (Primera Sección)H2 (Segunda Sección)H2(Conclusión)dnldesviar(0)dnldnl<HTML>undivert(1)dnl Una de las colas se está enviando a la salida.</HTML>

Al procesar este código con m4 se genera el siguiente texto:

< HTML > < h2 > 1. Primera Sección </ h2 > < h2 > 2. Segunda Sección </ h2 > < h2 > 3. Conclusión </ h2 > </ HTML >

Implementaciones

FreeBSD , NetBSD y OpenBSD proporcionan implementaciones independientes del lenguaje m4. Además, las herramientas de desarrollo de proyectos Heirloom incluyen una versión gratuita del lenguaje m4, derivado de OpenSolaris .

M4 ha sido incluido en el sistema operativo Inferno . Esta implementación está más estrechamente relacionada con el m4 original desarrollado por Kernighan y Ritchie en la Versión 7 de Unix que con sus parientes más sofisticados en UNIX System V y POSIX . [5]

GNU m4 es una implementación de m4 para el Proyecto GNU . [6] [7] Está diseñado para evitar muchos tipos de límites arbitrarios que se encuentran en las implementaciones tradicionales de m4, como longitudes máximas de línea, tamaño máximo de una macro y número de macros. Eliminar tales límites arbitrarios es uno de los objetivos declarados del Proyecto GNU. [8]

El paquete GNU Autoconf hace un uso extensivo de las características de GNU m4.

GNU m4 actualmente es mantenido por Gary V. Vaughan y Eric Blake. [6] GNU m4 es software libre , publicado bajo los términos de la Licencia Pública General GNU .

Ver también

Referencias

  1. ^ Brian W. Kernighan y Dennis M. Ritchie. El macroprocesador m4. Informe técnico, Bell Laboratories, Murray Hill, Nueva Jersey, EE. UU., 1977. pdf
  2. ^ Historia de GNU m4
  3. ^ Cole, AJ (1981). Macroprocesadores (segunda edición revisada). Archivo COPA. pag. 254.
  4. ^ Kenneth J. Turner. Explotando el lenguaje de macros m4. Informe técnico CSM-126, Departamento de Ciencias de la Computación y Matemáticas, Universidad de Stirling, Escocia, septiembre de 1994. pdf
  5. ^ m4(1)  –  Manual de comandos generales de Inferno
  6. ^ ab sitio web de GNU m4 "GNU M4", consultado el 25 de enero de 2020.
  7. ^ Manual de GNU m4, en línea y para descargar en HTML, PDF y otros formatos. "GNU M4 - Macroprocesador GNU", consultado el 25 de enero de 2020.
  8. ^ "Estándares de codificación GNU: redacción de programas sólidos". cita: "Evite límites arbitrarios en la longitud o el número de cualquier estructura de datos".

enlaces externos