Kirjoittaja Aihe: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)  (Luettu 5174 kertaa)

tetrafuran

  • Käyttäjä
  • Viestejä: 405
    • Profiili
Aina silloin tällöin keskusteluissa vilahtelee sana "kääntäminen". Kaiketi sama kuin compile... tai sit ei. Tuo alue on jäänyt minulle erityisen hämäräksi enkä saanut siihen vastausta "ubuntu tutuksi", "linux.fi" enkä edes tätä foorumia selailemalla. Korjatkaa jos seuraavat käsitykseni ovat vääriä:

1) Ohjelma voidaan kääntää lähdekoodista joksikin... jotta se toimisi tietyn distron kanssa... kait.
2) kääntäminen useinkaan ei ole tarpeen, koska esim ubuntulle on jo tolkuton läjä ohjelmia.
3) Lähdekoodi on siis jollain tavoin universaalimpi kuin se mikä käännöksestä tulee.
4) esim. SuSe:n (tai jonkun toisen distron) ohjelmat eivät siis toimi Ubuntussa.
5) Tuo ongelma korjaantuu joko etsimällä korvaava ohjelma tai kääntämällä ko. softa.
6) Ohjelmien 32 bittinen versiot voidaan kääntää 64 bittisiksi.

Mitä siis tuossa käännöksessä oikein tapahtuu? Tässä ohjeessa kerrotaan miten se tehdään, ei mitä siinä tapahtuu.
And so at last the beast fell and the unbelievers rejoiced. But all was not lost, for from the ash rose a great bird. The bird gazed down upon the unbelievers and cast fire and thunder upon them. For the beast had been reborn with its strength renewed, and the followers of Mammon cowered in horror.

masa

  • Käyttäjä
  • Viestejä: 494
    • Profiili
Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
« Vastaus #1 : 05.07.07 - klo:14.58 »
Kääntäminen tarkoittaa kernelin tai ohjelman optimointia omalle koneelle. Ainakin mun ymmärtääkseni. Ja Kääntäminen = compile , kai.
matti_mato

Kun pulma ratkeaa, lisääppä ekan viestin otsikkoon [RATKAISTU] :)

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
« Vastaus #2 : 05.07.07 - klo:15.10 »
1) Ohjelma voidaan kääntää lähdekoodista joksikin... jotta se toimisi tietyn distron kanssa... kait.

Ohjelma käännetään (engl. is compiled) lähdekoodista joksikin toiseksi koodiksi, joka voi olla periaatteessa mitä tahansa, vaikka toisen ohjelmointikielen lähdekoodia, käytännössä kuitenkin useimmiten ns. konekieltä eli koneen ja käyttöjärjestelmän vaatimusten mukaista binaarikoodia. Jälkimmäisessä merkityksessä voidaan englannissa myös ”rakentaa” (build) koodista ohjelma.

Jakeluun kääntäminen liittyy lähinnä sikäli, että jakeluissa on esim. eri versiot kääntäjän tarvitsemista kirjastoista ja eri sijoituspaikat niin ohjelmille kuin kirjastoillekin.

Lainaus
2) kääntäminen useinkaan ei ole tarpeen, koska esim ubuntulle on jo tolkuton läjä ohjelmia.

Parempi syy olla kääntämättä on oikeastaan se, että Ubuntun paketinhallinta ottaa hoitaakseen ohjelman päivittämisen, kun käytät valmista pakettia etkä käännä ohjelmaa itse.

Lainaus
3) Lähdekoodi on siis jollain tavoin universaalimpi kuin se mikä käännöksestä tulee.

Aivan. Lähdekoodi ei ole samassa määrin alustakohtainen (missä alusta suunnilleen = koneen rauta + käyttis).

Lainaus
4) esim. SuSe:n (tai jonkun toisen distron) ohjelmat eivät siis toimi Ubuntussa.

Saattavat toimiakin, mutta vaativat ehkä vähän sumplimista, eikä paketinhallinta sitten ehkä pysty hallitsemaan ohjelmaa (esim. mainittu SUSE käyttää ainakin toistaiseksi lähinnä RPM-, ei deb-paketteja).

Lainaus
5) Tuo ongelma korjaantuu joko etsimällä korvaava ohjelma tai kääntämällä ko. softa.

Parhaiten jos löytyy valmis paketti omaa distroasi varten.

Lainaus
6) Ohjelmien 32 bittinen versiot voidaan kääntää 64 bittisiksi.

Parhaimmillaan se ei vaatine kuin kääntäjän säätämistä, mutta joskus on kajottava itse lähdekoodiinkin, ennen kuin lopputulos toimii.
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11

MikkoJP

  • Käyttäjä
  • Viestejä: 1148
  • iBook 600 MHz + Debian 4.0
    • Profiili
Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
« Vastaus #3 : 05.07.07 - klo:15.19 »
Mitä siis tuossa käännöksessä oikein tapahtuu? Tässä ohjeessa kerrotaan miten se tehdään, ei mitä siinä tapahtuu.

Yksinkertaisesti sanottuna: ihmisen ymmärtämällä ohjelmointikielellä (esim. c, c++, pascal jne) kirjoitettu ohjelman lähdekoodi käännetään tietokoneen prosessorin käyttämälle konekielelle (niiksi ykkösiksi ja nolliksi).

Samasta lähdekoodista voi onnistua kääntämään ohjelman vaikkapa kokonaan eri käyttöjärjestelmille tai eri prosessoreille.
« Viimeksi muokattu: 05.07.07 - klo:15.22 kirjoittanut MikkoJP »

tetrafuran

  • Käyttäjä
  • Viestejä: 405
    • Profiili
Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
« Vastaus #4 : 05.07.07 - klo:18.11 »
Oho. Hienoja vasauksia. Kiitos. Tämä selkisi.
And so at last the beast fell and the unbelievers rejoiced. But all was not lost, for from the ash rose a great bird. The bird gazed down upon the unbelievers and cast fire and thunder upon them. For the beast had been reborn with its strength renewed, and the followers of Mammon cowered in horror.

janne

  • Käyttäjä
  • Viestejä: 5150
    • Profiili
Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
« Vastaus #5 : 05.07.07 - klo:19.43 »

pilkunviilaaja iskee jälleen, monimutkaistaen hommia...

1) Ohjelma voidaan kääntää lähdekoodista joksikin... jotta se toimisi tietyn distron kanssa... kait.

Ohjelma käännetään (engl. is compiled) lähdekoodista joksikin toiseksi koodiksi, joka voi olla periaatteessa mitä tahansa, vaikka toisen ohjelmointikielen lähdekoodia, käytännössä kuitenkin useimmiten ns. konekieltä eli koneen ja käyttöjärjestelmän vaatimusten mukaista binaarikoodia. Jälkimmäisessä merkityksessä voidaan englannissa myös ”rakentaa” (build) koodista ohjelma.

Jakeluun kääntäminen liittyy lähinnä sikäli, että jakeluissa on esim. eri versiot kääntäjän tarvitsemista kirjastoista ja eri sijoituspaikat niin ohjelmille kuin kirjastoillekin.

jepjep. tässä vähän sivutaan toista käsitettä kuitenkaan ottamatta siihen varsinaisesti kantaa. tämä käsite on linkkaaminen. kun ohjelmoija kirjoittaa ohjelman valitsemallaan (käännettävällä) ohjelmointikielellä, hän tekee sen kirjoittamalla haluamansa toimintoja kuvaavan esityksen valitun ohjelmointikielen syntaksin mukaisesti. oletettavasti ohjelmoija ei kuitenkaan kirjoita aivan kaikkea toiminnallisuutta itse alusta asti, vaan käyttää valmiita toimintoja tarjoavia kirjastoja ja kutsuu niissä toteutettuja toimintoja. kun ohjelma sitten käännetään ohjelmointikielen syntaksin mukaisesta tekstitiedostosta konekieliseksi esitykseksi jotta tietokone osaisi sen suorittaa, ei ohjelma olekaan vielä täysin valmis, vaan toimiakseen se se pitää linkata käytettyjä kirjastoja vasten.

tämä linkkaaminen voi tapahtua dynaamisesti tai staattisesti. karkeasti ottaen dynaamisessa linkkauksessa vain kerrotaan ohjelmalle mistä kirjastoista se löytää tarvitsemansa toiminnot ajon aikana (windowsissa dll:t ovat kirjastoja joita vastaan linkataan dynaamisesti). staattisessa linkkauksessa puolestaan kirjastot liitetään osaksi syntyvää sovellusta.

jotta asia ei olisi liian yksinkertainen, ohjelmointikielten joukossa on myös kieliä joita ei käännetä konekieleksi vaan tavukoodiksi. esimerkkinä tällaisesta kielestä voi mainita vaikka javan. javaohjelmat käännetään java-kääntäjällä, jolloin java-lähdekoodista syntyy java-tavukoodia. tavukoodin yksi päämäärä on mahdollistaa saman käännetyn ohjelman käyttäminen eri käyttöjärjestelmissä. tämä onnistuu siten, että tavukoodin suorittaa erillinen tulkki, joka sitten ajon aikana luo tavukoodista tietokoneen ymmärtämiä komentoja ja suorittaa ne. tällöin mikä tahansa järjestelmä jolle on toteutettu kyseisen kaltaista tavukoodia tulkkaava ohjelma (tässä tapauksessa java-tulkki) pystyy suorittamaan tavukoodiksi kännetyn ohjelman ja teoriassa sen pitäisi toimia joka alustalla täsmälleen samalla tavalla. tämä ei tosin ole aivan totta.


Lainaus
2) kääntäminen useinkaan ei ole tarpeen, koska esim ubuntulle on jo tolkuton läjä ohjelmia.

Parempi syy olla kääntämättä on oikeastaan se, että Ubuntun paketinhallinta ottaa hoitaakseen ohjelman päivittämisen, kun käytät valmista pakettia etkä käännä ohjelmaa itse.

juu, silloin pitää tietysti suorittaa kääntämisen lisäksi myös paketointi ;)

Lainaus
3) Lähdekoodi on siis jollain tavoin universaalimpi kuin se mikä käännöksestä tulee.

Aivan. Lähdekoodi ei ole samassa määrin alustakohtainen (missä alusta suunnilleen = koneen rauta + käyttis).

jos lähdekoodissa käytetään vain jokaiselle alustalle saatavilla olevia kirjastoja, lähdekoodista pitäisi pystyä kääntämään samalla tavalla toimivan ohjelman jokaiselle alustalle (jolle siis kyseisen kielen kääntäjä ja kirjastot löytyvät). jos siellä kuitenkin käytetään alustakohtaisia kirjastoja, on lähdekoodikin tietyllä tavalla alustasidonnaista.

Lainaus
4) esim. SuSe:n (tai jonkun toisen distron) ohjelmat eivät siis toimi Ubuntussa.

Saattavat toimiakin, mutta vaativat ehkä vähän sumplimista, eikä paketinhallinta sitten ehkä pysty hallitsemaan ohjelmaa (esim. mainittu SUSE käyttää ainakin toistaiseksi lähinnä RPM-, ei deb-paketteja).

tosiaan susessa käännetty, dynaamisesti linkitety, ohjelma saattaa toimia myös ubuntussa, mutta siitä ei ole mitään takeita. se riippuu hurjasti käytetyistä kirjastoista ja niiden versioista. staattisesti linkattu ohjelma puolestaan toimii paljon suuremmalla todennäköisyydellä, mutta sillä on ohat huonot puolensa.

Lainaus
5) Tuo ongelma korjaantuu joko etsimällä korvaava ohjelma tai kääntämällä ko. softa.

Parhaiten jos löytyy valmis paketti omaa distroasi varten.

juu, eli homman pitäisi hoitua joko etsimällä sama ohjelma omassa ympäristössä käänettynä, vastaava ohjelma tai kääntämällä ohjelma itse.

Lainaus
6) Ohjelmien 32 bittinen versiot voidaan kääntää 64 bittisiksi.

Parhaimmillaan se ei vaatine kuin kääntäjän säätämistä, mutta joskus on kajottava itse lähdekoodiinkin, ennen kuin lopputulos toimii.

aivan näin. tosin tarkennettakoon vielä, että suoritettavaa 32-bittistä ohjelmaa ei saa muutettua 64-bittiseksi, mutta lähdekoodin kanssa homma onnistuu.
Janne

SuperOscar

  • Käyttäjä
  • Viestejä: 4000
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
« Vastaus #6 : 05.07.07 - klo:20.44 »
pilkunviilaaja iskee jälleen, monimutkaistaen hommia...

Pilkunviilaus on jalo ja valitettavan aliarvostettu taito :)
pöytäkone 1, kannettavat 1–3: Debian GNU/Linux 12; pöytäkone 2: openSUSE Tumbleweed; NUC: openSUSE Leap 15.5; RPi 1: FreeBSD 14-RELEASE; RPi 2: LibreELEC 11


tetrafuran

  • Käyttäjä
  • Viestejä: 405
    • Profiili
Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
« Vastaus #8 : 06.07.07 - klo:17.51 »
Lainaus
2) kääntäminen useinkaan ei ole tarpeen, koska esim ubuntulle on jo tolkuton läjä ohjelmia.
Parempi syy olla kääntämättä on oikeastaan se, että Ubuntun paketinhallinta ottaa hoitaakseen ohjelman päivittämisen, kun käytät valmista pakettia etkä käännä ohjelmaa itse.

juu, silloin pitää tietysti suorittaa kääntämisen lisäksi myös paketointi ;)

Eli tarvitaan kauniisti kuvioitua paperia, kiiltävää lituskanarua, teippiä ja sakset... tai sitten ei. Monta kertaa tuokin termi on vilahdellut siellä sun täällä, mutta siihenkään ei selvyyttä ole tullut. Kääntäminen ja lähdekoodi on tullut jotenkin selväksi, mutta tuo paketointi jäi vielä kummittelemaan.




And so at last the beast fell and the unbelievers rejoiced. But all was not lost, for from the ash rose a great bird. The bird gazed down upon the unbelievers and cast fire and thunder upon them. For the beast had been reborn with its strength renewed, and the followers of Mammon cowered in horror.

shadowi

  • Käyttäjä
  • Viestejä: 59
  • ~wandering mind
    • Profiili
Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
« Vastaus #9 : 06.07.07 - klo:18.16 »
Lainaus
2) kääntäminen useinkaan ei ole tarpeen, koska esim ubuntulle on jo tolkuton läjä ohjelmia.
Parempi syy olla kääntämättä on oikeastaan se, että Ubuntun paketinhallinta ottaa hoitaakseen ohjelman päivittämisen, kun käytät valmista pakettia etkä käännä ohjelmaa itse.

juu, silloin pitää tietysti suorittaa kääntämisen lisäksi myös paketointi ;)

Monta kertaa tuokin termi on vilahdellut siellä sun täällä, mutta siihenkään ei selvyyttä ole tullut. Kääntäminen ja lähdekoodi on tullut jotenkin selväksi, mutta tuo paketointi jäi vielä kummittelemaan.

Paketointi on periaatteessa asennuspaketin kuten .deb, .rpm jne. tekemistä. Tähän pakettiin sisältyy binääri-jakeluiden tapauksessa ohjelman binääri, lisenssitietoja, asetustiedostoja, kirjastoja yms. Myös ohjeet näiden tiedostojen asentamiseen oikeisiin paikkoihin (pakettienhallintaohjelmaa varten) löytyy asennuspaketista.

Gentoon tapauksessa paketit (.ebuild) ovat oikeastaan scriptejä, jotka lataavat lähdekoodin ja asentavat sen oikeaan paikkaan (näin päällisin puolin selitettynä).