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.
Käännetyn ja tulkatun kielen ero
11
205
Vastaukset
- 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
Ja taas ammuttu kokkolassa
Kokkolaisilta pitäisi kerätä pois kaikki ampumaset, keittiöveitset ja kaikki mikä vähänkään paukku ja on terävä.354289Kuinka kauan
Olet ollut kaivattuusi ihastunut/rakastunut? Tajusitko tunteesi heti, vai syventyivätkö ne hitaasti?1141586Milli-helenalla ongelmia
Suomen virkavallan kanssa. Eipä ole ihme kun on etsintäkuullutettu jenkkilässäkin. Vähiin käy oleskelupaikat virottarell2481546Helena Koivu on äiti
Mitä hyötyä on Mikko Koivulla kohdella LASTENSA äitiä huonosti . Vie lapset tutuista ympyröistä pois . Lasten kodista.2181400- 351266
Ja taas kerran hallinto-oikeus että pieleen meni
Hallinto-oikeus kumosi kunnanhallituksen päätöksen vuokratalojen pääomituksesta. https://sysmad10.oncloudos.com/cgi/DREQ881078Löydänköhän koskaan
Sunlaista herkkää tunteellista joka jumaloi mua. Tuskin. Siksi harmittaa että asiat meni näin 🥲1321072Kun näen sinut
tulen iloiseksi. Tuskin uskallan katsoa sinua, herätät minussa niin paljon tunteita. En tunne sinua hyvin, mutta jotain471054Purra saksii taas. Hän on mielipuuhassaan.
Nyt hän leikkaa hyvinvointialueiltamme kymmeniä miljoonia. Sotea romutetaan tylysti. Terveydenhoitoamme kurjistetaan. ht2671031- 62994