Metaohjelmointi

Metaohjelmointi on ohjelmoinnin  tyyppi , joka liittyy sellaisten ohjelmien luomiseen, jotka luovat muita ohjelmia työnsä tuloksena [1] (erityisesti lähdekoodin kääntämisvaiheessa ) tai ohjelmiin, jotka muuttuvat itse ajon aikana ( itsemuokattava koodi ). Ensimmäisen avulla voit saada ohjelmia vähemmän aikaa ja vaivaa koodaamiseen kuin jos ohjelmoija kirjoittaisi ne kokonaan käsin, toisella voit parantaa koodin ominaisuuksia (koko ja nopeus).

Koodin luominen

Tällä lähestymistavalla ohjelmakoodia ei kirjoiteta manuaalisesti, vaan se luodaan automaattisesti toiseen ohjelmaan perustuvalla generaattoriohjelmalla.

Tämä lähestymistapa on järkevä, jos ohjelmoinnin aikana kehitetään erilaisia ​​lisäsääntöjä (korkeamman tason paradigmat , ulkoisten kirjastojen vaatimusten täyttäminen, stereotyyppiset menetelmät tiettyjen toimintojen toteuttamiseksi jne.). Tässä tapauksessa osa koodista (tai tiedosta) menettää merkityksensä ja siitä tulee vain sääntöjen mekaaninen toteutus. Kun tämä osa tulee merkitykselliseksi, herää ajatus asettaa manuaalisesti vain sisältöosa ja lisätä loput automaattisesti. Tätä generaattori tekee.

Koodin luontia on kaksi pohjimmiltaan erilaista:

  1. generaattori on fyysisesti erillinen binääriohjelma, jota ei välttämättä ole kirjoitettu kohdekielellä.
  2. kohdekieli on myös generaattorin toteutuksen kieli, jolloin metaohjelma muodostaa yhtenäisen kokonaisuuden kohdeohjelman kanssa.

Yleisin ja ilmeisin esimerkki ensimmäisestä tapauksesta on GUI builders , jossa metaohjelma on suunnattu käyttäjän ohjelmointiin , jolloin ohjelmoimattomat ergonomistit voivat osallistua suoraan ohjelmistotuotteiden kehittämiseen. Tässä tapauksessa metaohjelma osoittautuu selvästikin paljon monimutkaisemmaksi, suuremmaksi ja aikaa vievämmäksi kehittää kuin sen luoma koodi, ja sen kehittäminen on perusteltua sen käytön tiheydellä. On huomattava, että käytännössä yleensä (mutta ei välttämättä) tällaiset metaohjelmat kirjoitetaan pakollisilla kielillä käytettäväksi pakollisilla kielillä, ja ne toimitetaan käännetyssä muodossa. Tämän menetelmän haittana on se, että metaohjelmakoodia ei voida käyttää uudelleen kehitettäessä uusia, monimutkaisempia metaohjelmia.

Muita esimerkkejä ovat jäsennys - ja lexer - generaattorit , kuten Lex , YACC , ANTLR , bison .

Toinen tapaus on kielen upottaminen , ja se toteutetaan kolmella staattisella menetelmällä käyttämällä kielimakroja tai puhdasta upotusta. Tässä tapauksessa metaohjelmien kehitysprosessista kertynyttä kokemusta voidaan jatkossa käyttää intensiivisesti uusien metaohjelmien kehittämiseen [ 2] .

Muita esimerkkejä:

Itsemuovautuva koodi

Mahdollisuus muokata tai lisätä itseään ajon aikana muuttaa ohjelman virtuaalikoneen . Vaikka tällainen mahdollisuus oli olemassa pitkään konekoodien tasolla (ja sitä käytettiin aktiivisesti esimerkiksi luotaessa polymorfisia viruksia ), metaohjelmointi liittyy yleensä tällaisten teknologioiden siirtoon korkean tason kielille.

Tärkeimmät toteutustavat:

Voit tarkastella, luoda ja muokata tyyppimääritelmiä, kutsupinoa ajon aikana, käyttää muuttujaa dynaamisesti hankitulla nimellä jne.

Prolog - kielessä metaohjelmoinnin avulla voit automatisoida Prolog-ohjelmien kehittämisen ja todentamisen (ominaisuuksien tarkistamisen). Metaohjelmat pitävät Prolog-ohjelmia termeinä ja antavat sinun analysoida niiden ominaisuuksia ja suhteita, rakentaa ohjelmia ohjaamaan muita Prolog-ohjelmia [4] .

Katso myös

Muistiinpanot

  1. Jonathan Bartlett, Metaohjelmoinnin taito, osa 1: Johdatus metaohjelmointiin . Haettu 4. lokakuuta 2012. Arkistoitu alkuperäisestä 24. joulukuuta 2013.
  2. Paul Hudak. Modulaarinen verkkotunnuskohtaiset kielet ja työkalut . — IEEE Computer Society Press, tietojenkäsittelytieteen laitos, Yalen yliopisto, 1998. Arkistoitu alkuperäisestä 17. lokakuuta 2013.
  3. Lingua::Romana::Perligata - search.cpan.org
  4. Metakides, G. ja Nerode, A. (1998): Logiikkaperiaatteet ja logiikkaohjelmointi (käännös romaniaksi). Tekninen kustantaja, Bukarest.

Linkit