Ohjelmistokielen kääntäjä - Compiler
Kuvauksen kirjoitti: Tatu Alatalo, N4927
Kuvaus
Kääntäjä (compiler) on ohjelmistotyökalu joka kääntää korkeamman tason kielellä (C++, Python, Java, C# jne.) kirjoitettuja ohjelmia niiden konekieliseksi vastineeksi (binääritiedostoksi). Eli ihmiselle helposti luettavissa oleva lähdekoodi käännetään tietokoneen ymmärtämään muotoon.
Kääntäjä ja tulkki
Kääntäjää ei kannata sekoittaa tulkkiin (interpreter), joka on eri asia. Eroavaisuus kääntäjän ja tulkin välillä on se, että tulkki joutuu ensin analysoimaan lähdekoodin ja sen jälkeen vasta suorittamaan sen. Kääntäjä ei suorita ohjelmaa sekä käännetty konekielinen ohjelma on nopeampi kuin tulkin käyttäminen.
Kääntäjällä voidaan myös kääntää koodi tavukoodiksi jonka tulkki sitten suorittaa. Tällöin voidaan hyödyntää sekä kääntäjän että tulkin etuja.
Kääntäjän toiminta
Kääntäjän design
Vaiheita voi olla useita, mutta ne jaetaan yleensä kolmeen osaan.
- Front end: Tarkistaa lähdekoodin syntaksin virheiden varalta ja muuttaa lähdekoodin välikoodiksi (intermediate representation, IR) middle endiä varten.
- Middle end: Optimoi välikoodin back endiä varten. Käyttämättömän koodin poistaminen jne. Optimointi riippuu minkälaiselle suoritinarkkitehtuurille koodia optimoidaan.
- Back end: Analysoi, muuttaa ja optimoi koodin kyseiselle suoritinarkkitehtuurille. Back endistä tullut koodi on tarkoitettu nimenomaan tietylle prosessorille ja käyttöjärjestelmälle.
Vaiheista löydät tarkempaa tietoa wikipedian tästä artikkelista
Muuta aiheeseen liittyvää
Nykyään on olemassa myös kääntäjiä (source-to-source compiler) joilla voidaan kääntää saman tasoisilta ohjelmointikieliltä lähdekoodia esimerkiksi toiselle tai saman kielen vanhemmasta versiosta uudempaan. Esimerkkeinä kuten vaikkapa Python koodia Javascriptille, Python 2 koodia Python 3:lle, vanhasta API versiosta uuteen API versioon jne.
Linkit ulkopuolisiin lähteisiin
- https://en.wikipedia.org/wiki/Compiler
- ISTQB:n testaussanasto v. 2.3 Suomi - Englanti
- https://en.wikipedia.org/wiki/Source-to-source_compiler
- IEEE 610-1990 - IEEE Standard Glossary of Software Engineering Terminology