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

247

    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. IL - Kansanedustaja tehnyt ITSEMURHAN eduskuntatalossa!!

      "IL:n tiedot: Kansanedustaja tehnyt itsemurhan Eduskuntatalossa Iltalehden tietojen mukaan kansanedustaja on tehnyt its
      Maailman menoa
      405
      8859
    2. Eemeli Peltonen teki itsemurhan eduskuntatalossa

      Kevyet mullat sitten vaan. Ei mulla muuta.
      Maailman menoa
      172
      3268
    3. Kuka pistetty kylmäksi

      Ketähän joutunu puukkohipan uhriksi? Tietääkö kukkaan?
      Kajaani
      17
      1744
    4. Mietin että

      Onko tarinallamme vielä luvussa tilaa kohtaamiselle vai jääkö se tähän.
      Ikävä
      77
      1136
    5. Oletko samaa mieltä

      Että on parempi olla erillään?
      Ikävä
      76
      1068
    6. Postilaatikoista

      Tuntuu kaikki tietävän tekijän/tekijät, mutta miksi nimiä ei julkaista???
      Kihniö
      27
      1055
    7. Sylikkäin.

      Sylikkäin, suudellen. Milloin haluaisit näin nainen tehdä ? Vain häntä ajatellen 😘. Tietenkin jos häntä asia kiinnosta
      Ikävä
      64
      1011
    8. Eemeli Peltosen viimeinen postaus Facebookissa!

      "Olen ollut kevätistuntokauden viimeisillä viikoilla paljon poissa eduskuntatyöstä. Sain toukokuussa hyvää hoitoa HUSiss
      Maailman menoa
      79
      975
    9. Nainen arvaa kuka

      En ikävä kyllä elä enää pitkään
      Ikävä
      55
      973
    10. Sano nyt kiertääkö

      Huhut meistä tai jostain muusta?
      Ikävä
      65
      920
    Aihe