Käännetyn ja tulkatun kielen ero

Anonyymi

Täällä palstalla kirjoittelee (ja lukee) hyvin erilaisilla pohjatiedoilla varustettuja henkilöitä. Tässä siksi nopea, pieni selvennys mitä eroja on käännetyllä ja tulkatulla kielellä:

Käännetty kieli:
Käännetty kieli kirjoitetaan tyypillisesti lähdekoodina, joka on ns. ihmisen ymmärrettävissä. Se voi koostua yhdestä tiedostosta tai koodi voi olla jaettuna lukuisiin erillisiin tiedostoihi, jotka on sovitulla merkintätavalla merkitty liittymään toisiinsa. Ennen kuin lähdekoodista rakentuva ohjelma voidaan suorittaa ohjelmana, se pitää kääntää kääntäjä-ohjelmalla.

Kääntäjä käy läpi lähdekoodin. Se ilmoittaa virheistä ja tällöin ajettavaa ohjelmaa ei valmistu. Kun virheet on korjattu lähdekoodista, käännös onnistuu. Siellä voi edelleen olla mukana esimerkiksi kääntäjän anatamia varoituksia tai ihan selkeitä ohjemointivirheitä, eli bugeja, mutta kieliopillisesti koodi on mahdollista kääntää konekielelle.

Kun konekielinen, ajettava binääri on kääntäjän toimesta syntynyt, ja sille on annettu suoritusoikeudet järjestelmässä, voidaan se suorittaa. Tällöin ohjelma lähtee etenemään.

Kääntämisen etuja on paljon tulkattuja kieliä parempi suoritusnopeus eli "teho". Varsinkin jos käytetty järjestelmä on tehoiltaan rajallinen (vähän muistia, vähän prosessoritehoa) saadaan käännetyillä kielillä järjestelmä tekemään asioita, joista tulkattavilla kielillä ei tulisi mitään.



Tulkattava kieli:
Tulkattava kieli kirjoitetaan yleensä myöskin lähdekooditiedostoon tai useampaan. Joitakin tulkattavia kieliä voidaan kuitenkin ajaa suoraan esimerkiksi komentokehoitteeseen kirjoittamalla.

Tulkattavaa kieltä ei kuitenkaan yleensä käännetä konekieliseksi ohjelmaksi etukäteen. Tämän asemasta lähdekooditiedostoa lähdetään suorittamaan tulkkiohjelman avulla, jolloin tulkkiohjelma välittää tietokoneelle konekieliset käskyt lähdekoodin perusteella sen mukaan mitä ohjelmassa tapahtuu.

Yleensä tulkattavat kielet ovat helpompia oppia ja niillä saa vasta-alkaja nopeammin näkyviä tuloksia. Se johtuu siitä, että useat tulkattavat kielet ovat erittäin "ilmaisuvoimaisia", eli parilla komennolla syntyy paljon näkyvää jälkeä. Tämä taas on mahdollista, koska lähdekoodia suorittavalla tulkkiohjelmalla on käytössään konekielisiä kirjastoja, joissa on valmiiksi ohjelmoituna monia temppuja, jotka voidaan sitten kutsua esiin kirjastoista lähdekoodin avulla. Nämä kirjastot on luonnollisesti koodattu käännettävällä kielellä etukäteen.



Yleisesti:
Eri ohjelmointikielet sopivat erilaisiin asioihin. Käännettävillä kielillä on periaatteessa mahdollista koodata kasaan "ihan mitä vain" mutta joskus on vain helpompi käyttää jotain tulkattavaa kieltä esimerkiksi helpomman stringikäsittelyn takia tai yksinkertaisen graafisen käyttöliittymän toteuttamiseen.

Jos haluaa kehittyä ohjelmoinnissa ja oppia ratkomaan tosielämän ongelmia, on syytä vähintään ymmärtää näiden kahden erityyppisten ohjemointikielien eroja.

11

262

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Anonyymi

      Lisäyksenä tuohon ylläolevaan. Tässä palstalla tehtiin tänään yksinkertainen testi. Kirjoitettiin C-kielellä (käännettävä kieli) sekä Pythonilla (tulkattava kieli) yksinkertainen ohjelma, joka silmukassa kasvattaa muuttujan arvon nollasta neljään miljardiin.

      Tulokset osoittivat, että C-kielellä kirjoitettu ohjelma suoriutui tehtävästä paljon nopeammin. C-kielisen version suoritusaika oli noin 9 sekuntia. Pythonilla tehdyn version suoritus kesti yli yhdeksän minuuttia.

      Tämä antaa vähän mielikuvaa siitä, miten paljon tehokkaamaa koodia syntyy ohjemointikielillä, jotka käännetään kääntäjällä ennen suorittamista.

      • Anonyymi

        Luonnollisesti myös käytössä olevan tietokoneen teho vaikuttaa suoritusnopeuteen. Sehän näkyy peleissäkin: nuhapumpulla framerate on huono kun taas kunnon raudalla kaikki lentää.

        Tässä hengessä kokeilin tuota C-kielistä ohjelmaa minun koneella jossa on prosessorina Ryzen 3800X ja käyttiksenä Linux. Nollasta neljään miljardiin kesti tällä koneella noin 1,667 sekunttia.


        Jos olisi äärettömän tehokas kone, kestäisin kaikkien ohjelmien suoritus äärettömän lyhyen ajan. Tästä saadaan, että mitä tehokkaampi kone on, sitä vähemän on merkitystä onko koodi käänettyä vai tulkattua. Nykyisillä koneilla sillä tietenkin on merkitystä ja on vielä monta vuotta. Merkitys myös korostuu jos koodataan jotain heikkotehoista systeemiä varten, esim. IoT, Raspberry Pi ym. ym.


      • Anonyymi

        Testi ei ole mitenkään realistinen kun oikeat ohjelmat eivät ole mitään numeron laskemista silmukassa.

        Todellisissa tilanteissa suorituskykyerot ovat pienemmät ja Python itseasiassa voi olla myös käännettyä C-kieltä nopeampi. Python nimittäin tukee moduuleja ja kieli tukee sitä, että samassa prosessissa on enemmän komponentteja. C-kielellä taas komponentit ajetaan erillisissä prosesseissa. Siitä tulee helposti enemmän latensseja.


      • Anonyymi
        Anonyymi kirjoitti:

        Testi ei ole mitenkään realistinen kun oikeat ohjelmat eivät ole mitään numeron laskemista silmukassa.

        Todellisissa tilanteissa suorituskykyerot ovat pienemmät ja Python itseasiassa voi olla myös käännettyä C-kieltä nopeampi. Python nimittäin tukee moduuleja ja kieli tukee sitä, että samassa prosessissa on enemmän komponentteja. C-kielellä taas komponentit ajetaan erillisissä prosesseissa. Siitä tulee helposti enemmän latensseja.

        Hiukan asiasta poiketen, mitä mieltä olet onko maapallo pyöreä, vai pannukakku?


    • Anonyymi

      Jäi nyt mainitsematta yksi tärkeä ero käännettävän ja tulkattavan kielen välillä: tulkattavalla kielellä tehdyllä ohjelmalla on parempi siirrettävyys käyttöjärjestelmästä toiseen.

      Käännettävällä kielellä tehty ohjelma täytyy yleensä erikseen kääntää joka käyttöjärjestelmää varten. Tulkattava toimii yleensä sellaisenaan eri käyttöjärjestelmissä, mutta vaatii sitten käyttöjärjestelmään asennetun kys. kielen tulkin.

      • Anonyymi

        Tuo on ihan totta! Unohtui mainita kokonaan!

        Onko muuten tullut vastaan tilanteita missä ei olekkaan voinut suoraan käyttää samaa tulkatun kielen koodia toisessa järjestelmässä ilman jotain muutoksia? Voiko esim. muuttujille varatun muistin koko vaihdella 32 ja 64 bittisissä järjestelmissä ja aiheutta ongelmia? Tai voiko skandit toimia yhdessä järjestelmässä ja olla toimimatta toisessa?

        Itse olen enemmän C ja C -miehiä niin on nuo muut jääneet vähemmälle, mitä nyt jotain joskus tehnyt Java Scriptillä, Pythonilla ja PHP:llä.


      • Anonyymi
        Anonyymi kirjoitti:

        Tuo on ihan totta! Unohtui mainita kokonaan!

        Onko muuten tullut vastaan tilanteita missä ei olekkaan voinut suoraan käyttää samaa tulkatun kielen koodia toisessa järjestelmässä ilman jotain muutoksia? Voiko esim. muuttujille varatun muistin koko vaihdella 32 ja 64 bittisissä järjestelmissä ja aiheutta ongelmia? Tai voiko skandit toimia yhdessä järjestelmässä ja olla toimimatta toisessa?

        Itse olen enemmän C ja C -miehiä niin on nuo muut jääneet vähemmälle, mitä nyt jotain joskus tehnyt Java Scriptillä, Pythonilla ja PHP:llä.

        Alustariippumattomuus rajoittaa hyvin voimakkaasti sitä mitä ohjelmalla voidaan tehdä, muuta kuten edellä sanottiin tulkattavat koodit säilyttää käännettyjä paremmin siirrettävyyden.


      • Anonyymi
        Anonyymi kirjoitti:

        Alustariippumattomuus rajoittaa hyvin voimakkaasti sitä mitä ohjelmalla voidaan tehdä, muuta kuten edellä sanottiin tulkattavat koodit säilyttää käännettyjä paremmin siirrettävyyden.

        Alustoissa on tapahtunut standardisoitumista, että ohjelmat menevät kontteihin: https://www.docker.com/resources/what-container

        Näin ollut vuosikausia, että alustasta ei tarvitse sitten välittää kun alusta on ohjelman kanssa siellä kontissa.

        Nykypäivän alustat on rajapintoja johonkin sellaiseen minkä varaan rakennetaan ohjelmia. Olkoot se sitten vaikka jonkun anturin SDK automaatioss tai vaikka Google Mapsin API jos ohjelma tehty tämän karttapalvelun varaan.


    • Anonyymi

      Eipä nuo sinun pohjatiedot oikein kaksisia ole.

      Ohjemointikieltä voidaan yleensä tulkata sekä kääntää, ja kääntämistä voidaan tehdä myös toiselle kielelle tai ohjelmointikielen eri versiolle, ja tavallisesti kääntämistä tehdään välitason kielelle mistä se käännetään konekielelle ohjelmaa ajettaessa.

      Ohjelmointikielen helppous ja ominaisuudet ei oikein liity mitenkään tähän.

      • Anonyymi

        Ole positiivinen.


    • Anonyymi

      Opin tämän eron kantapään kautta joskus 1990-luvun alussa, ostin Atari ST -koneelle GFA-Basic Compiler -nimisen ohjelman, mutta se oli pelkkä kääntäjä, jolle piti syöttää lähdekoodit ja se käänsi sitten sen ajettavaksi ohjelmaksi, PRG-tiedostoksi. Toki joku voisi sanoa että olisit voinut kirjoittaa millä tahansa editorilla sen tekstin, ei. GFA-Basic Interpreter tallensi koodi-tiedostot ns. tavu-koodiksi, jota oli mahoton tehdä ilman Intrepreter-versiota, tämän jouduin ostamaan vielä erikseen.

    Ketjusta on poistettu 5 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Niin surullinen

      onnettomuus taas. Voimia ihan kaikille läheisille,kavereille ja kouluun 🙏
      Lapua
      100
      2971
    2. Kehutaan vaihteeksi Perussuomalaisia

      Perussuomalaiset ovat olleet melkoisen lokakampanjoinnin kohteena, vaikka ovat saaneet paljon hyvää aikaiseksi. Nyt on
      Maailman menoa
      87
      2395
    3. Paloautoko se oli kolarissa Juntusrannan risteyksessä?

      Oli kuva paloautosta nettijutussa.
      Suomussalmi
      24
      1926
    4. Roiskeläpät takaisin niin alkaa lasit kestämään

      "Tuulilaseja hajottava talvi-ilmiö on ehkä ratkennut" Tämän päivän autoissa kun on esimerkiksi vanhempaa autokalustoa s
      Yleistä autoilusta
      22
      1500
    5. Mitä tapahtuu?

      Mitä säpäkän risteyksessä on tapahtunut kun poliiseja, ambulansseja ja kopteri paikalla?
      Outokumpu
      29
      1470
    6. Tiesitkö? Johannes Brotheruksen ex-isäpuoli on kuin onkin Mikko Kuustonen - Tästä on kyse!

      Tiesitkö? Ja hehän on kuin kaksi marjaa... Johannes Brotherus on KUUMAA-yhtyeen jäsen ja tänä syksynä mukana Vain elämää
      Suomalaiset julkkikset
      15
      1355
    7. siis ihan oikeesti

      Tämä on naurettavaa
      Ikävä
      87
      882
    8. Murtautuminen uimahalliin

      17.10. yöllä Kiuruveden uimahalliin murtauduttiin yläkerran oven ikkunasta. Onko kellään havaintoja tapauksesta?
      Kiuruvesi
      26
      877
    9. Mitä tarkalleen tunnet

      Minkälaisia tunteita sisälläsi liikkuu, kun tiedät, että ajattelen sinua lämmöllä ja jotain syttyy myös sinussa? Haluai
      Ikävä
      62
      826
    10. Syyskuussa 2025 ensirekisteröidyistä henkilöautoista 43 % oli täyssähköautoja.

      Niitä rekisteröitiin 2 592 eli 41 % enemmän kuin vuotta aiemmin. Syyskuussa 2025 rekisteröidyistä uusista henkilöautois
      Hybridi- ja sähköautot
      2
      749
    Aihe