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

254

    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. Persujen VigeIius noIasi taas itsensä

      Kun uhriutui vuonna 2024 (siis persujen "vahtivuorolla") Tampereella aloittaneen perheryhmäkodin toiminnasta. ”Leviää k
      Maailman menoa
      43
      2484
    2. Persut ei kestä heidän johtajistaan tehtyä huumoria

      Laajalti tiedostettu tosiasia on, että autoritaariset johtajat ja erinäiset diktaattorit eivät kestä heidän kustannuksel
      Maailman menoa
      49
      2053
    3. Kuka omistaa entisen Veljeskodin?

      Kenellä on varaa pitää hiljattain remontoitua rakennusta tyhjillään? Tehdäänkö siitä Suomen kallein kirpputori vai mikä
      Ähtäri
      9
      1986
    4. Vasemmistoliitto peruisi sosiaaliturvan heikennykset

      He palauttaisivat työttömyysturvan ja asumstuen suojaosat, eli saisi jälleen tienata 300 euroa kuukaudessa ilman tukien
      Maailman menoa
      50
      1712
    5. Jos voisit kysyä

      Kaivatultasi vielä yhden kysymyksen, mikä se olisi? Aloitan: Mitä sinä halusit minusta?
      Ikävä
      140
      1465
    6. Oli kiva nähdä sut

      vaikkakin kaukaa ja nopeasti. Tiedän kyllä tasan tarkkaan missä mennään, joten anteeksi jos pilasin päiväsi, ei ollut mi
      Suhteet
      24
      1136
    7. Lamppu syttyi

      Tiedätkö mitä mies, olen aivan yhtä rakastunut suhun. Kyllä. Koita jaksaa eiköhän me kohta nähdä ❤️
      Ikävä
      68
      925
    8. Talk Show isäntä Jimmy Kimmel sai kenkää

      Vasurina heitti sopimatonta läppää murhatusta Charlie Kirkistä tai oikeammin murhaajan poliittisesta taustasta ja kuinka
      Maailman menoa
      119
      908
    9. Välillä kyllä naurattaakin tämä kahden aikuisen meininki

      Se nyt on aivan selvä asia että kumpikin on päälakeensa myöten rakastunut, ja sinä se olet koko ajan ollutkin. 😘
      Ikävä
      62
      903
    10. Jos voisit palata yhteen risteykseen

      ..mikä se elämässäsi olisi?
      Ikävä
      67
      896
    Aihe