Macrosubstituție
Un macro în informatică este o regulă sau model ce specifică în ce mod o secvență de intrare (de multe ori o secvență de caractere) ar trebui să fie pusă în corespondență cu o secvență de ieșire (de asemenea de cele mai multe ori o secvență de caractere) folosind o procedură de conversie.
Termenul venind odată cu macro-asambloarele, unde scopul este de a da posibilitatea programatorului să folosească o secvență de instrucțiuni ca fiind o singură instrucțiune în codul sursă, făcând sarcina de programare mai puțin plictisitoare și mai puțin predispusă la eroare. Macrouri multe și variate au fost puse la dispoziție pentru utilizări variate, eliminând ceva din caracterul de repetitivitate al programării, ușurând de asemenea și scrierea, citirea și înțelegerea programului, mult din complexitatea acestuia fiind ascunsă (mai mult la secțiunea #Macrouri pentru substituția de text mai jos).
Macrouri pentru tastatură și maus
[modificare | modificare sursă]Macrourile pentru tastatură și macrourile pentru maus facilitează transformarea secvențelor scurte de impulsuri de tastatură și maus generate în alte secvențe, de obicei mai lungi, de acțiuni de la tastatură sau maus. În felul acesta, secvențele, de taste sau impulsurile provenite de la maus, reiterative sau utilizate în mod frecvent pot fi automatizate. Programele specializate pe generarea de astfel de macrouri se numesc macro recordere.
În perioada anilor 1980, programele de interfață bazate pe macrouri -- la început SmartKey, apoi SuperKey, KeyWorks, Prokey -- erau la modă, inițial ca o modalitate de formatare automată a scenariilor, apoi pentru o mulțime de sarcini de afaceri. Începând cu perioada anilor 1990, macrourile de tastatură sunt incluse în cele mai importante aplicații, cum ar fi programele pentru redactare computerizată și cele de calcul tabelar, dar sunt mai greu de folosit decât mai vechile programe de interfață bazate pe macrouri.
Macrourile de tastatură au prins din nou viață, mai nou, ca o metodă de exploatare a economiei jocurilor de tip MMORPG. Prin executarea neobosită a unor acțiuni plictisitoare, repetitive, dar fără risc, un utilizator rulând un macro poate câștiga mari sume din valuta jocului. Acest efect este chiar mai mare când un jucător care utilizează macrouri folosește mai multe conturi simultan, sau utilizează conturile pentru mai multă vreme în fiecare zi. Cum acești bani sunt generați fără intervenția utilizatorului, economia jocului poate fi serios perturbată cauzând exacerbarea inflației. Din acest motiv, utilizarea macrourilor în respectiva situație poate fi și de multe ori este o încălcare a condițiilor de utilizare sau a licenței majorității jocurilor de tip MMORPG, și administratorii acestor jocuri se zbat neîntrerupt pentru a identifica și pedepsi utilizatorii de macrouri.
Macrouri aplicație și codul interpretat
[modificare | modificare sursă]Macrourile de tastatură și maus ce sunt create folosind capabilitățile native ale unei anumite aplicații mai sunt cunoscute și sub numele de macrouri aplicație. Acestea sunt create câteodată prin efectuarea de către utilizator a unor acțiuni ce sunt înregistrate, transformate în instrucțiuni, și stocate sub formă de macrouri. Instrucțiunile din astfel de macrouri sunt scrise de obicei sub formă de cod sursă al unui limbaj de macroprogramare numit de asemenea și limbaj de script ce are acces direct la elementele aplicației. Acest tip de cod sursă (sau simplu sursă) mai este numit și script deoarece nu va fi compilat în cod mașină sau bytecode.
Editorul de text preferat de către programatori Emacs (prescurtarea de la "macrouri editor") urmărește această idee spre o concluzie. De fapt, mare parte din editor este construit din macrouri.Emacs a fost inițial gândit ca un set de macrouri în limbajul de editare TECO; a fost mai apoi rescris în versiuni de Lisp.
Pe măsură ce piața de software s-a maturizat aplicațiile comerciale și cele open-source au migrat de la versiunile proprietar de limbaje de descriere a macrourilor spre limbajele de tip script ce au fost mai întâi incluse, iar acum sunt foarte bine documentate și testate dovedindu-și fiabilitatea, în browserele de web. De exemplu limbajul JavaScript a fost inclus în pachetele office OpenOffice.org și LibreOffice ca suport pentru scrierea de script-uri ce pot fi folosite la automatizarea unor activități și la înregistrarea de macrouri. De fapt prin publicarea API-ului acestei aplicații utilizatorul poate folosi orice limbaj de nivel înalt, de exemplu Java, ce poate accesa în mod direct funcțiile acestei interfețe programabile de aplicație.
Viruși macro
[modificare | modificare sursă]Deoarece actualele limbaje de descriere a macrourilor sunt foarte puternice și au acces la o gamă foarte largă din funcțiile de bază ale sistemului de operare, este de la sine înțeles că autorii de cod malițios vor concepe și viruși bazați pe aceste facilități. Datorită ușurinței cu care puteau fi scriși viruși informatici folosind limbajul VBA, pe la mijlocul anilor 1990 Macro virușii au devenit cel mai răspândit tip de virus de acest tip, ajutați fiind în mare parte și de lipsa aproape totală de securitate din versiunile mai vechi de Windows. În zilele noastre unele aplicații iau chiar ele măsuri preventive, nu se bazează exclusiv pe securitatea sistemului de operare Linux, de exemplu, și exclud în mod deliberat anumite funcționalități ce ar putea fi exploatate de virușii de tip macro.
Macrouri pentru substituția de text - Macrosubstituția
[modificare | modificare sursă]Limbaje de programare cum ar fi C și limbajul de asamblare au un sistem simplu de macrouri, implementate ca preprocesoare la compilator sau asamblor. Macrourile preprocesorului C funcționează ca o simplă operațiune de căutare și modificare textuală la nivelul de element de sintaxă, deci nu lucrează la nivel de caracter. O utilizare tipică pentru macrouri este întâlnită în sistemul de tehnoredactare computerizată TeX și derivatele acestuia, la care cea mai mare parte a funcționalității este bazată pe macrouri. MacroML este un sistem experimental ce caută să reconcilieze editarea tipizată și sistemele de macrouri. Nemerle are o sintaxă tipizată de macrouri, și o metodă constructivă de abordare a acestor tipuri de sintaxă a macrourilor este calculul multi-stadiu.
Alte exemple:
- M4 este un macroprocesor sofisticat și independent.
- TRAC
- PHP
- Macroextensia TAL, împreună cu Limbajul de Șabloane Atribut (TAL)
- SMX
- ml/1
- Macroprocesorul Universal (GPM) este un macroprocesor contextual de potrivire a modelelor, ce poate fi descris ca fiind o combinație de expresii regulate, EBNF și AWK
- SAM76
Macrouri procedurale
[modificare | modificare sursă]Limbajul PL/I este unic în modul în care se scriu macrourile sale, folosind chiar sintaxa limbajului, acestea fiind un subset al acestui limbaj: compilatorul execută "instrucțiuni de preprocesor" în momentul compilării, și rezultatul acestui proces constituie o parte din codul ce este compilat. Capacitatea de a utiliza limbajul procedural familiar în descrierea de macrouri determină creșterea puterii și constituie un avantaj față de metodele simple de macrosubstituție, aceasta determinând în aceeași măsură creșterea dimensiunii și complexității compilatorului, odată cu scăderea vitezei acestuia.
Majoritatea limbajelor de asamblare au implementat modele mult mai simpliste de macrouri procedurale, de exemplu dau posibilitatea de a repeta o porțiune de cod de N ori pentru desfacerea buclelor; dar acestea au o sintaxă complet diferită față de limbajul de asamblare pentru care au fost proiectate.
Macrouri Lisp
[modificare | modificare sursă]Sintaxa limbajului Lisp este foarte favorabilă pentru macrouri; limbajele din familia Lisp, cum ar fi Common Lisp și Scheme, au implementate sisteme foarte puternice de macrouri. Macrourile Lisp transformă însăși structura programului, cu toată sintaxa la dispoziție pentru a exprima astfel de transformări. Common Lisp și Scheme diferă în modul de implementare a sistemelor de macrouri. Sistemul Scheme este bazat pe potrivirea modelelor, în timp ce macrourile lui Common Lisp lucrează sub modelul de funcții ce transformă textul programului.
Fiind în măsură să aleagă ordinea de evaluare (vezi procedeul de evaluare leneșă (lazy) și funcțiile relaxate) se creează posibilitatea definirii unor noi constructe sintactice (adică structuri de control) ce nu pot fi distinse de cele deja definite în limbajul de programare. De exemplu, într-o versiune a limbajului Lisp ce are definită structura cond
dar îi lipsește if
, este posibilă definirea acesteia din urmă în termenii celei dintâi structuri folosind macrouri.
Întregi extensii importante la sintaxa limbajului Lisp, cum ar fi Sistem de Obiecte Common Lisp au fost definite sub formă de macrouri.
Macrourile dau de asemenea posibilitatea definirii limbajelor de descriere a datelor ce sunt în mod automat convertite în cod caracter prin compilare, ceea ce înseamnă că unele constructe ca de exemplu mașinile de stare pot fi implementate într-un mod și natural, și eficient.
Vezi și Macrouri automate