Bernd
Pol

# &UNIX; arendustegevus

## Mõned märkused ajaloo kohta

Algusest peale on &UNIX; maailmas olnud kaks väga erinevat arendusparadigmat. Üks neist on süsteemi ja rakenduste programmeerimiskeelte paradigma, mille kohaselt lähtekood tõlgitakse masinkoodiks mingi tõlkeprogrammi abil, milleks on tavaliselt kompilaator või interpretaator. Selle näiteks on C programmeerimiskeel. &UNIX; oli esimene operatsioonisüsteemi kernel, mis kirjutati sellises kõrgkeeles, mitte aga otseselt masinale orienteeritud assembleris, nagu oli tavaks varem (õigupoolest leiutatigi C keel &UNIX; kerneli ja sellega seotud programmide kirjutamiseks DEC PDP-11 arvutis).

Teine paradigma on skriptikeeled. See arenes koos &UNIX; shelli leiutamisega, mis kujutas endast operatsioonisüsteemi kasutajaliidest — kuid samal ajal samuti programmeerimise kõrgkeel. Shelliskript luuakse mitme väikese programmi abil, &eg; `grep`, `sed` ja `find`. Iga selline programm on mõeldud väga konkreetseks ülesandeks. Kuid samal ajal saab kõiki selliseid programme siduda üksteisega väga lihtsa mehhanismiga, mida nimetatakse toruks. See suunab ühe programmi väljundi teise programmi sisendisse, mis seda siis töötlema asub. Nii tekib väga võimas ja väga paindlik programmeerimise tööriist.

Ajapikku arenesid mõlemad maailmad. Kui ka C on endiselt kasutusel süsteemi programmeerimiskeelena, siis 1990. aastatel astus tema asemele keerukamate rakenduste loomisel objektorienteeritud ja üldiste laiendustega rikastatud nõbu C++. Programmeerimiskeeli on veel terve hulk, isegi mitmed eakamad on säilitanud oma koha — &eg; FORTRAN77 ja Ada positsioonid arvudega tegelevates rakendustes pole kuigivõrd nõrgenenud.

## Tänapäevased skriptikeeled

Skriptikeelte vallas on valitsenud trend shellist, mis kannatab mitmete porditavusprobleemide käes, keelte suunas, mis koondavad kogu sagedamini vajamineva funktsionaalsuse standardteekidesse, suutes samal ajal endiselt vajaduse korral suhelda muu maailmaga torude kaudu.

Kõigi selliste skriptikeelte ühisjooneks on see, et nad on väga hästi porditavad nii &UNIX; variantide, Microsoft &Windows;, &MacOS; või isegi VMS süsteemi. Samuti on kõigil vabalt levitatavad teostused.

### &perl;

&perl; on saanud populaarseks tekstitöötlus- ja süsteemihalduskeelena. Veebi (WWW) algusajal olid &perl;is kirjutatud CGI skriptid väga levinud viis luua andmebaasidest dünaamilisi veebilehekülgi. Tänapäeval on selle üldjuhul asendanud veebiserveri &apache; plugin `mod_perl`. &perl;i tugevate külgede hulka kuulub sisseehitatud tugi regulaaravaldiste igakülgsele kasutamisele ning rikkalik vabalt levitatavate moodulite pagas.

Rohkem infot jagab veebilehekülg Comprehensive Perl Archive Network (CPAN).

### Python

&python; paistab silma elegantse klasside süsteemiga ning paindlikkusega, mis lubab väliseid teeke siduda moel, et need paistavad lausa &python;i enda standardsete klasside ja funktsioonidena. Erinevalt &perl;ist on &python;il väga selge ja kokkuvõtlik põimitud &API;, mistõttu see on lemmikkeel C ja C++ programmidele skriptimisvõimaluste lisamisel.

### PHP

&php; leiutati vahetult &HTML;-lehekülgedele põimitava keelena, mistõttu selle peamiseks kasutusalaks ongi veebi dünaamilise sisu edastamine.

## Kõrgtaseme skriptikeeled

Kõrgtaseme &UNIX; rakendustel puudub tihtipeale traditsiooniliste märkidele orienteeritud shelliskriptimehhanismide kiirus ja paindlikkus. Eriti kehtib see graafiliste kasutajaliideste (&GUI;) korral, &eg; &kde;.

Samasuguse mehhanismi pakkumiseks, mis töötaks kõrgtaseme rakenduste tasandil, on tehtud mitu katset, millest äramärkimist väärivad CORBA ja &kde; keskkonnas &DCOP;.

### CORBA protokoll

CORBA (Common Object Request Broker Architecture ehk üldine objektipäringu maakleri arhitektuur) kujutab endast katset panna arvuti rakendused üheskoos tööle üle võrgu. Selle töötas välja eraviisiline, tootjatest sõltumatu OMG (Object Management Group) standardikomitee.

CORBA-põhised programmid kasutavad kommunikatsiooniks IIOP protokolli. Seda aluseks võtvad teostused on saadaval paljudele operatsioonisüsteemidele, programmeerimiskeeltele ja võrkudele, mis muudab nad väga hästi porditavaks.

CORBA peamine miinus on päris suur aeglus. See võib olla talutav võrgus, kuid kujutab endast tõelist takistust rakendustevahelises suhtlemises võrguvälises keskkonnas, näiteks üksikarvutis töötava &kde; puhul.

### &DCOP;-liides

Teist arengusuunda &UNIX; laadis skriptimise vallas kujutab DCOP protokoll, mis loodi CORBA piirangutest ülesaamiseks &kde; rakenduste vahelise eduka suhtlemise tagamiseks.

&DCOP; tähendab Desktop Communication Protocol ehk töölaua kommunikatsiooniprotokoll ning on teostatud lihtsa IPC/RPC mehhanismina, mis toimib üle soklite. Sisuliselt pakub see umbes samasuguseid võimalusi nagu &UNIX; traditsiooniline torude mehhanism.

Traditsioonilised shelliskriptid tuginesid üsna vähestele programmidele, mis töötasid rangelt tekstipõhiselt. &DCOP; võimaldab ka keerukatel graafilistel programmidel üksteisega suhteliselt samamoodi suhelda. See lubab &eg; ühel &kde; programmil saata teateid teisele &kde; programmile või saada andmeid oma vajaduste rahuldamiseks.

Mõistagi ei ole ka see puudustest päris vaba. &DCOP;-i kasutamiseks peab programm sisaldama spetsiaalset &DCOP;-liidest. Mõnikord töötab ka &DCOP; suhtlemine aeglaselt (ehkki palju kiiremini kui CORBA). Kuid igatahes annab see suure osa &UNIX; skriptikeelte võimsusest ja paindlikkusest kõrgtaseme programmidele, mille aluseks on graafiline kasutajaliides.

Rohkem infot annavad dokument DCOP: Desktop COmmunications Protocol ja &kde; dcop-teegi &API; dokumentatsioon The &DCOP; Desktop Communication Protocol library.

## Ehitussüsteemid

Kui kõrvale jätta väga lihtsad juhtumid, sisaldab programmeerimisprojekt tavaliselt terve rea lähtekoodi ehitusplokke, mis hooldamise hõlbustamiseks on jagatud failidesse. Kõige selle töölepanemiseks tuleb kogu lähtekood tõlkida masinkeelde kujul, mis lubab operatsioonisüsteemil programmi laadida ja käivitada.

Selleks on vajalikud järgmised põhitööriistad

- tekstiredaktor lähtekoodifailide kirjutamiseks,

- tõlkeprogramm, tavaliselt kompilaator, mis tõlgib lähtekoodi objektifailideks,

- teegikorraldaja, mis kogub objektifailid teekidesse, et neid oleks hõlpus uuesti kasutada ilma neid uuesti kompileerimata,

- linkur, mis seob mitu objektifaili ja teeki üheks käivitatavaks failiks,

- ehitussüsteem, mis lubab kogu kraami hallata — ja mõistagi

- silur, mis leiab üles (loodetavasti) kõik programmis esinevad vead, ning võib-olla veel mõned diagnostikatööriistad, et kõik võimalikult sujuvalt töötaks.

Kui sul on suur projekt, mis koosneb sadadest lähtekoodifailidest, võib kompileerimine olla üsna vaevarikas protsess. Kindlasti ei soovi sa kõiki faile uuesti kompileerida iga kord, kui oled ainult mõnda neist muutnud. Selle asemel on palju mõttekam uuesti kompileerida ainult muudatustega failid. Kuid sageli pole väga lihtne aru saada, millised failid just vajavad ümberkompileerimist.

Kui &eg; muudad funktsiooni prototüüpi päisefailis, pead kompileerima kõik failid, mis kaasavad antud päisefaili. Kui sinu projektis on neid palju, võib sul kergesti mõnigi vahele jääda, kui teed seda käsitsi. Siin tuleb appi automatiseerimine.

### Ehitusprotsess

Tööriist, mis hoolitseb ümberkompileerimise eest, kannab nime `make`. See hoiab silma peal kogu tööl, kasutades selleks reegleid, mis kirjeldavad, mida võtta ette, kui mingi osa infost (tavaliselt lähtekoodi- või objektkoodifail) on muutunud. Kõik konkreetse projekti reeglid on salvestatud niinimetatud `Makefile`'i, mida `make` töötleb iga kord, kui soovid oma tööd uuendada.

Iga reegel koosneb mitmest ehitusplokist, nimelt

- sihtmärk, &ie; ehitatav fail

- valik sõltuvusi ehk nende failide nimed, millest sihtmärk sõltub (&eg; lähtekoodifaili nimi, kus siis sihtmärgiks saab ehitatava objektifaili nimi) ja

- käsud, mis tuleb käivitada sihtmärgi ehitamiseks (&ie; kompileerimiseks või linkimiseks teiste objektifailidega käivitatava programmifaili ehitamiseks).

Põhimõtteliselt loeb käsk `make` üksteise järel kõik reeglid, kontrollib iga faili antud sihtmärgi sõltuvuste nimekirja ja ehitab sihtmärgi uuesti, kui mõni neist failidest on muutunud, kasutades selleks reeglis toodud käske.

Ehitamisprotsessi juhtimiseks on mitmeid lisavõimalusi, mistõttu `Makefile` võib muutuda päris keeruliseks. Siinkohal ei jagu ruumi ega aega seda pikemalt tutvustada. Kuid me soovitame sul endal käsu `make` süntaks omandada. Isegi kui sa tavaliselt ei kasuta seda vahetult, tuleb ehitussüsteemi mõistmine kindlasti kasuks. Täpsemat infot annab GNU Make Manual.

&kdevelop;i spetsiifikast kõneleb lähemalt peatükk Ehitamine ja projektihaldus.

Uurida tasuks ka mitmeid õppematerjale, mille kohta vaata viiteid ehitamise ja projektihalduse peatükis.

## &GUI; arendus

Rakenduste arendajatele seab lisakoorma vajadus pakkuda mitte ainult programmi teeke ja head loogikat, vaid ka hõlpsasti kasutatava ja kohandatava kasutajaliidese, mis oleks korraga nii kasutaja huve arvestav kui ka funktsionaalne. Enamik arendajatest ei ole &GUI; väljatöötamise teemal peaaegu mingit väljaõpet saanud, mistõttu kasutajaliidesed on sageli mitte just kõige ilusamad ja paremad.

Aastatega on siiski tekkinud teatud üldlevinud kujunduspõhimõtted. Väga soovitatav on neid vähemalt põhijoontes järgida, sest nii omandab sinu rakenduse kasutajaliides sellise välimuse, mida kasutajad ei pea võõristama, vaid mis tundub neile algusest peale omane.

&kde; &GUI; arendamise jaoks on olemas ka stiilijuhend. Selle leiab &kde; arendajate veebileheküljelt: &kde; User Interface Guidelines.

Lühitutvustuse &GUI; üldiste kujunduspõhimõtete kohta leiab siit.

## Kontseptsioonide ja tööriistade lõimimine – IDE

Omad tööriistad on olemas peaaegu iga programmeerimise sammu jaoks — planeerimine, redigeerimine, failihaldus ja kompileerimine, silumine, dokumentatsioon ja nii edasi. Kui aga projekt suuremaks muutub, võib nende eraldi kasutamine olla üpris tülikas.

Programmi kujundamisel, kompileerimisel ja silumisel tuleb teha hulk üsna rutiinset tööd. Paljugi vaeva on võimalik säästa malle ja skripte kasutades. Veelgi parem on aga kõik vajalikud tööriistad koondada ühtekokku ühise &GUI; raamesse.

Näiteks — kas poleks mugav, kui silur saaks vajaliku lähtekoodifaili avada redaktoris ja oskaks viia kursori otse kohta, kust leiti viga?

Selliste vajaduste rahuldamiseks ongi mõeldud integreeritud arenduskeskkond (&IDE;). &IDE; lõimib ühte keskkonda kõik mallid, tööriistad ja skriptid, mida enamasti arendamise käigus vaja läheb.

&kde; jaoks on selline &IDE; &kdevelop;. See pakub tervet hulka tööriistu, mis hõlbustavad programmide arendamist ja hooldamist, võimaldades töötada ka mitmetes programmeerimiskeeltes ning erinevaid platvorme arvestades.

### &kdevelop; &kdevrelease; põhiomadused

- Haldab kõiki arendustööriistu, mida on vaja C++ programmeerimiseks (kompilaator, linkur, silur, ehitussüsteem).

- Pakub välja &appwizard;, millega saab luua terviklikke, kohe kasutamiseks valmis mallrakendusi.

- Võimaldab kasutajal valida põimitud redaktore, mille aluseks on &kde; programmeerija redaktor &kwrite;, Trolltechi QEditor või midagi muud.

- Pakub välja klasside generaatori uute klasside loomiseks ja lisamiseks töösolevasse projekti.

- Failihaldus lähtekoodifailide, päisefailide, dokumentatsiooni &etc; tarbeks, mida soovid kaasata projekti.

- Abistamine rakenduse käsiraamatu loomisel, mis on kirja pandud &kde; tööriistadega.

- Automaatne &HTML;-põhine &API; dokumentatsioon projekti klasside jaoks ristviidetega kasutatud teekidele.

- Internatsionaliseerimise tugi, mis lubab tõlkijatel lisada vähese vaevaga projekti oma sihtkeele (sealhulgas &kbabel;i toetus).

- Tugi projektide haldamiseks mõne versioonikontrollisüsteemiga (&eg; &CVS;), milleks on mõeldud enamikku vajadusi rahuldav kasutajaliides.

- Integreeritud siluriliides.

- Integreeritud shellikonsooli emulaator.

- Lähtekoodi süntaksi esiletõstmine.

- Automaatse koodilõpetuse võimalus klassi muutujate, klassi meetodite, funktsiooni argumentide ja palju muu korral.

- Mallid erinevate projektide loomiseks &juhtimiskeskus;e moodulid, &kicker;i (paneeli) apletid, KIO-moodulid, &konqueror;i pluginad ja töölauastiilid).

- Neli liikumisvaadet hõlpsaks lülitumiseks lähtekoodifailide, päisefailide, klasside ja dokumentatsiooni vahel, mis kõrvaldab vajaduse kasutada välist failihaldurit.

- Krosskompileerimise tugi ühes võimalusega määrata erinevaid kompilaatoreid, kompilaatorite lippe, sihtmärgi arhitektuuri &etc;

- Qt/Embedded projektide tugi (näiteks Zaurus ja iPAQ).

- Mis tahes programmi kaasamise võimalus, mida vajad arendamiseks, seda menüüsse Tööriistad lisades.