[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