Ubuntu Suomen keskustelualueet

Muut alueet => Yleistä keskustelua => Aiheen aloitti: tetrafuran - 05.07.07 - klo:14.45

Otsikko: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
Kirjoitti: tetrafuran - 05.07.07 - klo:14.45
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ä (http://linux.fi/index.php/K%C3%A4%C3%A4nt%C3%A4minen) ohjeessa kerrotaan miten se tehdään, ei mitä siinä tapahtuu.
Otsikko: Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
Kirjoitti: masa - 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.
Otsikko: Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
Kirjoitti: SuperOscar - 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.
Otsikko: Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
Kirjoitti: MikkoJP - 05.07.07 - klo:15.19
Mitä siis tuossa käännöksessä oikein tapahtuu? Tässä (http://linux.fi/index.php/K%C3%A4%C3%A4nt%C3%A4minen) 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.
Otsikko: Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
Kirjoitti: tetrafuran - 05.07.07 - klo:18.11
Oho. Hienoja vasauksia. Kiitos. Tämä selkisi.
Otsikko: Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
Kirjoitti: janne - 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.
Otsikko: Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
Kirjoitti: SuperOscar - 05.07.07 - klo:20.44
pilkunviilaaja iskee jälleen, monimutkaistaen hommia...

Pilkunviilaus on jalo ja valitettavan aliarvostettu taito :)
Otsikko: Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
Kirjoitti: tn - 05.07.07 - klo:22.52
Ja jos vielä jäi kiinnostamaan, niin lisätietoa aiheesta:
http://fi.wikipedia.org/wiki/Ohjelmointi
http://fi.wikipedia.org/wiki/Ohjelmointikieli
http://fi.wikipedia.org/wiki/L%C3%A4hdekoodi
http://fi.wikipedia.org/wiki/Ohjelmointikielen_k%C3%A4%C3%A4nt%C3%A4j%C3%A4
Otsikko: Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
Kirjoitti: tetrafuran - 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.




Otsikko: Vs: Kääntäminen (Ei liity kieliin, puheeseen eikä sanoihin)
Kirjoitti: shadowi - 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ä).