Tcl
Tcl | |
---|---|
Skriptikielen kanssa tavukooditulkin | |
Perustieto | |
Paradigmat : | välttämätön , toimiva , objektiivinen |
Julkaisuvuosi: | 1988 |
Suunnittelija: | John Ousterhout |
Kehittäjä: | John Ousterhout |
Nykyinen versio | 8.6.9 (16. marraskuuta 2018) |
Kirjoittaminen : | heikko , dynaaminen |
Vaikuttanut: | Lisp , Unix Shell , C. |
Käyttöjärjestelmä : | Windows , Linux , macOS , Mac OS Classic , Solaris , muut Unix -versiot ja kloonit |
Lisenssi : | BSD |
Tcl -kehittäjäsivusto |
TCL (keskustelu Englanti kutittaa tai pikanäppäimenä Tool komentokieli ) on avoimen lähdekoodin - skriptikieli .
TCL kehitettiin alun perin vuonna 1988 John Ousterhout on University of California, Berkeley, koska makrokielellä kokeellisen CAD -järjestelmä. Käsite käyttää Tcl -tulkkia kirjastona z. B. integroida C -ohjelma, joka on edelleen mahdollista.
Tcl: n iskulauseet ovat: "radikaalisti yksinkertainen" , joka liittyy erityisesti kielen syntaksiin ja "kaikki on merkkijono", "kaikki on teksti", joka liittyy komentojen ja tietojen käsittelyyn Tcl -viitteissä.
Tcl: n ja graafisen käyttöliittymän työkalusarjan Tk yhteistä yhdistelmää kutsutaan nimellä Tcl / Tk .
Peruskonseptit
Yksinkertainen syntaksi ja kielioppi
Tcl -syntaksi seuraa puolalaista merkintää . Se jättää varatut sanat pois , mutta antaa joillekin hahmoille kiinteän merkityksen:
- kiharat hakaset lohkojen määrittämiseksi,
- hakasulkeet lausekkeiden arvioimiseksi,
- lainausmerkit merkkijonojen rajaamiseksi,
- kenoviiva ,
- kaksoisristi kommentteja,
- puolipiste erottaaksesi komennot ja
- rivin loppu.
Kaikki muut kielen osat voidaan määrittää uudelleen. Sisäisten toimintojen ja ohjelmien tai Tcl-kirjastojen lisäämien toimintojen välillä ei ole eroa.
Tietotyypit
Tcl on (ulkoisesti) tyypitön kieli. Jokaisella muuttujalla on merkkijono arvona. Tätä tarkoitusta varten sisäinen esitys voi esim. B. kokonaisluku , liukuluku , luettelo (tietorakenne) tai sanelu . Määrittelemättömän muuttujan käyttö johtaa virheeseen - toisin kuin ohjelmointi Unix -komentorivitulkilla ( shell ) tai awk . Tcl: ssä käytetään usein rakenteita, kuten assosiatiivisia matriiseja ( hajautaulukko ), luetteloita ja sanomia. Kyinen ovat verrattavissa JSON , mutta lukuun ottamatta aaltosulkumerkkien ilman ylimääräisiä erikoismerkkejä kuten lainausmerkkejä ja kaksoispisteet. On myös esineitä, joilla on luokkia, useita perintöjä ja sekoituksia . Jälkimmäiset, kuten graafisen käyttöliittymän Tk ohjauselementit , ovat komentoja Tcl: ssä.
Jouset
Tcl tietää erittäin tehokkaita komentoja (myös pitkien) merkkijonojen käsittelyyn sekä tiedostojen käsittelyyn , TCP / IP- verkkoviestintään ja graafiseen ohjelmointiin Tk: n kautta ja on täysin alustasta riippumaton kaikessa tässä. Tcl on rakentanut mekanismin toimimaan säännöllisten lausekkeiden kanssa , jolloin tuetaan monimutkaisempia lausekkeita kuin grep , verrattavissa Perlin lausekkeisiin .
Laajennettavuus
Ulkoisten kirjastojen integroimiseksi Tcl: llä on oma pakettijärjestelmä, joka voidaan myös ladata automaattisesti tarvittaessa uudelleen. On myös mahdollista laajentaa Tcl -ohjelmia kirjastoilla, jotka on kirjoitettu C: llä tai muulla käännetyllä kielellä; Tätä varten on olemassa standardoitu käyttöliittymä TclStubs -muodossa. Lisäksi CriTcl-laajennuksen avulla aikakriittiset ohjelmaosat voidaan merkitä Tcl-lähdekoodin C-lähdekoodiin. Nämä kootaan ja integroidaan automaattisesti.
Itse muuttuva koodi
Tcl -ohjelmat voivat helposti muokata itseään ajon aikana. Koska omat ohjausrakenteet on helppo toteuttaa puhtaassa Tcl: ssä, on mahdollista toteuttaa erilaisia ohjelmointiparadigmoja suoraan Tcl: ssä, esimerkiksi toiminnallinen tai olio-ohjelmointi .
Lisäksi itsemuokattavuus mahdollistaa koodin lukemisen ja suorittamisen asetustiedostoista tai verkon kautta. Tämän mahdollistamiseksi suojatussa muodossa Tcl tarjoaa minkä tahansa määrän hiekkalaatikoita erityisesti käynnistettyjen tulkkien muodossa, joilla on rajoitettu toiminnallisuus. Näitä lapsitulkkeja voidaan laajentaa omilla toiminnoillaan, jotka kommunikoivat vanhempien tulkkien kanssa määriteltyjen rajapintojen kautta .
Kohteen suunta
Tcl sisältää nykyisen laajennuksen ytimessä (8.6 -versio) TclOO, jossa on yksittäinen ja moninkertainen perintö ja sekoitukset, joten täysin objektipohjaisia sovelluksia voidaan kirjoittaa - mutta ei välttämättä. Luokat sisältävät konstruktorit ja tuhoajat sekä menetelmät . Toisin kuin muut ohjelmointikielet, luokat ja objektit toteutetaan komentoina, ja ne on nimenomaisesti tuhottava käyttämällä "tuhoa", joka voidaan automatisoida seuraamalla muuttujia käyttämällä "jäljittää", jos muuttuja menee soveltamisalan ulkopuolelle.
Koska osoittimia ei ole , muihin objekteihin viitataan käyttämällä objektin nimeä.
Rinnakkaisuus
Tcl toteuttaa myös samanaikaisuuden tarvittaessa . Jokaisella säikeellä on oma tulkinsa ja siten myös muuttujansa. Säie voi ohjata toisen säikeen suorittamaan komentoja. Ketjut ovat vanhemman ja lapsen suhteessa. Synkronointi tapahtuu mutexien tai "liittymisen" kautta. Versiosta 8.6 on saatavana myös vaihtoehtoinen rinnakkaisuuden toteutus Coroutinesin kautta .
Bytecode -tulkki
Tulkki kääntää Tcl -rutiinit tavukoodiksi , kun ne suoritetaan ensimmäisen kerran . Kun rutiini suoritetaan toisen kerran, tavukoodi on käytettävissä ja ohjelmaosa toimii nopeammin. On myös laajennuksia, jotka kääntävät koko lähdekoodin tavukoodiksi, kun ohjelma ladataan.
GUI -rajapinnat
Tcl tunnetaan myös työkalupakista Tk , jonka avulla alustasta riippumattomat graafiset käyttöliittymät voidaan helposti ohjelmoida. Graafinen työkalupakki “Tk” on saatavana useille käyttöjärjestelmille, joiden ulkonäkö on tavanomainen (”natiivi ulkoasu”). Tämä ohjelmointirajapinta on saatavana myös monille muille ohjelmointikielille, kuten: B. Common Lisp , Perl , PHP , Ruby , Python tai R . Tk Toolkitin vakioliittymän lisäksi on myös rajapintoja FLTK- ja GTK + -työkalusarjoihin .
Muut ominaisuudet ja erikoisominaisuudet
- "Kaikki on merkkijono" -periaate: Vaikka sisäisesti - pääasiassa suorituskykysyistä - tehdään ero merkkijonojen, kokonaislukujen, liukulukujen, luetteloiden ja sanomien välillä ("sanakirjojen" kääntäminen on sopimatonta), kaikkia näitä voidaan käyttää milloin tahansa voidaan käsitellä merkkijonona tai vastaavaa sisältöä sisältäviä merkkijonoja voidaan käsitellä erikoistyypeinä. Epäsuora muuntaminen maksaa kuitenkin laskentatehoa, minkä vuoksi on vältettävä tätä "hohtamista".
- Tapahtumaohjatut liitännät pistorasioihin ja tiedostoihin , jotta voit työskennellä verkkoyhteyksien ja graafisen käyttöliittymän kanssa myös ilman säikeitä. Ajan ja käyttäjän määrittämät tapahtumat ovat myös mahdollisia.
- Muuttujan näkyvyys alue on rajoitettu paikallisia muuttujia, mutta voidaan erityisesti laajentaa koskemaan näkyvyysalueen kutsuvan funktion kanssa uplevel ja upvar .
- Yksinkertainen poikkeusten käsittely kaikkien komentojen poikkeuspalautusarvojen kautta.
- Helposti laajennettavissa C , C ++ , Java ja Tcl.
syntaksi
Periaatteessa Tcl: llä on hyvin yksinkertainen rakenne ja se erottuu muista kielistä, kuten Perl , APL ja C, käyttämällä täysin yhtenäistä syntaksia . Jokainen, joka tuntee komentorivitulkit ( Shell , MS-DOS ), tuntee myös Tcl-komentojen perusrakenteen. Tcl -skripti koostuu useista komennoista. Komento koostuu komentosanasta, jota seuraa argumentit ( parametrit ). Komento rajataan rivin lopussa tai puolipisteellä .
Kommandowort param1 param2 … paramN
Toisin kuin yksinkertaiset komentorivitulkit, komennot voidaan sisäistää Tcl: hen. Komennon argumentin sijasta hakasulkeissa voidaan määrittää toinen komento. Alikomennot suoritetaan ensin. Tulosta käytetään sitten argumenttina ylemmän tason komennossa. Mekanismi vastaa kuin backquotes on Unix kuori .
Kommandowort [Unterkommando param …] …
Rakenteet kuten if ja while tai tehtävät ovat myös komentoja. Komennot noudattavat puolalaista merkintää , kuten Lisp , ja niitä käsitellään myös luettelona .
Käyttöalueet
Tcl on jo esiasennettu useimpiin Unix-asennuksiin tai se voidaan asentaa myöhemmin paketinhallinnan avulla , myös Apple macOS: n kanssa ; mutta ei Microsoft Windowsissa . On myös erilaisia asennuspaketteja muille käyttöjärjestelmille, mukaan lukien Windows. Tcl on alustasta riippumaton ja toimii samalla tavalla kaikissa järjestelmissä, joille se on saatavana. Yleensä Tcl-ohjelma (komentosarja) käynnistetään Tcl-kuoren tclsh kautta ohjelmille, joilla ei ole graafista tuloa / lähtöä, tai Tcl-ikkunakuori, joka toivoo ohjelmia, joilla on graafinen käyttöliittymä.
TCL on komentoriviltä , upotettuna kielen, kuten CGI (muuten usein -kielellä Perl ), koska moduuli Apache - web-palvelin (muuten usein kuin PHP ), ja koska kieli menettelyt tietokantaan PostgreSQL käytetty . Se voidaan helposti laajentaa C : ksi yksinkertaisen käyttöliittymän kautta .
Esimerkkiohjelmia
"Hei maailma!" -Ohjelma
puts "Hello World!"
Hello World!
Put -komento odottaa merkkijonon syötteenä ja antaa sen suoraan, jota seuraa rivinvaihto. Tässä on sama tulostus komennolla muuttujan arvon asettamiseksi:
set hw "Hello World!"
puts $hw
Hello World!
Numeroluettelon keskiarvo
proc mean data {
expr ([join $data +]) / double([llength $data])
}
Tämä määrittää uuden komennon keskiarvon , jota voidaan kutsua seuraavasti
mean {5 4.2 1.2 6.7 9 1 0}
Tiedot ovat siis luettelo numeroista. Liittyä komento muodot merkkijono muotoa 5 + 4,2 + 1,2 + 6,7 + 9 + 1 + 0 sen ensimmäinen parametri $ tiedot (sisältö dataa ) käyttäen toisen parametrin + . Tämä on nyt asetettu paikkaan, jossa liittyä komento hakasulkeissa oli aiemmin . Llength -komento palauttaa luettelon pituuden. Hakasulkeet toimivat täällä samalla tavalla. Double () -toiminto varmistaa, että numeroita ei jaeta kokonaislukuna, jossa on jäännös, vaan liukulukuina desimaalilukuna (tämä on yleensä tarkoitettu keskiarvoille).
Esimerkin tulos on:
expr (5+4.2+1.2+6.7+9+1+0)/double(7)
Expr komento nyt laskee matemaattinen lauseke.
Esimerkki osoittaa, kuinka helposti merkkijonojen käsittely ja laskelmat voidaan sekoittaa Tcl: ssä algoritmien muodostamiseksi helposti.
Graafinen sovellusohjelmointi Tk: n avulla
Tcl tekee graafisten käyttöliittymien kehittämisestä erittäin helppoa: Seuraava miniohjelma luo ikkunassa painikkeen, joka napsautettuna sulkee sovelluksen.
package require Tk
pack [button .b -text "Goodbye World" -command exit]
Perinteisen "Tk -widget -setin" (nämä ovat graafisen käyttöliittymän käyttöelementit) lisäksi, joka alustasta riippuen simuloi Motifin , Microsoft Windowsin tai Mac OS Classicin ulkonäköä , Ttk -widget -setti (teemallinen Tk) kiinteä Tk. Teema (”teema”) voidaan valita teemakirjastosta tai luoda itse.
package require Tk
ttk::setTheme clam
pack [ttk::button .b -text "Goodbye World" -command exit]
Tietokantayhteys Tcl: n kanssa
Tietokannan käyttö on myös erittäin helppoa Tcl: n kanssa, kuten seuraava esimerkki osoittaa:
# SQLite3 einbinden
package require sqlite3
# Datenbank eröffnen
sqlite3 meinedatenbank ./meinedatenbank.sqlite
# Variable zum Referenzieren
set var 3
# Tabelle erzeugen, Fehlermeldung ignorieren
meinedatenbank eval {CREATE TABLE tabelle1 (id int, spalteA char(20))}
# Daten in Tabelle schreiben
meinedatenbank eval {INSERT INTO tabelle1 (id, spalteA) VALUES (1, 'foo'), (2, 'bar'), (3, 'ßülz')}
# Daten abfragen
meinedatenbank eval {SELECT * FROM tabelle1 WHERE id = :var} ergebnis {
puts "id = $ergebnis(id), spalteA = $ergebnis(spalteA)"
}
# Alle Daten löschen
meinedatenbank eval {DELETE FROM tabelle1}
# Tabelle löschen
meinedatenbank eval {DROP TABLE tabelle1}
# Datenbank schließen
meinedatenbank close
Muuttuvia viittauksia ei laajenneta, vaan ne siirretään tietokannan "moottoriin", jotta SQL -ruiskutuksella ei voi syntyä tietoturva -aukkoja .
Tämä SQLite3- käyttöliittymän suora käyttö katsotaan nyt vanhentuneeksi, koska on olemassa tietokannasta riippumaton TDBC- käyttöliittymä , jonka nimi perustuu ODBC: hen ja JDBC: hen. TDBC toimitukseen kuuluu ohjaimet SQLite3 , MySQL , ODBC (samanlainen JDBC-ODBC-silta ) ja PostgreSQL .
Laajennukset
Tcl: tä voidaan käyttää sekä prosessuaalisena että toiminnallisena ohjelmointikielenä , koska toimintojen nimet voivat olla myös funktioiden argumentteja. Laajennusten, kuten stooop , Snit , Incr Tcl ja Incr Tk sekä XOTcl , kautta Tcl on myös olio -suuntautunut - jopa moninkertaiseen perintöön asti . Versiosta 8.6 alkaen TclOO sisältyy ytimeen, Incr Tcl perustuu nyt TclOO: een .
- XOTcl on yksi monista Ccl: n Tcl: n olio- laajennuksista. Samoin kuin Common Lisp Object System , se tukee metasarjoja , jotka määrittelevät luokkien ominaisuudet, ja on täysin dynaaminen olio-kieli. Tämä tarkoittaa, että toisaalta luokkien ja menetelmien määritelmiä voidaan muuttaa dynaamisesti (ajon aikana) ja toisaalta objektien ja luokkien sekä luokkien välisiä suhteita voidaan muuttaa milloin tahansa. Tämä tarkoittaa, että esimerkiksi esine voi muuttaa luokkaansa (esim. "Auto" -luokan esineestä tulee "hylky" -luokan objekti, jos se osuu puuhun) tai luokkahierarkiaa voidaan muuttaa dynaamisesti. Klassisten olio-orientoituneiden konseptien lisäksi XOTcl tarjoaa myös mixin- luokkia, joissa tehdään ero kohdekohtaisten ja luokittain olevien sekoitusten välillä. Sekoitusluokkien avulla ortogonaalinen käyttäytyminen voidaan toteuttaa erikseen.
- Incr Tcl ja Incr Tk ovat objektipohjaisten laajennusten paketteja Tcl: lle ja Tk: lle . Nämä mahdollistavat olio-ohjelmoinnin Tcl: n avulla. Nimet perustuvat C ++: n nimiin. Lisäysmenettely incr vastaa ++ -operaattoria C: ssä.
- Snit ("Snit's Not Incr Tcl") on Tcl-objektiohjelmointipaketti, jota ei tarvitse koota puhtaana Tcl-paketina. Toisin kuin Incr Tcl (perintö), se käyttää delegoinnin periaatetta objektiorientaation toteuttamiseen.
- Laatta , lisäpaketti Tcl / Tk 8.4: ssä ja Ttk , vakiopaketti Tcl / Tk 8.5: n jälkeen, ovat graafisten käyttäjäelementtien kirjastoja, jotka mahdollistavat alkuperäisen ulkonäön eri käyttöjärjestelmissä. Tämä mahdollistaa Tcl / Tk -sovellusten modernin ulkonäön jopa Unix -käyttöjärjestelmissä. Kun käytetään Tk -kirjaston vakio -widgettejä , ne käyttävät vanhentuneita Motif -elementtejä.
- Tcl3D on paketti, joka laajentaa Tcl -toiminnallisuutta 3D -grafiikan ohjelmointiin. Tämä z. B. Luo katsojia .dxf -tiedostoille.
Toteutukset
- TCL Core Team tarjoaa viitetoteutus. ActiveTcl -jakelu perustuu tähän .
- Jim tcl on minimalistinen toteutus, jossa keskitytään sulautettuihin järjestelmiin .
Katso myös
- Java -komentokieli (Jacl)
nettilinkit
- Tcl / Tk pääsivu
- Englanninkielinen foorumi
- Tcl FAQ
- Tcl'ers Wiki ja koodinäytteet
- "Yksinkertaisesti Tcl"
- "Just man Tcl" - kommentoi kielisääntöjä
- Linkkiluettelo aiheesta Tcl-Tk osoitteessa curlie.org (aiemmin DMOZ )
- "Tcl -Coach" - saksan kielen oppimisohjelmisto Tcl / Tk: lle (ilmainen ohjelma)
- Projektisivu yritykselle Incr Tcl
- Snit -projektisivu
- Saksankielinen kirja "Johdatus Tcl / Tk"
Yksilöllisiä todisteita
- ↑ Viimeisin julkaisu: Tcl / Tk 8.6.9 (16. marraskuuta 2018) . (Englanti).
- ↑ TDBC. Palveluntarjoajan verkkosivusto
- ↑ (verkkosivusto viitetoteutusta varten)
- ↑ verkkosivusto