M4 (Computersprache)

M4
Paradigma Makro
Entworfen von Brian Kernighan, Dennis Ritchie
Erstmals erschienen 1977; Vor 45 Jahren
Haupt Implementierungen
GNU M4

M4 ist ein Makroprozessor Allzweck in den meisten enthalten Unix-artig Betriebssysteme und ist ein Bestandteil der Posix Standard.

Die Sprache wurde von entworfen von Brian Kernighan und Dennis Ritchie für die ursprünglichen Versionen von Unix. Es ist eine Erweiterung eines früheren Makroprozessors. M3, geschrieben von Ritchie für einen unbekannten AP-3-Minicomputer.[1]

Das Makro Präprozessor arbeitet als Text-Replacement-Tool. Es wird verwendet, um Textvorlagen wieder zu verwenden, normalerweise in Computerprogrammierung Anwendungen, aber auch in Textbearbeitungs- und Textverarbeitungsanwendungen. Die meisten Benutzer benötigen M4 als Abhängigkeit von GNU Autoconf.

Geschichte

Makroprozessoren wurden populär, als Programmierer häufig verwendet Montagesprache. In jenen frühen Tagen der Programmierung stellten Programmierer fest, dass ein Großteil ihrer Programme aus wiederholten Text bestand, und sie erfanden einfache Mittel zur Wiederverwendung dieses Textes. Programmierer entdeckten bald die Vorteile nicht nur, ganze Textblöcke wiederzuverwenden, sondern auch die Ersetzung verschiedener Werte für ähnliche Parameter. Dies definierte den Verwendungsbereich von Makroprozessoren.

In den 1960er Jahren ein frühzeitiger Makroprozessor, m, m6, war im Gebrauch bei AT & T Bell Laboratories, was entwickelt wurde von Douglas McIlroy, Robert Morris und Andrew Hall.[2]

Kernighan und Ritchie entwickelten 1977 M4 Christopher Strachey. Zu den Unterscheidungsmerkmalen dieser Art der Makrovorverarbeitung gehörten:

  • Freiform-Syntax (nicht leitend wie ein typischer Makrovorprozessor für die Verarbeitung montagesprachiger Verarbeitung)
  • Der hohe Grad an Reexpansion (die Argumente eines Makros werden zweimal erweitert: einmal beim Scannen und einmal zur Interpretationszeit)

Die Implementierung von Rationaler Fortran benutzte M4 als Makromotor von Anfang an; Und die meisten Unix Varianten versenden damit.

Ab 2021 Viele Anwendungen verwenden M4 weiterhin als Teil der GNU Projekts Autoconf. Es erscheint auch im Konfigurationsprozess von sendmail (ein weit verbreiteter Mail Transfer Agent) und zur Erzeugung von Fußabdrücken in der Geda Toolsuite. Das Selinux Die Referenzrichtlinie stützt sich stark auf den M4 -Makroprozessor.

M4 hat viele Verwendungszwecke in Codegenerierung, aber (wie bei jedem Makroprozessor) kann Probleme schwer zu debuggen sein.[3]

Merkmale

M4 bietet diese Einrichtungen:

  • a Freiform-Syntaxeher als eine leitebasierte Syntax
  • Ein hohes Maß an Makroerweiterung (Argumente werden während des Scans und erneut während der Interpretation erweitert)
  • Textersatz
  • Parametersubstitution
  • Dateieinschluss
  • String Manipulation
  • Bedingte Bewertung
  • arithmetische Ausdrücke
  • Systemschnittstelle
  • Programmiererdiagnostik
  • Programmiersprache unabhängig
  • menschliche Sprache unabhängig
  • Bietet Programmiersprachenfunktionen

Im Gegensatz zu den meisten früheren Makroprozessoren zielt M4 auf keinen bestimmten Computer oder keine bestimmte menschliche Sprache ab. Historisch gesehen entstand seine Entwicklung jedoch für die Unterstützung der Unterstützung der Ratte Dialekt von Forran. Im Gegensatz zu einigen anderen Makroprozessoren ist M4 Turing-Complete sowie eine praktische Programmiersprache.

Nicht zahlreiche Kennungen, die definierte Makros übereinstimmen, werden durch ihre Definitionen ersetzt. Durch das Platzieren von Kennungen in Zitaten wird die Expansion bis möglicherweise später unterdrückt, z. B. wenn eine zitierte Zeichenfolge im Rahmen des Makroersatzes erweitert wird. Im Gegensatz zu den meisten Sprachen werden Saiten in M4 mit dem zitiert Backtick (`) als Start Abgrenzer, und Apostroph (') Als Endtrainiter. Durch separate Start- und Endgrenzwerte können die willkürlichen Verschachtelung von Anführungszeichen in Zeichenfolgen verwendet werden, sodass ein feiner Kontrolle darüber ist, wie und wann die Makroerweiterung in verschiedenen Teilen einer Saite stattfindet.

Beispiel

Das folgende Fragment gibt ein einfaches Beispiel, das Teil einer Bibliothek zum Generieren sein kann Html Code. Es definiert automatisch ein kommentiertes Makro -zu -Zahlen -Abschnitten:

Divert (-1) M4 hat mehrere Ausgangswarteschlangen, die mit dem "Divert" -Makro manipuliert werden können. Gültige Warteschlangen reichen von 0 bis 10, einschließlich der Standardwarteschlange. Als Erweiterung unterstützt GNU M4 mehr Umleitungen, nur durch die Größe der Ganzzahl. Wenn Sie das "Divert" -Makro mit einer ungültigen Warteschlange aufrufen, werden Text bis zu einem anderen Anruf verworfen. Beachten Sie, dass auch während der Ausgabe von Ausgabe geworfen wird, Zitate rund um "Divert" und andere Makros benötigt werden, um eine Expansion zu verhindern. # Makros werden in Kommentaren nicht erweitert, was bedeutet, dass Schlüsselwörter wie Divert und andere integrierte Ins ohne Konsequenz verwendet werden können. # HTML Utility -Makro: Define ("H2_COUNT ', 0) # Das H2_COUNT -Makro wird jedes Mal neu definiert, wenn das H2 -Makro verwendet wird: Define (" H2 "," Define ("H2_COUNT", Inc. (H2_Count))<H2>H2_COUNT. $ 1H2>') Umleitungen (1) DNL DNL DNL Das DNL -Makro bewirkt, dass M4 den Rest der Linie verurteilt, wodurch DNL im Ausgang unerwünschte leere Linien verhindern. DNL H2 (erster Abschnitt) H2 (zweiter Abschnitt) H2 (Schlussfolgerung) DNL DIVERT (0) DNL DNL<Html> Unertert (1) DNL Eine der Warteschlangen wird zur Ausgabe gedrückt.Html> 

Die Verarbeitung dieses Codes mit M4 generiert den folgenden Text:

<Html> <H2>1. Erster AbschnittH2> <H2>2. Zweiter AbschnittH2> <H2>3. SchlussfolgerungH2> Html> 

Implementierungen

Freebsd, Netbsd, und OpenBSD Bereitstellung unabhängiger Implementierungen der M4 -Sprache. Außerdem die Erbstückprojekt Entwicklungstools umfassen eine kostenlose Version der M4 -Sprache, die abgeleitet ist, die abgeleitet ist OpenSolaris.

M4 wurde in die enthalten Inferno Betriebssystem. Diese Implementierung hängt enger mit dem ursprünglichen M4 zusammen, der von Kernighan und Ritchie in entwickelt wurde Version 7 Unix als seine anspruchsvolleren Verwandten in UNIX -System v und Posix.[4]

GNU M4 ist eine Implementierung von M4 für die GNU -Projekt.[5][6] Es soll viele Arten von willkürlichen Grenzen vermeiden, die in herkömmlichen M4 -Implementierungen enthalten sind, wie z. B. maximale Linienlängen, maximale Größe eines Makros und Anzahl der Makros. Das Entfernen solcher willkürlichen Grenzen ist eines der angegebenen Ziele des GNU -Projekts.[7]

Die gnu Autoconf Das Paket nutzt die Funktionen von GNU M4 ausführlich.

GNU M4 wird derzeit von Gary V. Vaughan und Eric Blake unterhalten.[5] Veröffentlicht unter den Bedingungen der GNU Allgemeine öffentliche Lizenz, Gnu M4 ist gratis Software.

Siehe auch

Verweise

  1. ^ Brian W. Kernighan und Dennis M. Ritchie.Der M4 -Makroprozessor.Technischer Bericht, Bell Laboratories, Murray Hill, New Jersey, USA, 1977. PDF
  2. ^ Cole, A. J. (1981). Makroprozessoren (2., überarbeitete Ausgabe). Cup -Archiv. p. 254.
  3. ^ Kenneth J. Turner.Nutzung der M4 -Makrosprache.Technischer Bericht CSM-126, Abteilung für Computerwissenschaft und Mathematik, Universität Stirling, Schottland, September 1994. PDF
  4. ^ M4 (1)- -Inferno Allgemeine Befehle Handbuch
  5. ^ a b GNU M4 -Website "GNU M4", abgerufen am 25. Januar 2020.
  6. ^ GNU M4 -Handbuch, online und zum Download in HTML, PDF und anderen Formularen. "GNU M4 - GNU -Makroprozessor", abgerufen am 25. Januar 2020.
  7. ^ "GNU -Codierungsstandards: robuste Programme schreiben".Zitat: "Vermeiden Sie willkürliche Grenzen für die Länge oder Anzahl einer Datenstruktur".

Externe Links