KATSAUS TCL/TK- KIELEEN

OSA:TCL (Tool Command Language)

Ohjelmistotekniikan seminaari 27.11.1996

Tekijä: Harri Holopainen


SISÄLLYSLUETTELO:


1. JOHDANTO

Tcl on lyhenne sanoista Tool Command Language ja vastaavasti Tk on kielen työkalu (Toolkit). Kieli syntyi Tri John Ousterhoutin myötävaikutuksella Kalifornian Yliopistossa Berkeleyssä. Tri Ousterhout sai idean Tcl:stä vieraillessaan sapattivapaalla DEC:n Western Research Laboratoryssä syksyllä 1987. Todellisen kehitystyön hän kuitenkin aloitti palatessaan Berkeleyhin keväällä 1988. Tällöin hän työskenteli professorina Department of Electrical Engineering and Computer Sciences- laitoksella Kalifornian Yliopistossa Berkeleyssä. Aiemmin Ousterhout oli mukana kehittelemässä mm. ohjelmia Sprite, Magic, Caesar ja Crystal. Vuonna 1993 silloin jo hyvin arvostettuna insinöörinä Ousterhout siirtyi Sun Microsystems Laboratoriesin palvelukseen edelleen kehittelemään Tcl/Tk:ta.

Lopullisen sykäyksen kielen kehittämiseen hän sai kyllästyttyään monien interaktiivisten sovellusten huonoista ohjelmointikielistä, jotka olivat lisäksi lähes aina erilaisia. Tarkoituksena oli kehittää kieli, joka toimii kaikissa sovelluksissa ja jota voisi käyttää myös myöhemmin tulevissa ohjelmissa.

Kesään 1988 mennessä ensimmäinen versio oli jo käytössä joissakin yleisissä sovellusohjelmissa. Ensimmäinen julkinen Tcl:n versio julkistettiin vuonna 1989. Tk:n toteuttaminen alkoi samana vuonna ja ensimmäinen versio julkistettiin vuonna 1991. Uusin versio Tcl:stä on tällähetkellä versio 7.6 ja Tk:sta vastaavasti 4.2. Molemmat versiot ovat tällä hetkellä vapaasti saatavissa ja versiot tulivat yleiseen jakeluun 16.10.1996 eikä niissä vielä ole havaittu toiminnallisia virheitä. Osoite kielen kehittäjän kotisivulle on

1.1 Mitä ovat Tcl, Tk ja laajennettu Tcl?

Tcl:n nimi on siis lyhenne sanoista "Tool Command Language" eli likimain suomennettuna "työkalukomentokieli". Kielen kehittäjän ftp-osoite Tcl-lähdekoodille on

Kieli kehitettiin alusta alkaen sellaiseksi, että sitä voidaan, ja tuleekin, käyttää yhdessä muiden ohjelmointikielten kanssa, kuten C:n tai C++:n. Tarkoituksena on, että Tcl huolehtii yksinkertaisista funktioista, jolloin helposti ja lyhyesti kirjoitettavana se nopeuttaa työskentelyä huomattavasti. Monimutkaisissa funktioissa sen sijaan käytetään C:tä tai C++:aa, koska niillä funktioiden toteuttaminen on huomattavasti järkevämpää niiden ollessa rakenteeltaan parempia näihin tehtäviin. Tämä käytäntö on monille tuttu yhdistelmästä Visual Basic ja C/C++. Visual Basiciin on saatavissa tuhansia erilaisia Visual Basic-laajennuksia (VBX), jotka tuottavat erilaisia käyttöliittymän kontrollereita. Nämä kontrollerit on kirjoitettu C/C++-kielellä ja ne voidaan helposti "sitoa" yhteen käytettäväksi Visual Basicin avulla. Tcl/Tk ja Java tuottavat samanlaisen symbioosin siten, että Java on erinomainen pienten osasten luomisessa ja Tcl/Tk on vastaavasti erinomainen "sitomaan" nämä pienet osaset toimiviksi ohjelmiksi. Esimerkiksi Java ja Tcl sopivat hyvin käytettäväksi yhdessä, jos tehtävänä on toteuttaa kolmiulotteista visualisointia graafisissa käyttöliittymissä (lyhyesti GUI:ssa) sisältäen menuja, näppäimiä, dialogeja jne. Tällöin kannattaa laskeminen toteuttaa Javalla ja käyttöliittymän osat Tcl/Tk:lla. Lisäksi kannattaa kirjoittaa Java-osat käyttäen Tcl-käskyjä, jolloin käyttäjä voi skriptata eli mukauttaa pienillä muutoksilla molempia osia Tcl-kielellä.

1.2 Tcl-kieli koostuu itse kielestä ja kirjastosta

Ensinnäkin Tcl luo mahdolliseksi standardin syntaksin. Kun käyttäjä kerran tietää Tcl:n hän voi helposti käsitellä käskyjä kaikissa Tcl-pohjaisissa sovelluksissa. Nykyisin näitä mahdollisuuksia eivät edes rajoita laitteistot, vaan samat käskyt ja ohjelmointitekniikka toimivat sekä PC:ssä, MACissä että UNIX-järjestelmissä. Näin päästään siis eroon ennen niin paljon päänvaivaa tuottaneista ongelmista eri järjestelmien välillä. Tcl:llä tehdyt ohjelmat toimivat täten kaikissa edellä mainituissa järjestelmissä.

Toiseksi Tcl on ohjelmoitavissa. Tcl-sovelluksen toteuttamiseen tarvitaan vain muutama sovelluskohtainen käsky. Tcl:n avulla voidaan toteuttaa monia apuohjelman käskyjä ja lisäksi se antaa mahdollisuuden ohjelmoida monimutkaisia käskyjonoja. Käyttämällä Tcl:ää sovelluksiin saadaan niihin sellaisia ominaisuuksia, joita ei tarvitse uudelleen toteuttaa perus-sovelluksessa. Esimerkiksi jos sinulla on joku hankalasti toteutettava vakio toimenpide (lue vaatii monia eri toimintoja) eri ohjelmissa ja mahdollisesti vielä eri käyttöjärjestelmissä. Tcl:llä on mahdollisuus tehdä esimerkiksi oma näppäin, jolla voit tehdä kaikissa sovelluksissa jonkun tietyn toimintojonon. Tämä mahdollistaa käyttäjälle usean eri sovelluksen käytön luopumatta tutuista ja paljon käytetyistä käskyistä. Kuitenkin käyttäjällä on aina käytössä sovelluksen omat erikoiskäskyt.

Kolmanneksi Tcl:ään laajennuksilla saadaan luotua mekanismejä, joilla voidaan kommunikoida sovellusten välillä. Yleinen Tcl-kielen kehikko mahdollistaa ja tekee sovellusten kommunikoinnin helpommaksi. Eniten käytetty laajennus Tcl:ssä on Tk (Toolkit), jonka avulla saadaan ohjelmoitua ja käsiteltyä graafisia käyttöliittymiä todella helposti.

On huomioitava, että Tcl suunniteltiin siten, että ohjelmoijan tulisi käyttää kahta tai useampaa kieltä suunnitellessaan ja tehdessään suuria ohjelmistoja. Yhtä käyttämään monimutkaisia laajoja datatiedostoja tai ylläpitämään esitystekniikkaa ja toista, esimerkiksi Tcl:ää, kirjoittamaan pienehköjä funktioita, joiden avulla sidotaan yhteen muut ohjelman palaset. Ohjelmankirjoittajalle Tcl-kieltä käytettäessä annetaan mahdollisuus helppoon kielen oppimiseen, ohjelmoinnin helppouteen ja variaatioiden tekoon. Tämä perustuu siihen, että kielelle on tärkeää juuri edellämainitut seikat, eikä monimutkaiset algoritmit ja muut vaikeaselkoiset ominaisuudet. Lisäksi kieli suunniteltiin sellaiseksi, että on helppo pudottautua peruskielelle esim. C:lle tai C++:lle, jos antamasi tehtävät on järkevämpiä toteuttaa alemmalla tasolla (eli C/C++). Tällä tavoin meneteltäessä peruskuoren toimivuus voi pysyä pienenä eli ohjelma ei välttämättä toimi, tällöin tarvitsee ottaa mukaan vain tarvittavat tai halutut osaset.

Yleensä lähes aina käytettäessä Tcl:ää käytetään myös Tk:ta, koska yhdessä nämä kaksi muodostavat ohjelmointisysteemin erilaisten graafisten käyttöliittymien käyttöön ja ohjelmointiin. Tk on "työkalu" esim. X Window-ympäristöön ja se lisää Tcl-kuoreen ominaisuuksia käyttöliittymiä varten (esim Motifissa Tcl:ssä käskyjen avulla voidaan muokata ulkoasua C-kielen sijaan).

Kuten jo edellä on tullut ilmi, Tcl on siis korkeatasoinen tulkkauskieli. Kielellä on yksinkertainen syntaksi ja sillä on lähes olematon struktuuri. Nämä seikat tekevät kielestä hyvän skriptaukseen. Skriptauksella tarkoitetaan pienillä muutoksilla ja lisäyksillä joko uusien toimintojen luomista tai vanhojen mukauttamista mieleisiksi. Kuitenkin, koska kieli on tulkkaava, niin se on suhteellisen (joidenkin mielestä todella) hidas suorittamaan suuria tehtäviä, jotka vaativat suurta vuorovaikutteista laskemista. Siksi Tcl tuleekin ajatella UNIX-kuoren tapaiseksi, johon se alunperin kehitettiin. Se on kuitenkin sisäistettävissä eri sovelluksiin ja siirrettävissä ja sitä voidaan käyttää Internet-skriptaukseen.

2. Tcl:n ja Tk:n käytön edut

Yhdessä käytettynä nämä kaksi "kieltä" antavat neljä etua, jotka kannattaa huomioida valittaessa ohjelmointiympäristöä ja ohjelmointikieltä. Ensiksikin Tcl mahdollistaa helpon ohjelmoitavuuden mihin tahansa sovellukseen. Riittää vain sisällyttää muutama Tcl-käsky perustoimintoja varten kyseiseen sovellutukseen. Tämän jälkeen sovellutus voidaan linkittää Tcl-tulkkiin, jolloin saadaan tehokas täysin toimiva ohjelmointikieli. Saatu kieli sisältää molempien käytettyjen kielien käskyt eli alemmalla tasolla käytetyn sovelluksen käskyt ja siihen lisättynä Tcl:n mahdollistamat käskyt. Jälkimmäistä sanotaan Tcl-kuoreksi.

Kuva 1. Kaavakuva sovelluksen ja Tcl:n yhteydestä.

Luotaessa uusi Tcl:ää hyödyntävä sovellus, sovelluskehittäjä tekee C-kielistä koodia, joka on erityisesti sovellusta palvelevaa. Lisäksi hän kirjoittaa hieman C-koodia, jolla luodaan ja lisätään muutama uusi Tcl-käsky. Tcl-kirjasto tuottaa tällä tavoin kaiken tarvittavan ja näin saadaan täysin ohjelmoitavissa oleva käskykieli. Sovellusta voidaan tämän jälkeen uudelleenmuokata ja laajentaa kirjoittamalla Tcl-skriptejä.

Esimerkiksi sähköisiä ilmoitustauluja lukeva sovellus saattaa sisältää C-kielen koodia käyttäen apunaan Tcl-käskyä, joka tiedustelee uusia sähköposteja tietystä kentästä. Vastaavasti toisen Tcl-käskyn avulla vastaanotetaan uudet sähköpostit. Koska nämä käskyt ovat jo olemassa, Tcl-käskyt voidaan muuttaa esimerkiksi kiertämään useampia ilmoitustauluja ja näyttämään uudet sähköpostit yksitellen. Toisena mahdollisuutena voidaan pitää yllä rekisteriä siitä, mitkä sähköpostit on luettu ja mitkä ei. Voidaan etsiä eri ilmoitustauluilta tietyn aiheen omaavia sähköposteja jne. Käytetyn sovelluksen ei tarvitse sisältää näitä "hienoja" ominaisuuksia omissa C-kielisissä funktioissa, vaan ne voidaan kaikki kirjoittaa Tcl:ää käyttäen. Näitä ominaisuuksia voidaan sitten myöhemmin helposti muokata tai lisätä tarpeen mukaan.

Toisena etuna voidaan pitää Tcl:n ja Tk:n nopeaa kehitettävyyttä. Esimerkiksi on mahdollista kirjoittaa useita ikkunoita käyttäviä sovelluksia Tcl-kielellä ilman pätkääkään C-kieltä käyttäen "ikkunointikuorta" , jota kutsutaan nimellä wish. Tämä mahdollistaa ohjelmoinnin paljon korkeammalla tasolla kuin käyttäen C:tä tai C++:aa. Näin monet C-ohjelmoijan tarvitsemat yksityiskohdat osoittamisesta jne. ovat piilossa. Verrattaessa pelkästään C-kielellä ohjelmoitaviin työkaluihin, kuten Xt/Motif, on Tcl/Tk paljon helpompaa oppia ja lisäksi on vähemmän koodia kirjoitettavana. Esimerkkinä eräs ohjelmoija käytti puoli vuotta tehdäkseen C-kielisen ohjelman, jossa oli 15000 riviä koodia. Myöhemmin hän teki saman ohjelman parissa viikossa Tcl-kielen avulla tehden vain 750 riviä koodia. Toisena syynä kielen nopealle kehitettävyydelle voidaan pitää sitä, että kieli (myös Tk:n) on ns. tulkkaava kieli. Toisin sanoen, käytettäessä esim. wishiä voidaan luoda ja hävittää uusia koodinpätkiä välittömästi, jolloin ohjelmaa ei tarvitse kääntää uudelleen eikä sen ajoa aloittaa uudelleen. Tämä mahdollistaa ohjelmoijalle uusien ideoiden helpon testauksen ja muokkaamisen. Tästä syystä funktioiden luominen on hitaampaa kuin esimerkiksi C-kielessä, mutta nykyisillä tietokoneilla tämä on jo suhteellisen nopeaa.

Kolmantena etuna voidaan pitää Tcl:n erinomaista ominaisuutta toimia "liimakielenä". Koska kieli voidaan sisällyttää muihin ohjelmiin, sitä voidaan käyttää hyvin monissa ohjelmissa erittäin monenlaisissa tehtävissä. Tämä mahdollistaa myös sen, että tällöin voidaan käyttää vaikka kaikkia ohjelmia, johon Tcl on sisällytetty. Esimerkiksi mikä tahansa ikkunointia käyttävä sovellus, joka perustuu Tk:hon, voi lähettää Tcl-koodia mihin tahansa Tk-sovellukseen. Tämä mahdollistaa ja parantaa huomattavasti kaikkien multimediasovellutusten muokkaamista. Hyvänä esimerkkinaä tästä on peleissä vaadittava grafiikka, joka näyttää esim. pienessä ikkunassa taustanäkymän lentosimulaattoreissa.

Neljäntenä ja ehkä kaikkein parhaana etuna voidaan pitää kielen käyttäjäystävällisyyttä. Kun käyttäjä on opetellut Tcl:n ja Tk:n, niin sen jälkeen hän voi kirjoittaa koodia lähes mihin tahansa varsinaiseen Tcl/Tk:n sisältävään sovellukseen. Käyttäjän tarvitsee opetella ainoastaan muutamia erityiskäskyjä, jotka kuuluvat sovellukseen. Tämä antaa mahdollisuuden käyttäjille muuttaa ohjelmia mieleisikseen.

Tri John Ousterhoutilta kysyttiin 27. kesäkuuta 1996 tehdyssä haastattelussa erinäisiä asoita kielestä. Liitteessä 1 on esitetty käyty haastattelu, mistä ilmenee mm. kielen opettelun antamat hyödyt ja miten on päästy näinkin pitkälle kuin nyt. Lisäksi siinä kerrotaan kielen tämänhetkisestä tilanteesta ja tulevaisuuden suunnitelmia.

3. Tcl-kielen syntaksi

Seuraavassa on esitetty muutamia perusominaisuuksia kielestä. Käskyjen rakenne ja niiden tekeminen. Muuttujien määrittäminen ja eräitä hyödyllisiä ominaisuuksia kieltä käytettäessä. Syvempää informaatiota janoaville suosittelen tutustumista luvun lopussa esittämiini lähteisiin.

3.1 Perusteet ja yleinen ulkoasu

Kielen syntaksi perustuu muutamiin sääntöihin, joiden mukaan käskyt jäsennetään. Syntaksi on sama kaikille käskyille. Tämän lisäksi ohjelmoijan tulisi tietää kielen funktiokohtaiset käskyt, joita käytetään funktioiden muodostamiseen. Tcl sisältää noin 60 sisäänrakennettua käskyä. Vastaavasti käytettäessä lisänä Tk:ta käskyjen määrä lisääntyy noin sadalla. Tämän lisäksi jokainen sovellus, joka perustuu Tcl/Tk:hon lisää muutaman oman sovelluskohtaisen käskyn.

Tcl-skripti on lyhyt ohjelma, joka on kirjoitettu skriptaavalla kielellä. Tällä tarkoitetaan yksinkertaista tulkkauskieltä, joka on suunniteltu nopeaan ohjelman kehitykseen. Skripti koostuu yhdestä tai useammasta käskystä, jotka on erotettu toisistaan joko puolipisteellä tai rivinvaihdolla. Kukin käsky koostuu taasen yhdestä tai useammasta sanasta, joista ensimmäinen on käskyn nimi ja seuraavat sanat ovat argumenttejä tälle käskylle. Sanat erotetaan toisistaan joko välilyönneillä tai tabulaatorilla.

Otetaan eräs eniten käytetyistä esimerkeista uuden ohjelman esittämiseen. Perinteisen "Hello World"-ohjelman eräs esimerkkikoodi voidaan kirjoittaa Tcl:llä seuraavasti:

Tämä ohjelma käyttää vain ensimmäisellä rivillä varsinaista Tcl-koodia. Ohjelma toimisi sellaisenaan ilman ensimmäistä riviä esim. wishissä, joka on Tk:n eräs ohjelmointi-ikkuna. Jos funktiosta halutaan ajettava tiedosto, niin lisätään kuoreen oikeudet tiedoston suorittamiseen käskyllä

Tällöin saadaan funktio herätettyä kirjoittamalla vain komento hello kuoressa. Komennolla systeemi herättää ensimmäisellä rivillä wishin ja lähettää lopun skriptin käännettäväksi sille. Wish esittää ikkunassa tekstin Hello world! ja odottaa käyttäjän reaktiota siihen. Tässä tapauksessa ainut mitä käyttäjä voi tehdä, on painaa hiirellä kyseisen tekstin sisältävää nappia. Tästä johtuen, useimmiten käytännössä ohjelmoidaan suoraan Tk:ta vaadittaessa ohjelmalta graafisia ominaisuuksia.

Haluttaessa testata edellistä esimerkkiä voidaan esimerkiksi kirjoittaa seuraava Tcl-käsky wishissä

Tcl käsittelee riviä skriptinä ja ottaa tiedoston nimen argumentiksi. Tämä luo käyttäjälle saman käyttöliittymän kuin, jos hän olisi suoraan kutsunut hello-ohjelmaa kuoresta. Nyt käyttäjän on mahdollista kirjoittaa suoraan koodia kyseiseen skriptiin.

Kuvassa 2 on esitetty kaavio siitä, miten Tcl määrittelee käskyt.

Kuva 2. Kaavio käskyjen toteutuksesta.

3.2 Muuttujat ja tiedoston hallinta

Kuten monissa muissa kielissä (esim C++), myös Tcl:ssä käsitellään muuttujia hyvin samoin tavoin. Esimerkiksi seuraavassa tapauksessa voidaan kirjoittaa PC:n MS-DOS-ikkunassa joko tclsh tai wish, jolloin saadaan näytölle kyseinen ohjelmointi-ikkuna. Kirjoitettaessa ikkunaan

käsky set asettaa arvon 44 muuttujaan a ja palauttaa muuttujan arvon. Toisen rivin käskyä expr seuraa $-merkki, joka suorittaa muuttujaan sijoituksen. Tcl-kääntäjä sijoittaa dollarimerkin jälkeisen muuttujan arvon merkkien paikalle. Joten todellinen vastaanotettu argumentti on 44*4. Muuttujia ei tarvitse alustaa, kuten esim. C++:ssa. Tcl varastoi muuttujat automaattisesti jonoihin sallitun pituuden puitteissa. Arvot sijoitetaan automaattisesti niitä osoitettaessa. Tietenkin tässä esimerkissä tulee virheilmoitus, jos a:n arvona ei ole joko kokonaisluku tai reaaliluku.

Seuraavassa on esitetty eräitä pääpiirteitä kielen syntaksista.

Kuten jo edellä mainittiin, kielessä käskyt cmd muodostuvat sanoista, jotka erotellaan välilyönneillä. Esimerkissä

ensimmäinen sana on käsky ja loput sanat argumenttejä arg sille.

Dollarimerkki ($) esittää muuttujan arvoa. Esimerkissä

muuttujan nimi on foo.

Hakasulut suorittaa sisäkkäisen käskyn. Esimerkiksi, jos haluat osoittaa jonkun käskyn tuloksen argumenttinä toiselle käskylle, silloin käytetään tätä syntaksia. Esimerkissä

sisäkkäinen käsky on clock seconds, joka on silloinen aika sekunteina.

Lainausmerkit ryhmittävät sanoja yhdeksi argumentiksi jollekin käskylle:

Dollarimerkit ja hakasulut esitetään lainausmerkkien sisällä.

Aaltosulut myös yhdistävät sanoja yhdeksi argumentiksi. Esimerkissä

kuitenkin aaltosuluissa olevat kommentit jäävät kääntäjältä kääntämättä.

Takakenoviivaa (\) käytetään merkitsemään erikoismerkkejä. Esimerkiksi

luo uuden rivin. Takakenoviivaa käytetään myös poistamaan merkitys dollarimerkiltä, lainausmerkeiltä sekä haka- että aaltosuluilta. Eli ne tulkitaan normaaleiksi merkeiksi.

Seuraavassa esimerkissä on esitetty kielen syntaksia käytännössä. Kirjoitettaessa

ei välttämättä tarvita seconds-muuttujaa. Näin edellinen esimerkki voidaan kirjoittaa yhdeksi käskyksi muotoon

Tcl-kielessä on seuraavia erittäin hyödyllisiä ominaisuuksia:

Tcl käyttää operaattoreina lähes täydellisesti samoja operaattoreita kuin ANSI C. Ainoastaan /- ja %-operaattoreilla on hienostuneempi ominaisuus Tcl:ssä. Tcl:ssä jakojäännös on aina positiivinen ja sen absoluuttinen arvo on vähemmän kuin jakajan absoluuttinen arvo. Seuraavassa taulukossa on esitetty lyhyesti sallitut operaattorit Tcl-käskyissä.

-a

a:n negaatio. int, oat

!a

Looginen eli: 1, jos a on nolla, 0 muuten. int, oat

~a

a:n komplementti. int

a*b

Kerrotaan a ja b. int,oat

a/b

Jaetaan a b:llä. int, oat

a%b

Jakojäänös, kun a jaetaan b:llä. int

a+b

Lisätään a ja b. int, oat

a-b

Vähennetään b a:sta. int, oat

a<<b

Siirtymä vasemmalle b bittiä. int

a>>b

Aritmeettinen siirtymä a:sta oikealle b bittiä. int

a<b

1 jos a vähemmän kuin b, 0 muuten. int, oat, string

a>b

1 jos a enemmän kuin b, o muuten. int, oat, string

a<=b

1 jos a vähemmän tai yhtäsuuri kuin b, 0 muuten. int, oat, string

a>=b

1 jos a enemmän tai yhtäsuuri kuin b, 0 muuten. int, oat, string

a==b

1 jos a yhtäsuuri kuin b, 0 muuten. int, oat, string

a!=b

1 jos a erisuuri kuin b, 0 muuten . int, oat, string

a&b

Joko-tai AND a:lle ja b:lle. int

a^b

Joko-tai yksinomainen OR a:lle ja b:lle. int

a|b

Joko-tai OR a:lle ja b:lle. int

a&&b

Looginen AND: 1 jos a ja b erisuuria kuin nolla , 0 muuten. int, oat

a||b

Looginen OR: 1 jo joko a tai b erisuuri kuin nolla, 0 muuten. int, oat

a?b:c

Valinta: jos a erisuuri kuin nolla niin b, muuten c. a:int, oat

Taulukko 1. Osa yleisimmistä operaattoreista

Matemaattiset funktiot Tcl-käskyissä käyttäytyvät useimmiten samoin kuin ANSI C:n kirjastoproseduurissa käytettäessä samoja nimiä. Muista käskyistä pääsee parhaiten selville joko vain kokeilemalla tuntemiansa käskyjä ja tutkimalla mitä ne tekee. Jos tulee ongelmia ohjelmien toiminnan kanssa, niin on aina mahdollista hakea vastauksia ongelmiin internetistä, jossa on useimmin kysytyistä ongelmista kysymyksiä ja vastauksia osoitteessa

Tarkempaa informaatiota janoaville kielistä on olemassa manuaalit internetissä ja ne löytyvät ainakin osoitteesta.

Toisena mahdollisuutena on tutustua Tcl:n WWW infoon,

joka löytyy myös peilattuna Suomeen osoitteesta

Lisäksi kaksi hyvää aloituspaikkaa lisäinformaatiota haluttaessa ovat:

4. Tuotekehittelyn tuloksia

Kieleen on kehitetty useita eri lisäsovelluksia, joiden avulla kieli on saavuttanut yhä enemmän jalansijaa varsinkin Internetin välityksellä tapahtuvassa tiedonsiirrossa ja ohjelmoinnissa. Viime aikoina on kehitetty Internet-selaimiin liitettäviä Plug-inejä, joiden avulla saadaan paremmin erilaisia uusia sovelluksia käyttöön suoraan selaimelta. Kaikesta tästä on kuitenkin herännyt turvallisuuskysymys pinnalle, kun haetaan käyttöön kaikenlaisia ohjelmia ja koodeja tuntemattomista lähteistä. Tähän on ratkaisuna kehitetty Safe-Tcl.

4.1 Safe-Tcl turvallisuusmalli kielelle

Nathanial Borenstein ja Marshal Rose kehittivät vuonna 1993 Safe-Tcl:n, joka mahdollisti turvallisen ohjelmien välityksen sähköpostin välityksellä. Heidän työnsä adoptoitiin Tcl-ryhmälle ja yleistettiin sellaiseen muotoon, että sen saa uusimmissa Tcl/Tk-versioissa. He kehittivät myös ensimmäisen virtuaalisen Internetin maksujärjestelmän, joka käyttää Tcl:ää ja Safe-Tcl:ää. Tämä mahdollistaa turvallisen ja suojatun ohjelmien ajon, vaikka osa mahdollisesti viallisesta tai viruksen sisältävästä koodista olisi ladattu Internetin kautta. Safe-Tcl käyttää "täytettyä kuorta", johon epäluotettavat skriptit uudelleensijoitetaan. Tässä kuoressa tarkkaillaan ja rajoitetaan koodin toimintamahdollisuuksia, kunnes ohjelmakoodi todetaan turvalliseksi. Tällaista samanlaista mekanismia on käytetty jo lähes 30 vuotta operoivien systeemien tarkkailussa ytimen avulla.

Kuinka sitten Safe-Tcl toimii? Joissakin sovelluksissa, kuten Internet selaimissa, voi olla useampi kuin yksi Tcl-kääntäjä ja jokaisella kääntäjällä on omat käskykokoelmat ja muuttujat. Käytettävä skripti voi käyttää vain sen kääntäjän muuttujia ja käskyjä, jossa se ajetaan. Jos esimerkiksi Internetin kautta on haettu Tcl-kääntäjää käyttävä skripti, luo sovellus uuden erillisen kääntäjän ohjelman suorittamista varten. Tällaista kutsutaan "orjakääntäjäksi" (slave interpreter) tai "täytetyksi kuoreksi" (padded cell). Tällainen orjakääntäjä on apuna kaikissa tilanteissa, joissa luetaan tai kirjoitetaan tietoa muistiin. Isäntäkääntäjä Tcl:ssä toimii kuten “ydintila" (kernel-space) eli sillä on täysi valta tehdä mitä vain, joten ajettavan koodin täytyy olla luotettavaa.

Safe-Tcl:ssä orjakääntäjä tekee "turvasoittoja" isännälle erittäin kontrolloidusti. Nämä soitot muistuttavat ytimen vastaavia soittoja, jolloin ne mahdollistavat epäluotettavan koodin kommunikoinnin kontrolloidusti orjakääntäjän ulkopuolelle. Isäntäkääntäjä kontrolloi täydellisesti orjan soittojen määrää ja rajoituksia omien tietojensa mukaan skriptistä. Esimerkiksi, jos isäntä tietää koodin olevan luotettavasta lähteestä, se voi antaa täydellisen pääsyn tiedostoihin.

4.2 Tcl/Tk-lisäliitäntä WWW-selaimiin

Tämä lisäliitäntä (plug-in) antaa edellytykset luoda WWW-sivuja, jotka sisältävät sovelluksia perustuen helppokäyttöiseen skriptauskieleen ja vankkaan käyttöliittymän toteutustyökaluun eli Toolkittiin. Tällaiset ohjelmat voidaan suorittaa kaikissa yleisimmissä käyttöympäristöissä. Niitä voidaan katsella Netscape Navigatorilla ja muilla selaimilla, jotka tukevat Plug-in-mekanismeja. Tcl- plug-iniä tukee Solaris 2.X, Macintosh, Windows NT ja Windows 95.

4.3 Muita tutkimusprojekteja

Thread-safe Tcl:n on kehittänyt Richard Hipp ja tehnyt sen saatavaksi CTI-limitedistä projektin sponsorilta.

TeamRooms-projekti mahdollistaa monen käyttäjän etäkäyttöisen työyhteisöympäristön. Se on rakennettu GroupKittiin Tcl/Tk-pakettiin, joka tuottaa hajautettuja jaettavia objekteja. Projektia johtaa Mark Roseman.

The Merck Research Laboratoriesissa tekivät tutkijat NMRView-ohjelman käsittelemään, analysoimaan ja visualisoimaan dataa Nuclear Magnetic Resonance-spektrometristä. He käyttävät ohjelmaa kolmiulotteisten proteiinien mallintamiseen. Nyttemmin heidän kehittämänsä ohjelma on levinnyt maailmanlaajuiseksi NMR-laboratorioihin. Heidän mielestään Tcl/Tk:n käyttö heidän ohjelmassa tekee siitä juuri niin suositun ja hyvän.

TACOMA-projekti käyttää Tcl:ää ja Tk:ta agentteina eli halutun informaation etsijöinä hajautetuissa järjestelmissä. Heidän StormCast-sovellus ennustaa säätä käyttäen Tcl-agentteja aistimaan oloja ympäri USA:ta.

Motorolalla on käytössä suuressa puolijohteita valmistavassa tehtaassa perusautomaatiosysteeminä SMART (Semiconductor Manufacturing Automation Real-time Toolkit), joka on kirjoitettu lähes kokonaan Tcl/Tk:lla. Systeemi kontrolloi puolijohteiden valmistusta. Ohjelmiston kokeilukäyttö osoittautui menestykseksi ja muutkin Motorolan tehtaat ovat kiinnostuneet ohjelmistosta. SMART-ohjelmisto käsittelee tuotevalvontaa, paljon reaaliaikaisen tietokannan seurantaa. Ohjelmisto rakennettiin liian kalliin ja vaikeasti kehiteltävän ohjelman tilalle.

5. Käskyjen ja skriptin luonti

Tcl-kirjasto koostuu C-kielisistä rakenteista, joihin lähes aina osoitetaan pointterilla Tcl_Interp. Tähän pointteriin Tcl-kääntäjä muodostaa kysytyn käskyn, joka on siis kirjoitettu C-kielellä. Näin toimitaan siis silloin, kun käskyä ei ole olemassa valmiina kielessä eli lisättäessä uusi käsky. Useimmat Tcl-sovellukset käyttävät yhtä kääntäjää, mutta ohjelman ajon nopeuttamiseksi on mahdollista käyttää useampaa itsenäistä kääntäjää, jolloin ohjelman suoritus nopeutuu olennaisesti.

Seuraavassa esimerkissä on esitetty tapaus, jossa luodaan ja käytetään kääntäjää. Se on yksinkertainen toiminnaltaan, mutta monimutkainen Tcl-sovellus luoden Tcl-skriptin tiedostosta tulostaen tuloksen tai virheilmoituksen

Jos Tcl on asennettu oikein,voit kopioida C-koodin tiedostoon nimeltä simple.c Sieltä se voidaan kääntää kuoren käskyllä

Käännöksen jälkeen voit luoda skriptitiedoston testauksen kirjoittamalla test.tcl. Ohjelma toimii, kun kirjoitat kuoreen käskyn

5.1 Uuden Tcl käskyn tekeminen

Seuraavassa on käskyproseduuri uudelle käskylle nimeltään eq, joka vertaa sen kahden argumentin yhdenmukaisuutta:

EqCmd tarkastaa aluksi, että sitä kutsuttiin tarkalleen kahdella argumentilla (kolme sanaa sisältäen käskyn nimen). Virhetapauksessa se sijoittaa virheilmoituksen interp->result:iin ja palauttaa arvon TCL_ERROR. Muuten se vertaa kahta argumenttijonoa sijoittaen jonon interp->result:iin tutkiakseen, onko jonot yhteneväisiä. Jos jonot ovat yhtenevät, niin se palauttaa arvon TCL_OK ilmaistakseen, että käsky suoritettiin normalisti.

Muita vaihtoehtoja paluutunnuksille ovat TCL_BREAK (jos break-käsky herätettiin), TCL_CONTINUE ja TCL_RETURN.




LÄHTEET:
  • 1. John K. Ousterhout: Tcl and the Tk Toolkit, Addison-Wesley 1993, ISBN 0-201-63337-X.
  • 2. John K. Ousterhoutin kotisivu WWW:ssä
  • http://www.sunlabs.com/~ouster/
  • 3. Brent Welch: Practical Programming in Tcl and Tk , Prentice Hall 1995, ISBN 0-13-182007-9
  • 4. WWW-sivuja useista eri osoitteista. Seuraavassa tärkeimmät, eli tekstissä käytetyimmät
  • http://www.sco.com/Technology/tcl/Tcl.html
  • http://web.cs.ualberta.ca/~wade/HyperTcl/
  • http://www.sunlabs.com/research/tcl/
  • http://www.lut.fi/man/tcl/Tcl.html
  • 5. Tcl/Tk-manuaali löytyy myös osoitteesta
  • http://tardis.jyu.fi/tcltk-man-html/contents.html




    LIITTEET:
    Liite 1
    Liite 2