Sari la conținut

Macrosubstituție

De la Wikipedia, enciclopedia liberă
(dif) ← Versiunea anterioară | afișează versiunea curentă (dif) | Versiunea următoare → (dif)

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

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

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 se 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 browerele de web. De exemplu limbajul JavaScript a fost inclus în pachetul office OpenOffice.org 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.

Macro virusul

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ă scriitorii de cod malicios nu vor ezita conceperea unui model de virus bazat 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 de pe planetă, ajutaţi fiind în mare parte şi de lipsa aproape totală de securitate din versiunile de Windows pe care acest limbaj era implementat. Chiar dacă sistemele de operare din acea perioadă pe care acest tip de virus era foarte răspândit nu aveau implementat un sistem adecvat securitate şi protecţie a datelor, unele aplicaţii iau acum măsuri preventive şi 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 macro viruşi.

Macrouri pentru substituţia de text -- Macrosubstituţia

Limbaje de programare cum ar fi C şi limbajul de asamblare au un sistem simplu de macrouri, implementate ca preprocesoare la compilatorsau asamblor. Macrourile preprocesorului C funcţionează ca o simplă operaţiune de căutare şi modificare textuală la nivelul de element de sintaxă, decât să lucreze la nivel de caracter. O utilizare tipică pentru macrouri este întâlnită în sistemul de tehnoredactare computerizată TeX şi derivatele acestuia, unde cea mai mare parte a funcţionalităţii acestui sistem 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. Other examples:

Macrouri procedurale

Limbajul PL/I este unic în modul în care macrourile PL/I sunt scrise 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ş 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 bucată 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

Lipsa sintaxei din limbajul Lisp este foarte favorabilă pentru macrouri; limbajele din familia Lisp, cum ar fi Lisp Uzual ş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. Lisp Uzual şi Scheme diferă în modul de implementare a sistemelor de macrouri. Sistemul Scheme este bazat pe potrivirea modelelor, în timp ce macrourile Lisp Uzual lucrează sub modelul de funcţii ce transformă textul programului.

Fiind în măsură să aleagă ordinea de evaluare (vezi procedeul de evaluare leneşă şi funcţiile relaxate) se creează posibilitatea definirii unor noi constructe sintactice (adică structuri de control) ce nu pot fi distinse de cele ce sunt 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 Lisp Uzual, 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ă nişte constructe ca de exemplu maşinile de stare pot fi implementate într-un mod ce este în acelaşi timp şi natural şi eficient. Macrouri automate