[voikko-devel] Malagan optimointi (-:

Hannu Väisänen hvaisane at joyx.joensuu.fi
Wed Aug 23 08:07:39 EEST 2006


On Tue, Aug 22, 2006 at 05:42:56PM +0300, Reijo Tomperi wrote:
> Hannu Väisänen wrote:
> > Väikkärin vääntäjät voivat tehdä Malaga-kääntäjän, joka tekee
> > Malaga-koodista assebleria...

> Voisin kuvitella että nykyisillä C/C++ kääntäjillä saa sen verran hyvää 
> Assembleria, että on melko turhaa hakea optimointia kirjoittamalla 
> koodin Assemblerina em. kielten sijasta. Mutta mahtaisiko C/C++ 
> kääntäminen olla eduksi, vai joko nykyinen järjestelmä tekee sen? 

Malagassa on sisäänrakennettuna pinokone, ja Malaga-koodi käännetään
sen käskyiksi. Kääntämistä on hieman optimoitu (constant folding).
Suoritusaikana C:llä kirjoitettu tulkki suorittaa käskyt.

Enpä tullut ajatelleeksi Malagan kääntämistä C/C++:ksi, vaikka minulla
oli mielessä GCC, jossa on lukuisia front-endejä (C, C++, Objective-C,
Objective-C++, Java, Fortran, Ada) ja yksi back-end
(koodigeneraattori). Malaga-kääntäjä saadaan aikaan niin, että
kirjoitetaan ohjelma, joka muuttaa Malaga-koodin (tai Malagan
pinokoneen koodin?) GCC:n back-endin ymmärtämään muotoon. Ei mikään
triviaali homma. Triviaalia ei ole myöskään C/C++:ksi kääntäminen,
koska Malagan abstrakti malli (LAG, left associative grammar) poikkeaa
täydellisesti C/C++/assemblerin mallista.


Toinen mahdollisuus on optimoida Malagan pinokoneen koodia.

Jos meillä on sääntö:

combi_rule r ($p):
 ...
 result ... rules a, b, c;
end;

Säännöt a, b, c suoritetaan peräkkäin (abstraktisti ne suoritetaan
yhtäaikaa). Jos ihminen osaa laskea, että sääntöä a ei suoriteta, kun
parametrilla $p on tietty arvo, hän osaa kirjoittaa ohjelman, joka
optimoi koodin tällaiseksi:

  if ($p = ...) then
    result ... rules b, c;
  else
    result ... rules a, b, c;
  end;

Esimerkki: suomeksi voidaan sanoa talo+n+poika mutta ei talo+ssa+poika
eli tiettyjen sijapäätteiden jälkeen ei tarvitse kutsua sääntöä, joka
jäsentää nimisanan.


Kolmas ja helpoin mahdollisuus on tietysti optimoida Suomi-malaga. (-:
Tulos on kamalaa makaronikoodia, mutta jos optimointi on ihan oikeasti
tarpeen, niin sitten se on tarpeen.



More information about the devel mailing list