[{"@context":"http:\/\/schema.org\/","@type":"BlogPosting","@id":"https:\/\/wiki.edu.vn\/wiki26\/2021\/08\/31\/makro-informatik-wikipedia\/#BlogPosting","mainEntityOfPage":"https:\/\/wiki.edu.vn\/wiki26\/2021\/08\/31\/makro-informatik-wikipedia\/","headline":"Makro (Informatik) \u2013 Wikipedia","name":"Makro (Informatik) \u2013 Wikipedia","description":"before-content-x4 In der Informatik eine pr\u00e4gnante Darstellung eines Musters after-content-x4 EIN Makro (kurz f\u00fcr “Makroinstruktion”, aus dem Griechischen Kombinationsform \u03bc\u03b1\u03ba\u03c1\u03bf-","datePublished":"2021-08-31","dateModified":"2021-08-31","author":{"@type":"Person","@id":"https:\/\/wiki.edu.vn\/wiki26\/author\/lordneo\/#Person","name":"lordneo","url":"https:\/\/wiki.edu.vn\/wiki26\/author\/lordneo\/","image":{"@type":"ImageObject","@id":"https:\/\/secure.gravatar.com\/avatar\/44a4cee54c4c053e967fe3e7d054edd4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/44a4cee54c4c053e967fe3e7d054edd4?s=96&d=mm&r=g","height":96,"width":96}},"publisher":{"@type":"Organization","name":"Enzyklop\u00e4die","logo":{"@type":"ImageObject","@id":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","url":"https:\/\/wiki.edu.vn\/wiki4\/wp-content\/uploads\/2023\/08\/download.jpg","width":600,"height":60}},"image":{"@type":"ImageObject","@id":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/8\/82\/Jedit_macro_recorder.png\/250px-Jedit_macro_recorder.png","url":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/thumb\/8\/82\/Jedit_macro_recorder.png\/250px-Jedit_macro_recorder.png","height":"210","width":"250"},"url":"https:\/\/wiki.edu.vn\/wiki26\/2021\/08\/31\/makro-informatik-wikipedia\/","wordCount":8674,"articleBody":" (adsbygoogle = window.adsbygoogle || []).push({});before-content-x4In der Informatik eine pr\u00e4gnante Darstellung eines Musters (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4EIN Makro (kurz f\u00fcr “Makroinstruktion”, aus dem Griechischen Kombinationsform \u03bc\u03b1\u03ba\u03c1\u03bf- ‘lang gro\u00df’[1]) in der Informatik ist eine Regel oder ein Muster, das angibt, wie eine bestimmte Eingabe auf eine Ersatzausgabe abgebildet werden soll. Das Anwenden eines Makros auf eine Eingabe ist Makroerweiterung. Die Eingabe und Ausgabe kann eine Folge lexikalischer Token oder Zeichen oder ein Syntaxbaum sein. Zeichenmakros werden in Softwareanwendungen unterst\u00fctzt, um das Aufrufen allgemeiner Befehlssequenzen zu vereinfachen. Token- und Baummakros werden in einigen Programmiersprachen unterst\u00fctzt, um die Wiederverwendung von Code zu erm\u00f6glichen oder die Sprache zu erweitern, manchmal f\u00fcr dom\u00e4nenspezifische Sprachen.Makros werden verwendet, um dem Programmierer eine Folge von Rechenanweisungen als eine einzige Programmanweisung zur Verf\u00fcgung zu stellen, wodurch die Programmieraufgabe weniger m\u00fchsam und weniger fehleranf\u00e4llig wird.[2][3] (Daher werden sie “Makros” genannt, weil ein “gro\u00dfer” Codeblock aus einer “kleinen” Zeichenfolge erweitert werden kann.) Makros erm\u00f6glichen oft Positions- oder Schl\u00fcsselwortparameter, die bestimmen, was das bedingte Assemblerprogramm generiert und wof\u00fcr es verwendet wurde Erstellen Sie ganze Programme oder Programmpakete nach Variablen wie Betriebssystem, Plattform oder anderen Faktoren. Der Begriff leitet sich von “Makroanweisung” ab, und solche Erweiterungen wurden urspr\u00fcnglich beim Generieren von Assemblersprachcode verwendet.Table of Contents (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4Tastatur- und Mausmakros[edit]Anwendungsmakros und Skripterstellung[edit]Makrovirus[edit]Parametriertes Makro[edit]Makros zur Textersetzung[edit]Einbettbare Sprachen[edit]Prozedurale Makros[edit]Syntaktische Makros[edit]Fr\u00fche Lisp-Makros[edit]Anaphorische Makros[edit]Hygienische Makros[edit]Anwendungen[edit]Makros f\u00fcr maschinenunabh\u00e4ngige Software[edit]Assemblersprache[edit]Geschichte[edit]Siehe auch[edit]Verweise[edit]Externe Links[edit]Tastatur- und Mausmakros[edit]Tastaturmakros und Mausmakros erm\u00f6glichen, dass kurze Tastenanschl\u00e4ge und Mausaktionen in andere, normalerweise zeitaufwendigere Tastenanschl\u00e4ge und Mausaktionen umgewandelt werden. Auf diese Weise lassen sich h\u00e4ufig verwendete oder sich wiederholende Tasten- und Mausbewegungen automatisieren. Separate Programme zum Erstellen dieser Makros werden Makrorekorder genannt.In den 1980er Jahren waren Makroprogramme \u2013 urspr\u00fcnglich SmartKey, dann SuperKey, KeyWorks, Prokey \u2013 sehr beliebt, zuerst als Mittel zur automatischen Formatierung von Drehb\u00fcchern, dann f\u00fcr eine Vielzahl von Benutzereingabeaufgaben. Diese Programme basierten auf dem TSR-Betriebsmodus (Terminate and Stay Resident) und wurden auf alle Tastatureingaben angewendet, egal in welchem \u200b\u200bKontext sie erfolgten. Mit dem Aufkommen von mausgesteuerten Benutzeroberfl\u00e4chen und der Verf\u00fcgbarkeit von Tastatur- und Mausmakros in Anwendungen wie Textverarbeitungen und Tabellenkalkulationen, die es erm\u00f6glichen, anwendungssensitive Tastaturmakros zu erstellen, sind sie teilweise obsolet geworden.Tastaturmakros k\u00f6nnen in Massively Multiplayer Online Role-Playing Games (MMORPGs) verwendet werden, um sich wiederholende, aber lukrative Aufgaben auszuf\u00fchren und so Ressourcen anzuh\u00e4ufen. Da dies ohne menschliches Zutun geschieht, kann dies die Wirtschaftlichkeit des Spiels beeintr\u00e4chtigen. Aus diesem Grund stellt die Verwendung von Makros einen Versto\u00df gegen die Nutzungsbedingungen oder EULA der meisten MMORPGs dar, und ihre Administratoren unternehmen erhebliche Anstrengungen, um sie zu unterdr\u00fccken.[4]Anwendungsmakros und Skripterstellung[edit]Tastatur- und Mausmakros, die mit den integrierten Makrofunktionen einer Anwendung erstellt wurden, werden manchmal als . bezeichnet Anwendungsmakros. Sie werden erstellt, indem die Sequenz einmal ausgef\u00fchrt wird und die Anwendung die Aktionen aufzeichnen l\u00e4sst. Es kann auch eine zugrunde liegende Makroprogrammiersprache, am h\u00e4ufigsten eine Skriptsprache, mit direktem Zugriff auf die Funktionen der Anwendung existieren. (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4Der Texteditor der Programmierer, Emacs, (kurz f\u00fcr “Editing Macros”) folgt dieser Idee zu einem Schluss. Tats\u00e4chlich besteht der Editor gr\u00f6\u00dftenteils aus Makros. Emacs wurde urspr\u00fcnglich als Satz von Makros in der Bearbeitungssprache TECO entwickelt; es wurde sp\u00e4ter auf Dialekte von Lisp portiert.Der Texteditor eines anderen Programmierers, Vim (ein Nachkomme von vi), hat ebenfalls eine Implementierung von Tastaturmakros. Es kann in ein Register (Makro) aufnehmen, was eine Person auf der Tastatur tippt, und es kann wie VBA-Makros f\u00fcr Microsoft Office wiedergegeben oder bearbeitet werden. Vim hat auch eine Skriptsprache namens Vimscript[5] Makros zu erstellen.Visual Basic for Applications (VBA) ist eine Programmiersprache, die in Microsoft Office von Office 97 bis Office 2019 enthalten ist (obwohl sie in einigen Komponenten von Office vor Office 97 verf\u00fcgbar war). Seine Funktion hat sich jedoch aus den Makrosprachen entwickelt und ersetzt, die urspr\u00fcnglich in einigen dieser Anwendungen enthalten waren.XEDIT, das auf der Conversational Monitor System (CMS)-Komponente von VM ausgef\u00fchrt wird, unterst\u00fctzt Makros, die in EXEC, EXEC2 und REXX geschrieben wurden, und einige CMS-Befehle waren tats\u00e4chlich Wrapper um XEDIT-Makros. Der Hessling Editor (THE), ein Teilklon von XEDIT, unterst\u00fctzt Rexx-Makros mit Regina und Open Object REXX (oorexx). Viele g\u00e4ngige Anwendungen und einige auf PCs verwenden Rexx als Skriptsprache.Makrovirus[edit]VBA hat Zugriff auf die meisten Microsoft Windows-Systemaufrufe und wird ausgef\u00fchrt, wenn Dokumente ge\u00f6ffnet werden. Dies macht es relativ einfach, Computerviren in VBA zu schreiben, die allgemein als Makroviren bekannt sind. Mitte bis Ende der 1990er Jahre wurde dies zu einer der h\u00e4ufigsten Arten von Computerviren. In den sp\u00e4ten 1990er Jahren und bis heute hat Microsoft jedoch seine Programme gepatcht und aktualisiert. Zudem wirken aktuelle Antivirenprogramme solchen Angriffen sofort entgegen.Parametriertes Makro[edit]EIN parametrisiertes Makro ist ein Makro, das in der Lage ist, vorgegebene Objekte in seine Erweiterung einzuf\u00fcgen. Dies gibt dem Makro einen Teil der Leistungsf\u00e4higkeit einer Funktion.Als einfaches Beispiel ist dies in der Programmiersprache C ein typisches Makro, das nicht ein parametrisiertes Makro: #define PI 3.14159Dies bewirkt PI immer ersetzt werden durch 3.14159 wo immer es auftritt. Ein Beispiel f\u00fcr ein parametrisiertes Makro hingegen ist folgendes: #define pred(x) ((x)-1)Auf was dieses Makro erweitert wird, h\u00e4ngt davon ab, welches Argument x wird daran weitergegeben. Hier einige m\u00f6gliche Erweiterungen: pred(2) \u2192 ((2) -1) pred(y+2) \u2192 ((y+2) -1) pred(f(5)) \u2192 ((f(5))-1)Parametrisierte Makros sind ein n\u00fctzlicher Mechanismus auf Quellebene, um eine Inline-Erweiterung durchzuf\u00fchren, aber in Sprachen wie C, in denen sie eine einfache Textersetzung verwenden, haben sie eine Reihe schwerwiegender Nachteile gegen\u00fcber anderen Mechanismen zur Durchf\u00fchrung einer Inline-Erweiterung, wie z. B. Inline-Funktionen .Die parametrisierten Makros, die in Sprachen wie Lisp, PL\/I und Scheme verwendet werden, sind dagegen viel m\u00e4chtiger und k\u00f6nnen auf der Grundlage ihrer Argumente Entscheidungen dar\u00fcber treffen, welcher Code erstellt werden soll; daher k\u00f6nnen sie effektiv verwendet werden, um eine Laufzeitcodegenerierung durchzuf\u00fchren.Makros zur Textersetzung[edit]Sprachen wie C und einige Assemblersprachen haben rudiment\u00e4re Makrosysteme, die als Pr\u00e4prozessoren f\u00fcr den Compiler oder Assembler implementiert sind. C-Pr\u00e4prozessormakros funktionieren durch einfache Textersetzung auf Token- und nicht auf Zeichenebene. Allerdings k\u00f6nnen die Makrofunktionen komplexerer Assembler, zB IBM High Level Assembler (HLASM), nicht mit einem Pr\u00e4prozessor implementiert werden; der Code zum Zusammensetzen von Anweisungen und Daten wird mit dem Code zum Zusammensetzen von Makroaufrufen durchsetzt.Eine klassische Verwendung von Makros findet sich im Computersatzsystem TeX und seinen Derivaten, wo der Gro\u00dfteil der Funktionalit\u00e4t auf Makros basiert.MacroML ist ein experimentelles System, das versucht, statische Typisierung und Makrosysteme in Einklang zu bringen. Nemerle hat Syntaxmakros typisiert, und eine produktive Art, sich diese Syntaxmakros als mehrstufige Berechnung vorzustellen.Andere Beispiele:m4 ist ein hochentwickelter eigenst\u00e4ndiger Makroprozessor.TRACMakroerweiterung TAL, begleitende Template-AttributspracheSMX: f\u00fcr WebseitenML\/1 (Makrosprache Eins)Der General Purpose Macroprocessor ist ein kontextueller Mustervergleichs-Makroprozessor, der als Kombination aus regul\u00e4ren Ausdr\u00fccken, EBNF und AWK . beschrieben werden k\u00f6nnte[citation needed]SAM76troff und nroff: zum Setzen und Formatieren von Unix-Manpages.CMS EXEC: f\u00fcr Kommandozeilen- und AnwendungsmakrosEXEC 2 im Conversational Monitor System (CMS): f\u00fcr Befehlszeilen- und AnwendungsmakrosCLIST in IBMs Time Sharing Option (TSO): f\u00fcr Befehlszeilen- und AnwendungsmakrosREXX: f\u00fcr Kommandozeilen-Makros und Anwendungsmakros in zB AmigaOS, CMS, OS\/2, TSOSKRIPT: zum Formatieren von DokumentenVerschiedene Shells f\u00fcr zB LinuxEinige Hauptanwendungen wurden als Textmakro geschrieben, die von anderen Anwendungen aufgerufen werden, zB von XEDIT im CMS.Einbettbare Sprachen[edit]Einige Sprachen wie PHP k\u00f6nnen in frei formatierten Text oder den Quellcode anderer Sprachen eingebettet werden. Der Mechanismus, mit dem die Codefragmente erkannt werden (z. B. durch Einklammern von ) \u00e4hnelt einer textuellen Makrosprache, aber sie sind viel leistungsf\u00e4higere Sprachen mit vollem Funktionsumfang.Prozedurale Makros[edit]Makros in der PL\/I-Sprache werden in einer Teilmenge von PL\/I selbst geschrieben: Der Compiler f\u00fchrt zur Kompilierungszeit \"Pr\u00e4prozessor-Anweisungen\" aus, und die Ausgabe dieser Ausf\u00fchrung ist Teil des kompilierten Codes. Die F\u00e4higkeit, eine vertraute prozedurale Sprache als Makrosprache zu verwenden, bietet eine viel gr\u00f6\u00dfere Leistungsf\u00e4higkeit als die von Textersetzungsmakros, auf Kosten eines gr\u00f6\u00dferen und langsameren Compilers.Die Frame-Makros der Frame-Technologie haben ihre eigene Befehlssyntax, k\u00f6nnen aber auch Text in jeder Sprache enthalten. Jeder Rahmen ist sowohl eine generische Komponente in einer Hierarchie verschachtelter Unterbaugruppen als auch ein Verfahren zum Integrieren in seine Unterbaugruppenrahmen (ein rekursiver Prozess, der Integrationskonflikte zugunsten von Unterbaugruppen h\u00f6herer Ebene l\u00f6st). Die Ausgaben sind benutzerdefinierte Dokumente, normalerweise kompilierbare Quellmodule. Die Frame-Technologie kann die Verbreitung \u00e4hnlicher, aber subtil unterschiedlicher Komponenten vermeiden, ein Problem, das die Softwareentwicklung seit der Erfindung von Makros und Subroutinen qu\u00e4lt.Die meisten Assemblersprachen verf\u00fcgen \u00fcber weniger leistungsf\u00e4hige prozedurale Makrofunktionen, die beispielsweise erlauben, dass ein Codeblock N-mal wiederholt wird, um eine Schleife aufzurollen; Diese haben jedoch eine v\u00f6llig andere Syntax als die eigentliche Assemblersprache.Syntaktische Makros[edit]Makrosysteme \u2013 wie der zuvor beschriebene C-Pr\u00e4prozessor \u2013, die auf der Ebene lexikalischer Token arbeiten, k\u00f6nnen die lexikalische Struktur nicht zuverl\u00e4ssig bewahren. Syntaktische Makrosysteme arbeiten stattdessen auf der Ebene abstrakter Syntaxb\u00e4ume und bewahren die lexikalische Struktur des Originalprogramms. Die am weitesten verbreiteten Implementierungen syntaktischer Makrosysteme finden sich in Lisp-\u00e4hnlichen Sprachen. Diese Sprachen eignen sich aufgrund ihrer einheitlichen Syntax in Klammern (bekannt als S-Ausdr\u00fccke) besonders f\u00fcr diesen Makrostil. Insbesondere die einheitliche Syntax erleichtert die Bestimmung der Aufrufe von Makros. Lisp-Makros transformieren die Programmstruktur selbst, wobei die vollst\u00e4ndige Sprache verf\u00fcgbar ist, um solche Transformationen auszudr\u00fccken. W\u00e4hrend syntaktische Makros oft in Lisp-\u00e4hnlichen Sprachen zu finden sind, sind sie auch in anderen Sprachen wie Prolog,[6]Erlang,[7]Dylan,[8]Scala,[9]Nemerle,[10]Rost,[11]Elixier,[12]Nim,[13]Haxe,[14] und Julia.[15] Sie sind auch als JavaScript-Erweiterungen von Drittanbietern verf\u00fcgbar.[16]C#[17] und Python.[18]Fr\u00fche Lisp-Makros[edit]Bevor Lisp Makros hatte, gab es sogenannte FEXPRs, funktions\u00e4hnliche Operatoren, deren Eingaben nicht die von den Argumenten berechneten Werte waren, sondern die syntaktischen Formen der Argumente, und deren Ausgabe Werte waren, die in der Berechnung verwendet werden sollten. Mit anderen Worten, FEXPRs wurden auf der gleichen Ebene wie EVAL implementiert und boten ein Fenster in die Meta-Evaluierungsschicht. Dies erwies sich im Allgemeinen als ein schwieriges Modell, um effektiv zu argumentieren.[19]1963 schlug Timothy Hart vor, in AI Memo 57: MACRO Definitions for LISP Makros zu Lisp 1.5 hinzuzuf\u00fcgen.[20]Anaphorische Makros[edit]Ein anaphorisches Makro ist eine Art von Programmiermakro, das absichtlich eine dem Makro zugef\u00fchrte Form erfasst, auf die durch ein Anapher (ein Ausdruck, der sich auf ein anderes bezieht) Bezug genommen werden kann. Anaphorische Makros tauchten erstmals in Paul Grahams On Lisp auf und ihr Name ist ein Hinweis auf linguistische Anaphora \u2013 die Verwendung von W\u00f6rtern als Ersatz f\u00fcr vorangehende W\u00f6rter.Hygienische Makros[edit]Mitte der achtziger Jahre eine Reihe von Papieren[21][22] f\u00fchrte den Begriff der hygienischen Makroerweiterung ein (syntax-rules), ein musterbasiertes System, bei dem die syntaktischen Umgebungen der Makrodefinition und der Makroverwendung unterschiedlich sind, was es Makrodefinierern und Benutzern erm\u00f6glicht, sich keine Sorgen \u00fcber eine unbeabsichtigte Variablenerfassung zu machen (vgl. referenzielle Transparenz). Hygienische Makros wurden f\u00fcr Scheme in den Standards R5RS, R6RS und R7RS standardisiert. Es gibt eine Reihe konkurrierender Implementierungen von Hygienemakros, wie z syntax-rules, syntax-case, explizite Umbenennung und syntaktische Schlie\u00dfungen. Beide syntax-rules und syntax-case wurden in den Scheme-Standards standardisiert.Vor kurzem hat Racket die Begriffe hygienischer Makros mit einem \"Turm von Bewertern\" kombiniert, so dass die syntaktische Expansionszeit eines Makrosystems die normale Laufzeit eines anderen Codeblocks ist.[23] und zeigte, wie man verschachtelte Erweiterung und Parsing in einer Sprache ohne Klammern anwendet.[24]Eine Reihe anderer Sprachen als Scheme implementieren entweder hygienische Makros oder implementieren teilweise hygienische Systeme. Beispiele sind Scala, Rust, Elixir, Julia, Dylan, Nim und Nemerle.Anwendungen[edit]BewertungsauftragMakrosysteme haben eine Reihe von Anwendungen. Die Wahl der Auswertungsreihenfolge (siehe Lazy-Evaluation und nicht-strikte Funktionen) erm\u00f6glicht die Erstellung neuer syntaktischer Konstrukte (zB Kontrollstrukturen), die von den in die Sprache eingebauten nicht zu unterscheiden sind. Zum Beispiel in einem Lisp-Dialekt mit cond aber fehlt if, ist es m\u00f6glich, letztere in Bezug auf erstere mit Hilfe von Makros zu definieren. Scheme hat zum Beispiel sowohl Fortsetzungen als auch Hygienemakros, die es einem Programmierer erm\u00f6glichen, ihre eigenen Kontrollabstraktionen wie Schleifen und Konstrukte f\u00fcr fr\u00fches Verlassen zu entwerfen, ohne sie in die Sprache einbauen zu m\u00fcssen.Datenuntersprachen und dom\u00e4nenspezifische SprachenDar\u00fcber hinaus erm\u00f6glichen Makros die Definition von Datensprachen, die sofort in Code \u00fcbersetzt werden, wodurch Konstrukte wie Zustandsautomaten auf nat\u00fcrliche und effiziente Weise implementiert werden k\u00f6nnen.[25]BindungskonstrukteMakros k\u00f6nnen auch verwendet werden, um neue Bindungskonstrukte einzuf\u00fchren. Das bekannteste Beispiel ist die Transformation von let in die Anwendung einer Funktion auf eine Reihe von Argumenten.Felleisen-Vermutungen[26] dass diese drei Kategorien die prim\u00e4ren legitimen Verwendungen von Makros in einem solchen System darstellen. Andere haben alternative Verwendungen von Makros vorgeschlagen, wie beispielsweise anaphorische Makros in Makrosystemen, die unhygienisch sind oder eine selektive unhygienische Transformation erm\u00f6glichen.Die Interaktion von Makros und anderen Sprachmerkmalen war ein produktives Forschungsgebiet. Komponenten und Module sind beispielsweise f\u00fcr umfangreiche Programmierungen n\u00fctzlich, aber das Zusammenspiel von Makros und diesen anderen Konstrukten muss f\u00fcr ihre gemeinsame Verwendung definiert werden. Modul- und Komponentensysteme, die mit Makros interagieren k\u00f6nnen, wurden f\u00fcr Scheme und andere Sprachen mit Makros vorgeschlagen. Zum Beispiel erweitert die Sprache Racket den Begriff eines Makrosystems auf einen syntaktischen Turm, in dem Makros in Sprachen einschlie\u00dflich Makros geschrieben werden k\u00f6nnen, wobei Hygiene verwendet wird, um sicherzustellen, dass syntaktische Schichten unterschiedlich sind, und es Modulen erm\u00f6glicht, Makros in andere Module zu exportieren.Makros f\u00fcr maschinenunabh\u00e4ngige Software[edit]Makros werden normalerweise verwendet, um einen kurzen String (Makroaufruf) auf eine l\u00e4ngere Befehlsfolge abzubilden. Eine andere, weniger verbreitete Verwendung von Makros besteht darin, das Gegenteil zu tun: eine Folge von Anweisungen einer Makrozeichenfolge zuzuordnen. Dies war der Ansatz des STAGE2 Mobile Programming System, das einen rudiment\u00e4ren Makro-Compiler (genannt SIMCMP) verwendet, um den spezifischen Befehlssatz eines bestimmten Computers auf das Gegenst\u00fcck abzubilden maschinenunabh\u00e4ngig Makros. Anwendungen (insbesondere Compiler), die in diesen maschinenunabh\u00e4ngigen Makros geschrieben sind, k\u00f6nnen dann ohne \u00c4nderung auf jedem Computer ausgef\u00fchrt werden, der mit dem rudiment\u00e4ren Makro-Compiler ausgestattet ist. Die erste Anwendung, die in einem solchen Kontext ausgef\u00fchrt wird, ist ein komplexerer und leistungsf\u00e4higerer Makro-Compiler, der in der maschinenunabh\u00e4ngigen Makrosprache geschrieben ist. Dieser Makro-Compiler wird auf Bootstrap-Art auf sich selbst angewendet, um eine kompilierte und viel effizientere Version von sich selbst zu erzeugen. Der Vorteil dieses Ansatzes besteht darin, dass komplexe Anwendungen mit sehr geringem Aufwand (f\u00fcr jede Zielmaschinenarchitektur nur das Schreiben des rudiment\u00e4ren Makro-Compilers) von einem Rechner auf einen ganz anderen Rechner portiert werden k\u00f6nnen.[27][28] Das Aufkommen moderner Programmiersprachen, insbesondere C, f\u00fcr die Compiler auf praktisch allen Computern verf\u00fcgbar sind, hat einen solchen Ansatz \u00fcberfl\u00fcssig gemacht. Dies war jedoch eine der ersten Instanzen (wenn nicht die erste) von Compiler-Bootstrapping.Assemblersprache[edit]W\u00e4hrend Makroanweisungen kann von einem Programmierer f\u00fcr jeden Satz nativer Assembler-Programmanweisungen definiert werden, normalerweise sind Makros mit Makrobibliotheken verkn\u00fcpft, die mit dem Betriebssystem geliefert werden und den Zugriff auf Betriebssystemfunktionen wiePeripheriezugriff durch Zugriffsmethoden (einschlie\u00dflich Makros wie OPEN, CLOSE, READ und WRITE)Betriebssystemfunktionen wie ATTACH, WAIT und POST zur Erstellung und Synchronisation von Teilaufgaben.[29] Typischerweise werden solche Makros in ausf\u00fchrbaren Code erweitert, z. B. f\u00fcr den EXIT-Makrobefehl,eine Liste von Konstante definieren Anweisungen, zB f\u00fcr das DCB-Makro \u2013 DTF (Define The File) f\u00fcr DOS[30]\u2013 oder eine Kombination aus Code und Konstanten, wobei die Details der Erweiterung von den Parametern des Makrobefehls abh\u00e4ngig sind (wie ein Verweis auf eine Datei und ein Datenbereich f\u00fcr einen READ-Befehl);der ausf\u00fchrbare Code endet oft in a Filial- und Linkregister eine Anweisung zum Aufrufen einer Routine oder eine Supervisor-Aufrufanweisung zum direkten Aufrufen einer Betriebssystemfunktion.Generieren von a Stufe 2 Jobstrom f\u00fcr die Systemgenerierung in zB OS\/360. Im Gegensatz zu typischen Makros generieren sysgen-Stufe-1-Makros keine Daten oder Code, die in den Speicher geladen werden, sondern verwenden die SCHLAGEN -Anweisung zum Ausgeben von JCL und zugeh\u00f6rigen Daten.In \u00e4lteren Betriebssystemen wie denen, die auf IBM-Mainframes verwendet werden, war die volle Betriebssystemfunktionalit\u00e4t nur f\u00fcr Programme in Assembler-Sprache verf\u00fcgbar, nicht f\u00fcr Hochsprachenprogramme (es sei denn, es wurden Subroutinen in Assembler-Sprache verwendet), da die Standard-Makrobefehle dies nicht immer taten haben Gegenst\u00fccke in Routinen, die f\u00fcr Hochsprachen verf\u00fcgbar sind.Geschichte[edit]Mitte der 1950er Jahre, als Assemblerprogrammierung h\u00e4ufig verwendet wurde, um Programme f\u00fcr digitale Computer zu schreiben, wurde die Verwendung von Makroanweisungen wurde aus zwei Hauptgr\u00fcnden initiiert: um den Umfang des zu schreibenden Programmcodes zu reduzieren, indem mehrere Assembler-Anweisungen aus einem Makrobefehl generiert werden, und um Programmschreibstandards durchzusetzen, z.[31] Makrobefehle waren praktisch ein Mittelschritt zwischen der Assemblerprogrammierung und den folgenden h\u00f6heren Programmiersprachen wie FORTRAN und COBOL. Zwei der fr\u00fchesten Programmierinstallationen zur Entwicklung von \"Makrosprachen\" f\u00fcr den IBM 705-Computer waren bei Dow Chemical Corp. in Delaware und beim Air Material Command, Ballistics Missile Logistics Office in Kalifornien. Ein im Format der Zielassemblersprache geschriebener Makrobefehl w\u00fcrde von einem Makrocompiler verarbeitet, der ein Vorprozessor des Assemblers war, um einen oder mehrere Assemblerbefehle zu erzeugen, die als n\u00e4chstes von dem Assemblerprogramm verarbeitet werden, das die Anweisungen in Assemblersprache in Anweisungen in Maschinensprache umwandeln.[32]In den sp\u00e4ten 1950er Jahren folgten der Makrosprache die Makroassembler. Dies war eine Kombination aus beidem, wobei ein Programm beide Funktionen erf\u00fcllte, die eines Makro-Pr\u00e4prozessors und eines Assemblers im selben Paket.[32][failed verification]1959 f\u00fchrten Douglas E. Eastwood und Douglas McIlroy von Bell Labs bedingte und rekursive Makros in den beliebten SAP-Assembler ein.[33] Erstellung eines sogenannten Makro-SAP.[34] McIlroys Aufsatz aus dem Jahr 1960 war wegweisend auf dem Gebiet der Erweiterung beliebiger (einschlie\u00dflich h\u00f6herer) Programmiersprachen durch Makroprozessoren.[35][33]Makro-Assembler erm\u00f6glichten es Programmierern in Assembler, ihre eigene Makrosprache zu implementieren, und erlaubten eine begrenzte Portabilit\u00e4t des Codes zwischen zwei Computern, auf denen dieselbe CPU, aber unterschiedliche Betriebssysteme laufen, zum Beispiel fr\u00fche Versionen von MSDOS und CPM-86. Die Makrobibliothek m\u00fcsste f\u00fcr jede Zielmaschine geschrieben werden, aber nicht das gesamte Assemblerprogramm. Beachten Sie, dass leistungsf\u00e4higere Makro-Assembler die Verwendung von bedingten Assembler-Konstrukten in Makroanweisungen erm\u00f6glichten, die unterschiedlichen Code auf unterschiedlichen Maschinen oder unterschiedlichen Betriebssystemen generieren konnten, wodurch der Bedarf an mehreren Bibliotheken verringert wurde.[citation needed]In den 1980er und fr\u00fchen 1990er Jahren liefen Desktop-PCs nur mit wenigen MHz und Assembler-Routinen wurden h\u00e4ufig verwendet, um in C, Fortran, Pascal und anderen geschriebene Programme zu beschleunigen. Diese Sprachen verwendeten damals unterschiedliche Aufrufkonventionen. Makros k\u00f6nnten verwendet werden, um in Assembler geschriebene Routinen mit dem Frontend von Anwendungen zu verbinden, die in fast jeder Sprache geschrieben sind. Auch hier blieb der grundlegende Assemblersprachencode gleich, nur die Makrobibliotheken mussten f\u00fcr jede Zielsprache geschrieben werden.[citation needed]In modernen Betriebssystemen wie Unix und seinen Derivaten wird der Zugriff auf das Betriebssystem durch Unterroutinen bereitgestellt, die normalerweise von dynamischen Bibliotheken bereitgestellt werden. Hochsprachen wie C bieten umfassenden Zugriff auf Betriebssystemfunktionen, wodurch Assembler-Sprachprogramme f\u00fcr diese Funktionalit\u00e4t \u00fcberfl\u00fcssig werden.[citation needed]Siehe auch[edit]Verweise[edit]^ Oxford Englisch W\u00f6rterbuch, sv Makro, Makro-Anweisung, und Makro-^ Greenwald, Irwin D.; Maureen Kane (April 1959). \u201eDas Share 709-System: Programmierung und Modifikation\u201c. Zeitschrift der ACM. New York, NY, USA: ACM. 6 (2): 128\u2013133. mach:10.1145\/320964.320967. S2CID 27424222. Eine der wichtigen Verwendungen von Programmiermakros besteht darin, Zeit und Schreibfehler beim Schreiben von Befehlsfolgen zu sparen, die im Verlauf eines Programms oft wiederholt werden.^ Strachey, Christopher (Oktober 1965). \"Ein Allzweck-Makrogenerator\". Computerjournal. 8 (3): 225\u2013241. mach:10.1093\/comjnl\/8.3.225.^ \"Runescape: The Massive Online Adventure Game von Jagex Ltd\". Abgerufen 2008-04-03.^ \"Skripte: vim online\". www.vim.org.^ \"Prolog-Makros\". www.metalevel.at. Abgerufen 2021-04-05.^ \"Erlang - Pr\u00e4prozessor\". erlang.org. Abgerufen 2021-05-24.^ \u201eDas Dylan-Makrosystem \u2013 \u00d6ffnen Sie Dylan\u201c. opendylan.org. Abgerufen 2021-04-05.^ \"Def Makros\". Scala-Dokumentation. Abgerufen 2021-04-05.^ \"\u00dcber - Offizielle Website der Programmiersprache Nemerle\". nemerle.org. Abgerufen 2021-04-05.^ \"Makros - Die Programmiersprache Rust\". doc.rust-lang.org. Abgerufen 2021-04-05.^ \"Makros\". elixir-lang.github.com. Abgerufen 2021-04-05.^ \"Makros\". nim-lang.org. Abgerufen 2021-04-05.^ \"Makros\". Haxe - Das plattform\u00fcbergreifende Toolkit.^ \"Metaprogrammierung \u00b7 Die Julia-Sprache\". docs.julialang.org. Abgerufen 2021-04-05.^ \"Sweet.js - Hygienische Makros f\u00fcr JavaScript\". www.sweetjs.org.^ \"LeMP-Startseite \u00b7 Verbessertes C#\". ecsharp.net.^ \"Makros in Python: Quasiquotes, Fallklassen, LINQ und mehr!: lihaoyi\/macropy\". 7. Februar 2019 \u2013 \u00fcber GitHub.^ Marshall, Joe. \"unbenannte E-Mail\". Abgerufen 3. Mai, 2012.^ \u201eAIM-057, MACRO-Definitionen f\u00fcr LISP, Timothy P. Hart\u201c. hdl:1721.1\/6111. ^ Kohlbecker, Eugen; Friedmann, Daniel; Felleisen, Matthias; Duba, Bruce. \"Hygienische Makro-Erweiterung\". mach:10.1145\/319838.319859.^ [1] Clinger, Rees. \"Makros, die funktionieren\"^ Flatt, Matth\u00e4us. \"Zusammensetzbare und kompilierbare Makros: Wann wollen Sie es?\" (PDF).^ Rafkind, Jon; Flatt, Matth\u00e4us. \"Honu: Syntaktische Erweiterung f\u00fcr algebraische Notation durch Enforestation\" (PDF).^ \"Automaten \u00fcber Makros\". cs.brown.edu.^ [2], Matthias Felleisen, LL1 Mailinglisten-Posting^ Orgass, Richard J.; William M. Waite (September 1969). \"Eine Basis f\u00fcr ein mobiles Programmiersystem\". Mitteilungen des ACM. New York, NY, USA: ACM. 12 (9): 507\u2013510. mach:10.1145\/363219.363226. S2CID 8164996.^ Waite, William M. (Juli 1970). \"Das mobile Programmiersystem: STAGE2\". Mitteilungen des ACM. New York, NY, USA: ACM. 13 (7): 415\u2013421. mach:10.1145\/362686.362691. S2CID 11733598.^ \"Universit\u00e4t von Nordflorida\" (PDF).^ \"DTF (DOS\/VSE)\".^ \"IBM-Wissenscenter\". IBM Knowledge Center.^ ein B \"Assembler-Sprachmakro-Anweisungen\". Cisco.^ ein B Holbrook, Bernard D.; Brown, W. Stanley. \"Computing Science Technical Report Nr. 99 \u2013 Eine Geschichte der Computerforschung in Bell Laboratories (1937-1975)\". Bell Labs. Archiviert von das Original am 2. September 2014. Abgerufen 2. Februar, 2020.^ \"Macro SAP \u2013 Makro-Compiler-Modifikation von SAP\". HOPL: Historische Online-Enzyklop\u00e4die der Programmiersprachen. Archiviert von das Original am 13.08.2008.^ Layzell, P. (1985). \"Die Geschichte der Makroprozessoren in der Erweiterbarkeit von Programmiersprachen\". Das Computerjournal. 28 (1): 29\u201333. mach:10.1093\/comjnl\/28.1.29.Externe Links[edit] (adsbygoogle = window.adsbygoogle || []).push({});after-content-x4"},{"@context":"http:\/\/schema.org\/","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/wiki.edu.vn\/wiki26\/#breadcrumbitem","name":"Enzyklop\u00e4die"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/wiki.edu.vn\/wiki26\/2021\/08\/31\/makro-informatik-wikipedia\/#breadcrumbitem","name":"Makro (Informatik) \u2013 Wikipedia"}}]}]