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

72

    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. Heikki Silvennoinen petti vaimoaan vuosien ajan

      Viiden lapsen isä Heikki kehuu kirjassaan kuinka paljon on pettänyt vaimoaan vuosien varrella.
      Kotimaiset julkkisjuorut
      169
      3010
    2. Miksi ihmeessä nainen seurustelit kanssani joskus

      Olin ruma silloin ja nykyisin vielä rumempi En voi kuin miettiä että miksi Olitko vain rikki edellisestä suhteesta ja ha
      Ikävä
      26
      2089
    3. Taasko se show alkaa

      Koo osottaa taas mieltään
      Ikävä
      23
      2034
    4. Persut nimittivät kummeli-hahmon valtiosihteeriksi!

      Persujen riveistä löytyi taas uusi törkyturpa valtiosihteeriksi! Jutun perusteella järjenjuoksu on kuin sketsihahmolla.
      Perussuomalaiset
      91
      1863
    5. Onko ministeri Juuso epäkelpo ministerin tehtäviensä hoitamiseen?

      Eikö hänellä ole kompetenttia hoitaa sosiaali- ja terveysministetin toimialalle kuuluvia ministerin tehtäviä?
      Perussuomalaiset
      71
      1573
    6. Sakarjan kirjan 6. luku

      Jolla korva on, se kuulkoon. Sain profetian 22.4.2023. Sen sisältö oli seuraava: Suomeen tulee nälänhätä niin, että se
      Profetiat
      19
      1323
    7. Avaa sydämesi mulle

      ❤ ❤❤ Tahdon pelkkää hyvää sulle Sillä ilmeisesti puhumalla Avoimesti välillämme Kaikki taas selviää Kerro kaikki, tahdo
      Ikävä
      37
      1232
    8. Söpö lutunen oot

      Kaipaan aina vaan, vaikkakin sitten yksipuolisesti.
      Ikävä
      10
      1221
    9. Elia tulee vielä

      Johannes Kastaja oli Elia, mutta Jeesus sanoi, että Elia tulee vielä. Malakian kirjan profetia Eliasta toteutuu kokonaan
      Helluntailaisuus
      35
      1193
    10. Nellietä Emmaa ja Amandaa stressaa

      Ukkii minnuu Emmaa ja Amandaa stressaa ihan sikana joten voidaanko me koko kolmikko hypätä ukin kainaloon ja syleilyyn k
      Isovanhempien jutut
      9
      1181
    Aihe