Tcl

tcl
Kieliluokka moniparadigma :
oliosuuntautunut ,
toiminnallinen ,
menettelyllinen ,
tapahtumalähtöinen ,
pakottava
Toteutustyyppi tulkittu
Esiintyi 1988
Tekijä John Outterhout
Tiedostotunniste _ .tcl
Vapauta
Tyyppijärjestelmä dynaaminen
Vaikutettu Shell , Lisp
vaikutti Python , Ruby
Lisenssi BSD:n kaltainen
Verkkosivusto tcl.tk
 Mediatiedostot Wikimedia Commonsissa

Tcl ( englannin  kielestä Tool Command Language  - "työkalujen komentokieli", lue "ticle" tai "ti-si-el") on korkean tason komentosarjakieli .

Tcl:tä käytetään usein yhdessä Tk (Tool Kit) -grafiikkakirjaston kanssa . Tcl / Tk -nippua venäjäksi kutsutaan joskus nimellä "Tak-tikl" (englanninkielinen versio on "tikl-tok").

Kielen sovellusalueita ovat nopea prototyyppien valmistus, graafisten käyttöliittymien luominen konsoliohjelmille (ohjelmistopaketit), upottaminen sovellusohjelmiin, testaus . Tcl:ää käytetään myös web-kehityksessä .

Ominaisuudet

Tcl:ssä kaikentyyppisiä tietoja, mukaan lukien ohjelmakoodi, voidaan käsitellä merkkijonoina. Tämä tekee siitä kielen, jolla on luonnollinen tuki metaohjelmointia varten . Tämä ohjelmointiparadigma otettiin huomioon kielen kehittämisen ja evoluution aikana.

Tcl-ohjelma koostuu rivinvaihto- tai puolipisteillä erotetuista komennoista . Jokainen komento koostuu joukosta kenttiä, jotka on erotettu välilyönneillä. Ensimmäisen kentän on oltava komennon nimi, ja muut valinnaiset kentät ovat kyseiselle komennolle välitettyjä argumentteja. Komento palauttaa arvon, joskus tyhjän. Eli, kuten Lisp , Tcl käyttää etuliitemerkintää.

Varsinaisia ​​avainsanoja ei ole - Tcl:n komennon käsite on samanlainen kuin yleisten ohjelmointikielien menettelyn tai funktion käsite. Tämä koskee myös kielenhallintarakenteita. Yhdessä perussyntaksin kanssa tämä tekee kielestä hyvin laajennettavan, mukaan lukien muilla kielillä kirjoitetut kirjastot, kuten C / C++ tai Java .

Tcl:ssä on myös hyvin toteutettu tapahtumapohjainen ohjelmanhallintamalli . Tapahtumia voidaan generoida ajastimella, kun dataa ilmestyy kanavalle, muuttujan arvon muuttuessa, ulkoisen ohjelman päättyessä tai yksinkertaisesti kun käyttäjä työskentelee Tk-rajapinnalla. Voit määrittää omia tapahtumia ja hallita niitä.

Kuten useimmat nykyaikaiset komentosarjakielet , Tcl sisältää edistyneitä työkaluja säännöllisten lausekkeiden käsittelyyn, toimii assosiatiivisten taulukoiden ja muiden dynaamisten tietorakenteiden kanssa.

Basic Tcl ei tukenut OOP :ta ennen versiota 8.6, mutta koska kielen syntaksia on helppo laajentaa, Tcl:stä on olemassa monia oliomekanismien laajennuksia, jotka on toteutettu linkkikirjastoina C :ssä tai itse Tcl:ssä. Ennen versiota 8.5 yleisimmät olivat: incr Tcl , XOTcl ja Snit [3] . Toinen itse Tcl:ää käyttävien OOP-mekanismien toteutus, joka sisältyy Tcl-standardikirjastoon [4] , on STOOOP- kirjasto [5] . Versiosta 8.5 lähtien OOP for Tcl on uusi toteutus, TclOO , joka on sisällytetty versiosta 8.6 lähtien kieliytimeen [6] [huomautus 1] :

laajennus toteutettu käytetyn mallin ominaisuudet
XOTcl C tehokas objektijärjestelmä dynaamisella luokkien ja menetelmien määrittelyllä, lähellä CLOSia
incr Tcl C OOP C++- tyyliin , jota laajennettiin konfiguraattoreiden käyttöönotolla
Snit tcl objektimallin toteutus perustuu delegointiin , ei perintöön
SOOOP tcl OOP tyyliin mahdollisimman lähellä C ++, luokan vaihtomekanismi on myös otettu käyttöön
TclOO [7] C Kompakti mutta tehokas oliojärjestelmä, jota voidaan käyttää sekä suoraan että kehikkona kehittyneiden OOP-mallien rakentamiseen.

Nimiavaruuksia tuetaan kielen ydintasolla. Toteutettaessa OOP-mekanismeja Tcl:ssä käytetään nimiavaruuksien sisäkkäisten hierarkioiden tukea tällä kielellä [8] .

Tcl on helppo ohjelmoida funktionaaliseen tyyliin : se tarjoaa mekanismeja, kuten korkeamman asteen funktioita ja funktion abstraktioita [9] , vaikka Tcl:ää käytetään harvoin tällä tavalla. Tässä on esimerkki siitä, kuinka kaksi funktiota voidaan muodostaa :

proc o { f g x } { $f [ $g $x ]}

Versiossa 8.5 Tcl esitteli myös Apply- komennon , joka tekee tästä ohjelmointityylistä paljon helpompaa.

Tässä on esimerkki sen käytöstä virallisesta dokumentaatiosta:

proc map { lambda list } { aseta tulos {} foreach item $list { lappend tulos [apply $lambda $item ] } return $result } kartta { x { paluu [ merkkijonon pituus $x ] : $x }} { a bb ccc dddd }

tämän esimerkin tulos on

1:a 2:bb 3:cc 4:dddd

Historia

John Outterhout kehitti kielen ollessaan Kalifornian yliopistossa Berkeleyssä. Alkuperäinen tavoite oli luoda universaali kieli konsolisovellusten upottamiseen . Tämän jälkeen Outterhout laajensi kieltään työkaluilla graafisten käyttöliittymien luomiseen  - näin syntyi Tcl / Tk. [kymmenen]

Tikl-yhteisö on kasvanut useisiin satoihin tuhansiin ohjelmoijiin 4 vuoden ajan yliopiston seinien sisällä tapahtuneen kehityksen aikana. Vuonna 1993 kehitettiin ensimmäinen olio-laajennus, incr Tcl .

Vuonna 1994 Outterhoutista tuli SunScript-projektin johtava insinööri. Seuraavien 4 vuoden aikana Tiklistä tuli yksi Sun Corporationin projekteista, ja se ei vain pysynyt vapaasti hajautettuna järjestelmänä, vaan myös paransi merkittävästi, ja siitä tuli cross-platform .

Richard Stallman teki merkittävän iskun kielen suosioon julkaisessaan syyskuussa 1994 useissa uutisryhmissä suosituksen "Miksi sinun ei pitäisi käyttää Tcl:ää" [11] . Siinä hän perustuu väitteisiin, että "Tcl ei ole suunniteltu vakavaksi ohjelmointikieleksi" ja "Tcl:llä on erityinen syntaksi, joka houkuttelee hakkereita yksinkertaisuutensa vuoksi. Mutta Tcl-syntaksi näyttää oudolta useimmille käyttäjille." , ja myös Emacs Lispin edistämisen yhteydessä antoi tuomion: " GNU -projekti ei aio käyttää Tcl:ää GNU-ohjelmistossa" . Kielen muotoilua koskevien subjektiivisten väitteiden lisäksi Stallman toi esiin tuolloin objektiivisen epäkohdan - heikon suorituskyvyn.

Tiklia aktiivisesti käyttävien kehittäjien määrän kasvu oli kuitenkin tällä ajanjaksolla 600 %.

Vuonna 1998 Java - buumin ja siihen liittyvän kovan kilpailun vuoksi yhtiö ei voinut enää kiinnittää samaa huomiota tikliin. John Outterhout jättää Sunin muodostamaan (Sun-tuella) Scripticsiä jatkaen Tcl/Tk-teknologian kehitystä [12] [13] . Se oli yksi ensimmäisistä kaupallisista ohjelmistoyrityksistä, joka keskittyi vapaisiin ohjelmistoihin .

Maaliskuussa 1998 Ousterhout kirjoitti klassikkoartikkelin "Scripting: High-Level Programming for the 21st Century" [14] , jossa hän kutsui komentosarjakieliä järjestelmien integrointikieliksi, koska ne keskittyvät ensisijaisesti työskentelyyn käyttöjärjestelmän objektien kanssa. ympäristöön, ei perustietoihin. Tämä mahdollistaa tällaisten objektien "liimamisen" yhdeksi kahdella tai kolmella komennolla kirjoittamatta tuhansia koodirivejä .

Samana vuonna hän voitti kaksi suurta palkintoa Tcl-kielen kehittämisestä. Ensimmäinen on ACM Software System Award, joka tunnustaa "merkittävimmän ohjelmiston". Palkinnolla on aiemmin palkittu perusjärjestelmiä, kuten TCP/IP -protokollapino , ensimmäinen laskentataulukko , ensimmäinen relaatiotietokanta , World Wide Web , Unix , PostScript ja Smalltalk . Toinen on vuotuinen USENIX Software Tools User Group (STUG) -palkinto tunnustuksena erinomaisesta ohjelmistosta.

Vuonna 1999 julkaistiin Tcl 8.0 - tässä toteutuksessa ilmestyi ensimmäisen kerran käännös tavukoodiin , mikä mahdollisti nopeuden lisäämisen 6-kertaiseksi [15] . Tcl 8.1 : n seuraava versio sisältää täyden Unicode - tuen ja monisäikeisyyden ensimmäistä kertaa . Tämän julkaisun yhteydessä Outterhout totesi:

"Yleensä 8.1 siirtää Tcl:n uuteen kategoriaan, koska sitä voidaan nyt käyttää palvelinsovelluksissa. C:tä, C++:aa ja Javaa voidaan edelleen käyttää sovellusten suorituskyvyn kannalta kriittisten osien rakentamiseen, kun taas Tcl:llä voidaan integroida ja rakentaa käyttöliittymäkomponentteja. [16]

Vuonna 2000 Scriptics nimettiin uudelleen Ajuba Solutionsiksi, ja Interwoven osti sen, joka ei ollut kiinnostunut työskentelemään ilmaisten ohjelmistojen kanssa . Tässä suhteessa Tcl:n kehittäminen siirrettiin ohjelmointiyhteisölle. Näin muodostettiin Tcl Core Team .

Vancouverin 9. Tcl/Tk-konferenssissa esiteltiin StarKit- virtuaalinen tiedostojärjestelmä , joka tarjoaa uuden, käyttäjäystävällisen tavan jakaa Tcl-ohjelmia.

Tcl-syntaksi

Käsikirjoitus komennot erotettuna rivinvaihdolla tai puolipisteellä (;). Tiimi sanat välilyönnillä erotettuina. komennonNimi argumentti1 argumentti2 argumenttiN

Ensimmäinen sana on komennon nimi, loput ovat sen argumentteja. Mikä tahansa argumentti voidaan korvata toisella komennolla hakasulkeissa. Kaikki aaltosulkeissa olevat argumentit välitetään komennolle sellaisenaan yhtenä argumenttina.

Erityisen merkitykselliset symbolit

  • $  - Aiheuttaa muuttujan arvon korvaamista.
  • []  - Aiheuttaa komennon suorituksen tuloksen korvaamisen suluissa.
  • ""  - ryhmittelee argumentit yhdeksi muuttujan arvoilla korvaten.
  • {}  - ryhmittelee argumentit yhdeksi korvaamatta muuttujien arvoja.
  • \  - ohittaa seuraavan merkin tai aiheuttaa ohjausmerkkien korvaamisen.
  • #  - yksirivisen kommentin alku, jonka on oltava rivinvaihtomerkin tai ";":n jälkeen. (puolipisteet).

Huomautuksia komentosarjan jäsennysprosessista

  • Sanoihin murtaminen, muuttujien arvojen korvaaminen ja komennon suorittamisen tulokset suoritetaan yhdellä komentokierroksella.
  • Kaikkia suluissa {} olevia merkkejä ja lainausmerkkejä "" käsitellään yhtenä sanana.
  • Komennon ensimmäistä sanaa käsitellään sisäänrakennettuna tai määritettynä toimintosarjana.

Esimerkkejä komentoista

  • Tehtävä merkitään sanasarjalla , ei yhtäläisyysmerkillä.

Syntaksi:

aseta muuttuva arvo

Esimerkki:

aseta 2 _ sarja b 3
  • Kommentti on merkitty #

Syntaksi:

# kommenttiteksti

Esimerkki:

# on kommentti
  • Tulostus (tulostus) toteutetaan puts -komennolla

Syntaksi:

laittaa ilmettä

Esimerkki:

laittaa "Hei! Se olen minä." laittaa 123 laittaa $a laittaa "b = $b"
  • While- silmukka toteutetaan while -komennolla , joka vaatii kaksi argumenttia. Ensimmäinen on Tcl-lauseke (lausekkeet kirjoitetaan itse asiassa matematiikan ja C -tyylisten vertailujen miniatyrisoidulla kielellä ). Toinen argumentti on skripti, joka suoritetaan jokaisessa iteraatiossa . Se asetetaan yleensä kiharaisiin aaltosulkeisiin välittömän suorittamisen välttämiseksi.

Syntaksi:

while { Tcl_Expression_With_Boolean_Arvo } { TclCommand muuTclCommand ...... _ }

Esimerkki:

kun { $x < 10 } { laittaa $x incr x }
  • Ehdollinen komento

Syntaksi:

if { Lauseke_Tcl_Boolean_Arvolla } { Tcl-komento }

Esimerkki:

jos { $x < 0 } { aseta x 0 }
  • Haarakomento

Esimerkki:

kytkin - glob -- $var { { katso } - { näki } - { nähnyt } { laittaa "Kaikki tarkoittaa samaa!" } }
  • Komennossa ei voi olla esimerkiksi argumentteja
pwd

yksinkertaisesti palauttaa nykyisen työhakemiston. Ja joukkue

aseta wdir [ pwd ]

tallennat nykyisen hakemiston nimen muuttujaan wdir .

  • Komento voi palauttaa esimerkiksi luettelon
glob malli

palauttaa luettelon nykyisen hakemiston tiedostonimistä, jotka vastaavat kuviota Pattern .

Menettelyt

Menettelyt määritellään seuraavasti

proc ProcedureName { Argumenttiluettelo } { …… _ }

Assosiatiiviset taulukot

Seuraava koodinpätkä luo ja alustaa assosiatiivisen taulukon (jota kutsutaan myös kartaksi, sanakirjaksi tai hashiksi muilla kielillä).

pääkaupunki ( Ranska ) Pariisin pääkaupunki ( Italia ) Rooman pääkaupunki ( Saksa ) Berliinin pääkaupunki ( Puola ) Varsova pääkaupunki ( Venäjä ) Moskovan pääkaupunki ( Espanja ) Madrid _ _ _ _ _ _

Käytä kyselyä ja näyttää jokin assosiatiivisen taulukon arvoista

laittaa $pääomaa ( Italia )

Lista kaikista maista (taulukkonäppäimet) saadaan komennolla

taulukon nimet pääoma

Tulosta ei lajitella, koska Tcl-taulukot perustuvat hash-taulukoihin .

Puola Espanja Venäjä Saksa Italia Ranska

Lajittelu voidaan tehdä komennolla

lsort [array names capital ]

Jos haluat viitata taulukkoon (välitä se viittauksena), käytä sen sisältävän muuttujan nimeä:

proc demo arrName { upvar 1 $arrName arr ; # sitoa viittaus paikalliseen nimeen #tee jotain arr:lla }

Jos haluat käyttää taulukkoa arvon mukaan, käytä array get tai array set . Esimerkiksi taulukon kopioiminen toiseen:

array set Newarr [array get Oldarr ]

Tcl 8.5 esitteli arvosanakirjojen ( dict ) välittämät taulukot.

Jos haluat muuntaa skalaarimuuttujan taulukoksi ja päinvastoin, poista olemassa oleva muuttuja unset-komennolla .

Muuttujan laajuus

Oletusarvoisesti vain proseduurissa määritellyt muuttujat näkyvät proseduurissa. Proseduurin määritelmän ulkopuolella sen muuttujat eivät ole käytettävissä muuten kuin parametrien välitysmekanismin kautta. Proseduurissa voi olla muuttujia samalla nimellä kuin pääohjelmassa, kun taas näiden muuttujien arvot vaihtelevat, itse asiassa ne ovat erilaisia ​​muuttujia. Tämän käyttäytymisen muuttamiseksi käytetään global- tai upvar- komentoja .

Esimerkkejä

Hei maailma!

Hei, maailmanohjelma näyttää tältä

laittaa "Hei maailma!"

tai niin

laittaa { Hei maailma ! _ }

Taulukot

Matriisielementtien käyttäminen

Näytetään matriisielementin OldArray(precision) arvo, jonka nimen (array) antaa uusi muuttuja NewArray

set NewArray OldArray asettaa [set $ { NewArray }( tarkkuus )] Numeroiden lisääminen taulukkoon

Menetelmä (A) - Lisäys käyttämällä 'foreach' -silmukkaa

aseta numerot { 1 2 3 4 5 6 7 8 9 10 } aseta tulos 0 foreach numero $numerot { aseta tulos [lauseke { $tulos + $numero }] } asettaa $tuloksen

Menetelmä (B) - Paljon tyylikkäämpi tapa käyttää "join" -komentoa

aseta numerot { 1 2 3 4 5 6 7 8 9 10 } laittaa [lause [ liitä $numerot + ]] Taulukon sisällön luettelointi

Tcl_platform - taulukko sisältää tietoja sen alustan ominaisuuksista, jolla Tcl toimii. Kiinteistöjen nimien luettelon voi saada

taulukoiden nimet tcl_platform

Seuraava katkelma tulostaa ne arvoineen:

foreach i [array names tcl_platform ] { laittaa "$i = $tcl_platform($i)" }

Jos ominaisuudet pitäisi lajitella

foreach i [ lsort [array names tcl_platform ] ] { laittaa "$i = $tcl_platform($i)" }

Komentojen sisäkkäisyys on esitetty tässä. Ne voidaan upottaa mihin tahansa syvyyteen. Samanlainen tulos voidaan saavuttaa Tcl 8.5:ssä esitellyllä parray-komennolla [17] .

Joukkojen leikkauspiste

Suodatustoiminto palauttaa ne luettelon elementit, joille komentosarja arvioi TOSI:

proc filter { list script } { set res {} foreach e $list {if {[ylätason 1 $script $e ]} { lappend res $e }} return $res }

Ylätason 1 komento arvioi lausekkeen kontekstissa, jossa sanasuodatinta kutsutaan .

In - menettely  on lyhenne merkintäjoukkojen sisällyttämiselle:

proc in { list e } { expr {[ lsearch - tarkka $lista $e ] >= 0 } }

Tutkimus:

% suodatin { a b c } { in { b c d }} b c

Factorial

proc ! x {lause { $x < 2 ? 1 : $x * [ ! [ inkr x - 1 ]]}}

Tämä osoittaa, että komennon nimi voi olla mikä tahansa merkkijono sekä muista kielistä tunnettu ?:- operaattori .

Toteutus, jakelut, työkalut

Tcl on tulkittu kieli, eli Tcl- ohjelmat ovat valmiita toimimaan ilman kääntämistä ja linkittämistä .

Tcl-tulkki on siirretty yleisimmille alustoille [18] . Sitä jaetaan ilmaisella , ei-copyleft- lisenssillä , mikä mahdollistaa sen käytön rajoituksetta patentoitujen sovellusten kehittämisessä sekä omistusoikeudellisten johdannaisjärjestelmien luomisessa. Kehittäjät kutsuvat sitä BSD-kaltaiseksi , vaikka BSD-lisenssiin verrattuna Tcl-lisenssi asettaa vähemmän rajoituksia.

Toteutus

Tällä hetkellä Tcl-kielen ytimen parissa työskentelee ryhmä kehittäjiä [19] , nimeltään Tcl Core Team [20] . Tcl-kääntäjän ja ydinkirjastojen uusimmat versiot ovat saatavilla SourceForge.net - arkistosta , katso luettelo Tcl/Tk-pääjakelussa olevista sourceforge-projekteista [21] .

Tcl-kääntäjä kokoaa ohjelman väliesitykseen - tavukoodiin ja sitten tulkitsee sen. Toisin kuin esimerkiksi Python , tätä väliesitystä ei tallenneta levylle, vaan ohjelma voidaan tallentaa vain lähdekoodiin, mahdollisesti pakattuina StarKit- moduuliin tai käyttämällä jotakin muuta käärettä . Kääntämisasetuksista riippuen Tcl-tulkki voi tukea monisäikeistystä tai ei .

Vaikka useimmat aloittelevat Tcl-oppikirjat sanovat jotain "Tcl:ssä on vain yksi muuttujatyyppi, merkkijono", todellisuus on, että Tcl-kääntäjät ovat tehneet asioita eri tavalla jo pitkään. Sisäisesti Tcl käyttää dynaamista tyyppijärjestelmää, jossa on automaattinen läpinäkyvä merkkijonon muunnos.

Tcl sisältyy lähes kaikkiin Linux- jakeluihin . Microsoft Windows vaatii erillisen asennuspaketin.

Versio Tcl 8.4 eroaa edellisestä uusilla ominaisuuksilla (64-bittisen koodin optimointi, VFS, itsetutkiskelun lisäykset ) ja jonkin verran suorituskyvyn kasvua tavukoodin käytön optimoinnin vuoksi.

Versioon 8.1 lisätyt uudet ominaisuudet (kuten monisäikeinen tuki, kansainvälistymismahdollisuudet ja Unicode-merkkien käsittely) hidastivat Tcl:ää noin 19 % verrattuna versioon 8, mikä toi vauhtia. 8.4:n kehittäjät ovat tehneet kaikkensa maksimoidakseen ohjelman suoritusnopeuden varmistaakseen, että ne eivät toimi vain hitaammin, vaan jopa nopeammin kuin se oli, kun versio 8.0 ilmestyi. Tämä tavoite saavutettiin lähes kaikilla Tcl- ja Tk-työkaluilla - versio 8.4 on keskimäärin 8 kertaa nopeampi kuin versio 7.6 [15] .

TCL:n nykyinen versio on 8.6.

Vaihtoehtoiset toteutukset ja murteet

On olemassa vaihtoehtoisia Tcl-toteutuksia suosittuja yleiskäyttöisiä virtuaalikoneita varten. Tämä on Java -tulkki - Jacl [22] (uusin versio vuodelta 2008) ja Eagle-projekti [23] , joka toteuttaa suurimman osan Tcl 8.4 -komennoista CLR :lle (versiot .NET 4.0 ja 2.0 ovat saatavilla). Kokeilut ovat käynnissä Tcl-ohjelmien kääntämiseksi Parrot -virtuaalikoneen koodiksi , jota kehitetään Perlin kuudenteen versioon [24] .

Sulautettujen järjestelmien ohjelmointia ja sovelluksiin upottamista varten on kehitetty erityinen Tcl:n murre - Jim [25] [26] . Tämä on tulkki, joka toteuttaa suuren Tcl:n osajoukon, jota on laajennettu ylimääräisillä oliokeskeisillä ja toiminnallisilla ohjelmointimekanismilla, ja se vie alle 100 kilotavua käännetyssä muodossa.

Toinen Tcl:n murre on mobiili komentosarjakieli Hecl [27] , jonka on kehittänyt David Welton ja toteutettu Javalla ( J2ME ) [28] [29] . Mitä tulee Android -alustaan , Tcl-tuen siinä (muiden skriptikielien kanssa) tarjoaa: SL4A- skriptikerros [30] ; tälle käyttöjärjestelmälle on myös natiivi Tcl-toteutus nimeltä AndroWish [31] .

Jakelut

Kaikki alla luetellut jakelut levitetään vapaasti ja ne on koottu komponenteista, joilla on yksi tai toinen ilmainen lisenssi . Suurin osa niistä on monialustaisia ​​(paitsi WinTclTk ja Tcl/Tk Aqua ), vaikka Unix-järjestelmissä Tcl/Tk on yleensä osa käyttöjärjestelmän jakelua .

  • Aktiivinen Tcl [32] Tcl:n yleisimmin käytetty jakelu. Kuten muutkin yrityksen tuotteet, ActiveState sisältää suuren joukon kirjastoja ja laajennuksia. Windows-versioissa se sisältää WSH- integrointityökalut . Ei ole olemassa työkaluja , jotka helpottaisivat ohjelmoijan elämää. Yritys myy TclDevKit-pakettia, joka sisältää työkalut virheenkorjaukseen ja itsenäisten ohjelmien luomiseen (jälkimmäinen perustuu StarKit-tekniikkaan ) ja Komodo  , universaali IDE komentosarjakielille, joka sisältää visuaalisia ohjelmointityökaluja Tk - lomakkeille.
  • WinTclTk [33] Kompaktimpi kuin ActiveTcl, jakelu, joka keskittyy työskentelemään XOTcl :n kanssa  , Tcl:n oliopohjaisen laajennuksen kanssa. Sen sisältämien kirjastojen luettelo on hieman kapeampi kuin ActiveTcl:ssä, mutta perusjoukko on tässä. Tämä jakelu sisältää Tloona IDE :n [34]  , perinteisen kehitysympäristön, ja XOTclIde [35] , Smalltalk -tyylisen  olio-ohjelmointiympäristön , molemmissa virheenkorjainten kanssa. Myös kehittäjän sivustolla on vapaasti saatavilla paketti yksittäisen suoritettavan TkWrapper-tiedoston luomiseksi FreeWrapiin [36]  , joka on vaihtoehtoinen tekniikka StarKitille , joka perustuu yksinkertaiseen ZIP - pakkaukseen. Viimeisin tähän mennessä versio on 8.5.6 (3. joulukuuta 2009, Tcl 8.5.6).
  • TclKit [37] Se on Tcl/Tk, jossa on ydinkirjastot yhdessä kompaktissa suoritettavassa tiedostossa. Jakelu on luotu StarKit - teknologialla . Sisältää MetaKit- kirjaston , jonka avulla voit muokata tämän tiedoston sisältöä. Toinen suosittu Tcl-jakelu yhdessä tiedostossa on eTcl [38] . Dqkit- jakelu [39] on rakennettu samanlaisille periaatteille  - vaihtoehtoinen kokoonpano, joka tunnetaan nimellä "TclKit on steroids", on useita vaihtoehtoja, jotka eroavat kirjastojen koostumuksesta, monisäikeisestä tuesta jne.
  • MyTcl [40] Täydellinen integroitu kehitysympäristö (IDE) Tcl:ssä, mukaan lukien kieliympäristöjakelu. Pystyy luomaan itsenäisiä sovelluksia StarKit- muodossa. Nykyinen versio on 1.0 Build 8 (18. kesäkuuta 2012) Win32:lle ja Win64:lle, jossa Tcl 8.5.11 on integroitu järjestelmään. Se ei ole tällä hetkellä avointa lähdekoodia .
  • AndroWish [31] Ympäristö Tcl/Tk-skriptien suorittamiseen ja tcl/tk-sovelluksen linkittämiseen apk-tiedostoon Android -käyttöjärjestelmässä

Sovellus

Tcl:stä on Perlin ja Pythonin ohella tullut yksi kolmesta klassisesta yleiskäyttöisestä komentosarjakielestä. Tämä kolminaisuus ei esiinny vain ActiveStateen koottuna luettelona ilmaisista jakeluista , vaan myös esimerkiksi kielinä, joilla ( PL/pgSQL- murteen lisäksi ) voidaan kirjoittaa suositun PostgreSQL -tietokantapalvelimen triggereitä ja tallennettuja proseduureja .

Tcl sulautettavana kielenä on löytänyt sovelluksen CAD-alalla ( CAD | CAM | CAE ) [ 41] [42] . Sitä käytetään esimerkiksi tietokantavirittimenä Unigraphics -postiprosessorissa . Lisäksi se on de facto automaatio- ja integrointikieli kaikissa johtavissa sirusuunnitteluohjelmistopaketeissa ( FPGA :t ja ASIC :t ).

Käyttö verkkokehityksessä

Web-ohjelmoinnissa Tcl:ää käytetään yleensä AOLServer -verkkopalvelimen tai jonkin "kevyen" FastCGI -verkkopalvelimen, kuten lighttpd :n, kanssa . Tcl:n integroimiseksi Apachen kanssa on Rivet-moduuli [43] .

Erityisesti AOLServerin hallinnassa oleva OpenACS [44]  on verkkosivustojen sisällönhallintajärjestelmä, jossa on runsaasti laajennettavuutta Tcl-kielellä, laajennettu XOtcl tai project-open [45]  - ryhmätyöjärjestelmä verkkoliittymällä .

On myös projekteja, kuten TclHttpd [46] ja sen seuraaja, Wub [ 47] , jotka ovat täydellisiä verkkokehyksiä . TclOO-kielen uuteen objektilaajennukseen perustuen kehitetään Woof-verkkokehystä (Web Oriented Object Framework) [48] . Esimerkki TclHttpd:n CMS:stä on Ucome [49] .

Sen lisäksi, että Tcl:ää käytetään verkkosovellusten toteutuskielenä, sitä voidaan käyttää komentosarjakielenä olemassa olevien sovellusten laajentamiseen. Esimerkiksi Eggdrop IRC -botin moduulit on kirjoitettu siihen [50] [51] .

Edut ja haitat

Tcl/Tk:n varhaisten versioiden haittapuoli oli epäilemättä hidas suorituskyky. Alle 8 versiot käyttivät lähdekoodin suoraa tulkintaa, mutta tavukoodin käyttäminen ratkaisi tämän ongelman. Nyt nopeuden suhteen Tcl ei eroa paljon PHP :stä , vaikka se on huomattavasti huonompi kuin sellaiset komentosarjakielet, kuten esimerkiksi Python tai Lua . Monimutkaiset tai aikakriittiset koodin osat suositellaan suoritettavaksi ulkoisina moduuleina C / C++ :ssa .

Tcl/Tk:llä on tuntematon syntaksi "perinteisten" kielten ohjelmoijille. Se on lähempänä tavallista Unix -kuorisyntaksia . Tätä syntaksia voidaan muuttaa mielivaltaisesti (kuten muissa "ohjelmoitavissa ohjelmointikielissä", kuten Forth [huomautus 2] tai Common Lisp ). Tämä voi olla etu yksittäiselle ohjelmoijalle tai pienelle ohjelmoijaryhmälle, mutta tekee Tcl/Tk:stä tuskin sopivan yleiskäyttöiseksi kieleksi teolliseen kehitykseen. Vaikka standardoitujen laajennusten läsnäolo vähentää tämän ongelman vakavuutta. Tcl:ää voidaan käyttää myös suurissa projekteissa sen "ekologisen markkinaraon" puitteissa (sulautetut skriptit, "liimaus" komponentit, WEB-ohjelmointi).

Vaikka Tcl:llä on kaikki toiminnallisen kielen ominaisuudet , sen versiota 8.6 edeltävä tulkki ei suorittanut tail-rekursion optimointia , mikä vaikeutti puhtaasti toiminnallisen tyylin käyttöä ja heikensi sen tehokkuutta. Kielen joustavuus mahdollistaa kuitenkin tämän ongelman kiertämisen toteuttamalla näennäinen optimointi korkealla tasolla [52] . Lopuksi testiversiossa 8.6 ilmestynyt tailcall- komento mahdollistaa tail-rekursion käytön ilman ongelmia.

Tcl:n läheisin integrointi Tk - grafiikkakirjastoon , jota käytetään usein yhdessä muiden ohjelmointikielten kanssa, on Tcl:n kiistaton etu. Tcl voi olla paras valinta luodaksesi GUI -kääreitä konsoliohjelmille tai konsoliohjelmien paketeille.

Vaikuttaa

Vaikka Tcl ei ole laajalti käytetty ohjelmointikieli, se on yhdessä (aiempien) kielten, kuten Lisp ja Smalltalk , kanssa vaikuttanut huomattavasti ohjelmointiin. Siitä tuli ensimmäinen kieli, joka keskittyi sovelluksiin upottamisen helppouteen [53] .

Tk -graafisen widget -kirjaston helppokäyttöisyys oli vertaansa vailla , ja siitä tuli suosittu muilla yleiskäyttöisillä komentosarjakielillä Tcl:n lisäksi . Tkinter on edelleen oletustyökalu GUI- sovellusten luomiseen Pythonissa . Perlille [ 54] (Tkx) ja Rubylle [53] on myös Tk- sidoskirjastoja .

SQLite  , sulautettava kevyt SQL - tietokannan hallintajärjestelmä, kehitettiin alun perin Tcl:n laajennukseksi [53] .

Katso myös

Linkit

venäjäksi

Artikkelit ja arvostelut TCL:lle omistettu blogi

Kirjat

venäjäksi

alkuperäinen: Brent Welch, Ken Jones, Jeffrey Hobbs "Practical Programming in Tcl and Tk (4th Edition)", ISBN 0-13-038560-3 , 2003 ( sähköinen versio [55] )
  • Moskvin P. V. "ABC TCL", ISBN 5-93517-130-9
  • Aleksei Petrovski, TCL (työkalukomentokieli), ISBN 5-901321-16-2

Englanniksi

  • Clif Flynt. Tcl/Tk: Kehittäjän opas . - 3. - Morgan Kaufmann, 2012. - 817 s. - (Morgan Kaufmann -sarja ohjelmistosuunnittelussa ja ohjelmoinnissa). — ISBN 9780123847171 .
2. painos: "Tcl/Tk, toinen painos : Kehittäjän opas", ISBN 1-55860-802-8 , 2003 1. painos: Tcl/Tk oikeille ohjelmoijille, ISBN 0-12-261205-1
  • John K. Ousterhout, Ken Jones "Tcl and the DTk Toolkit (2nd Edition)", ISBN 0-321-33633-X , 2009
  • Bert Wheeler " Tcl/Tk 8.5 Programming Cookbook ", ISBN 1-84951-298-1 , 2011
  • Wojciech Kocjan, Piotr Beltowski. Tcl 8.5 Verkko-ohjelmointi . - Packt Publishing, Limited, 2010. - 588 s. — ISBN 9781849510967 .
  • Mark Harrison, Michael McLennan, tehokas Tcl/Tk-ohjelmointi. Parempien ohjelmien kirjoittaminen Tcl- ja Tk-kielellä, ISBN 0-201-63474-0
  • J. Adrian Zimmer "Tcl/Tk ohjelmoijille", ISBN 0-8186-8515-8
  • Salvatore Sanfillipo "Tcl Wise. Opas Tcl-ohjelmointikieleen" ( 9 ensimmäistä lukua verkossa arkistoitu 29. elokuuta 2013 Wayback Machinessa )
  • Paul Raines, Jeff Tranter "Tcl/Tk pähkinänkuoressa: Pikaopas työpöydälle", ISBN 1-56592-433-9
  • David Maggiano "CGI-ohjelmointi Tcl:llä", ISBN 0-201-60629-1
  • JM Ivler, Kamran Husain, "Cgi-kehittäjän resurssit: Web-ohjelmointi Tcl:ssä ja Perlissä", ISBN 0-13-727751-2

Muistiinpanot

  1. . Jos mikään objektimallin toteutuksista ei sovi sinulle tai olet kiinnostunut sen toiminnasta, voit lukea SNIT : n tekijöiden artikkelin Objektikomentojen luominen arkistoituna 13. toukokuuta 2007 Wayback Machinessa . 
  2. Mielenkiintoinen Forthin ja Tcl:n symbioosi HolonT- projektissa Arkistoitu 2. huhtikuuta 2012 Wayback Machinessa , jossa Forth on käännetty Tcl-koodiksi.
Lähteet
  1. Tcl / Tk 8.6.12 JULKAISTU  (englanniksi) - 2021.
  2. https://www.tcl.tk/software/tcltk/8.6.html
  3. Kocjan, Beltowski, 2010 , s. 62-63.
  4. Normaali Tcl-kirjasto (tcllib) . www.tcl.tk. Haettu 26. kesäkuuta 2016. Arkistoitu alkuperäisestä 6. lokakuuta 2014.
  5. Sriram Srinivasan. 7.5 Vertailu muihin OO-kieliin // Kehittynyt Perl-ohjelmointi . – 1. painos. - O'Reilly , 1997. - ISBN 1-56592-220-4 .
  6. Kocjan, Beltowski, 2010 .
  7. TclOO arkistoitu 15. syyskuuta 2018 Wayback Machinessa TclWikissä
  8. Clyf Flynt. 8.1.7. Nimitilan sisäkkäisyys // Tcl/Tk: Kehittäjän opas. – 3. painos. - Waltham, MA: Morgan Kaufmann, 2012. - P. 215. - 792 s. — ISBN 0-12-384717-6 .
  9. katso myös Steps kohti toiminnallista ohjelmointia Arkistoitu 10. helmikuuta 2007 Wayback Machinessa
  10. Katso Tcl:n historia arkistoitu 10. kesäkuuta 2016 Wayback Machinessa
  11. Miksi sinun ei pitäisi käyttää Tcl . Käyttöpäivä: 14. toukokuuta 2007. Arkistoitu alkuperäisestä 4. helmikuuta 2012.
  12. Cameron Laird, Katherine Sorez, SunWorld, USA. Tcl:n perustaja jättää Sunin uudelle yritykselle  // Computerworld. - Open Systems , 1998. - Nro 07 .
  13. Robert McMillan, SunWorld. Tcl: polku uuteen elämään  // Computerworld. - Open Systems , 1998. - Nro 36 .
  14. John K. Outerhout Scripting: Higher Level Programming for the 21st Century Arkistoitu 1. helmikuuta 2010 Wayback Machinessa  .
    Tämän artikkelin käännös Arkistoitu 30. syyskuuta 2007 Wayback Machinessa  (venäjäksi) Open Systems -lehdessä, nro 3, 1998
  15. 1 2 katso Tcl Benchmarks Arkistoitu 21. toukokuuta 2007 Wayback Machinessa
  16. Ted Smalley Bowen. Tcl: Enterprise Variant  // Computerworld. - Open Systems , 1999. - Nro 21 .
  17. Tcl-dokumentaatio | parray . Haettu 26. maaliskuuta 2014. Arkistoitu alkuperäisestä 11. toukokuuta 2014.
  18. TCL Wiki | Millä alustoilla Tcl toimii . Haettu 26. maaliskuuta 2014. Arkistoitu alkuperäisestä 2. syyskuuta 2013.
  19. Tcl Core Team - jäsenluettelo . Haettu 14. toukokuuta 2007. Arkistoitu alkuperäisestä 2. toukokuuta 2007.
  20. Tcl-ydintiimi . Haettu 14. toukokuuta 2007. Arkistoitu alkuperäisestä 30. huhtikuuta 2007.
  21. Tcl SourceForgessa . Haettu 14. toukokuuta 2007. Arkistoitu alkuperäisestä 16. toukokuuta 2007.
  22. Tcl/Java-projekti, Jacl . Haettu 14. toukokuuta 2007. Arkistoitu alkuperäisestä 29. huhtikuuta 2007.
  23. The Eagle Project, (Extensible Adaptable Generalized Logic Engine) . Haettu 11. kesäkuuta 2011. Arkistoitu alkuperäisestä 2. lokakuuta 2011.
  24. osacl. tcl:n toteutus papukaija VM :lle Arkistoitu 22. toukokuuta 2011 Wayback Machinessa ( arkistoitu 24. elokuuta 2011 projektiblogi Wayback Machinessa
  25. Steve Bennett. Jim Tcl. Pieni jalanjälki Tcl:n toteutus // Tcl Association Press 18. vuotuinen Tcl Association Tcl/Tk Conference Proceedings. - Lulu.com, 2011. - S. 94-105 . — ISBN 0578098016 .
  26. Jim-tulkki. Pieni jalanjälki Tcl-ohjelmointikielen toteutus
  27. hecl.org Arkistoitu 15. joulukuuta 2010 Wayback Machinessa : Hecl - The Mobile Scripting Language
  28. David Welton. Luo yksinkertainen sovellus Heclillä  // Free Software Magazine. -Ke, 2007-10-31. - Ongelma. 20 . Arkistoitu alkuperäisestä 30. kesäkuuta 2013.
  29. Hecl-ohjelmointikielen käyttöönotto arkistoitu 10. elokuuta 2013 Wayback Machinessa 
  30. Tietoja automaatiosta ja komentosarjoista Androidille . "Hakkeri" (18. helmikuuta 2014). Haettu 26. kesäkuuta 2016. Arkistoitu alkuperäisestä 15. elokuuta 2016.
  31. 12 AndroWish . Tcl/Tk Androidille . Käyttöpäivä: 3. joulukuuta 2014. Arkistoitu alkuperäisestä 20. joulukuuta 2014.
  32. ActiveTcl. Teollisuuden standardi Tcl-jakelu (linkki ei saatavilla) . Haettu 1. syyskuuta 2013. Arkistoitu alkuperäisestä 21. elokuuta 2009. 
  33. WinTclTk. Tcl/Tk-jakelu Microsoft Windowsille . Haettu 5. kesäkuuta 2007. Arkistoitu alkuperäisestä 22. kesäkuuta 2007.
  34. Tloona Tcl/Tk IDE . Käyttöpäivä: 21. lokakuuta 2008. Arkistoitu alkuperäisestä 22. maaliskuuta 2009.
  35. XOTclIDE. Integroitu kehitysympäristö XOTcl:lle ja Tcl:lle . Haettu 15. toukokuuta 2007. Arkistoitu alkuperäisestä 21. kesäkuuta 2007.
  36. FreeWrap. Rakentaa erilliset TCL/TK-suoritettavat tiedostot. Ei vaadi kääntäjää! . Haettu 15. toukokuuta 2007. Arkistoitu alkuperäisestä 29. kesäkuuta 2014.
  37. Tclkit-sovelluksen suoritusaika . Haettu 14. toukokuuta 2007. Arkistoitu alkuperäisestä 23. toukokuuta 2007.
  38. ETcl. Evolanen Tcl/Tk-jakelu (linkki ei saatavilla) . Haettu 1. syyskuuta 2013. Arkistoitu alkuperäisestä 1. syyskuuta 2013. 
  39. dqkit . Haettu 14. toukokuuta 2007. Arkistoitu alkuperäisestä 21. toukokuuta 2007.
  40. MyTcl. Tehokas Tcl/Tk IDE . Haettu 25. maaliskuuta 2013. Arkistoitu alkuperäisestä 15. toukokuuta 2013.
  41. CAD-ohjelmistohistoria Arkistoitu 13. tammikuuta 2010 Wayback Machinessa TclWikissä Arkistoitu 19. joulukuuta 2006 Wayback Machinessa
  42. Nykyaikainen tietokonetekniikka Nike, Inc:n palveluksessa. Arkistoitu 15. lokakuuta 2011 Wayback Machinessa CAD :ssa ja Graphics Magazinessa Arkistoitu 25. maaliskuuta 2010 Wayback Machinessa , No. 10'2000
  43. Rivet - Webscripting Tcl'ersille . Haettu 22. syyskuuta 2010. Arkistoitu alkuperäisestä 27. syyskuuta 2011.
  44. OpenACS. The Toolkit for Online Communities Arkistoitu 31. elokuuta 2009 Wayback Machinessa 
  45. projekti auki. Open-Source Enterprise Project Management Arkistoitu 14. tammikuuta 2010 Wayback Machineen 
  46. tclhttpd - Tcl Web Server . Haettu 30. tammikuuta 2010. Arkistoitu alkuperäisestä 25. tammikuuta 2010.
  47. Wub pure tcl HTTP1.1 -palvelin, asiakas ja työkalupaketti . Käyttöpäivä: 5. tammikuuta 2010. Arkistoitu alkuperäisestä 28. huhtikuuta 2010.
  48. Hups. Web Oriented Object Framework . Käyttöpäivä: 30. tammikuuta 2010. Arkistoitu alkuperäisestä 14. elokuuta 2009.
  49. Ucome. Sisällönhallintasi Tcl:ssä Arkistoitu 10. helmikuuta 2014 Wayback Machinessa 
  50. Darryl K. Taft. Tcl-ohjelmointikieli: 20 asiaa, joita et tiedä . eWeek (31. tammikuuta 2011). Haettu: 25.6.2016.
  51. Eggdropin asentaminen IRC:hen - "Hakkeri" (21. elokuuta 2000). Haettu 25. kesäkuuta 2016. Arkistoitu alkuperäisestä 13. elokuuta 2016.
  52. Tail call -optimointi arkistoitu 11. maaliskuuta 2007 Wayback Machinessa kuvaa tämän ongelman ja hahmotellaan mahdollisia ratkaisuja.
  53. ↑ 1 2 3 Andrew Binstock. Neljännesvuosisata Tcl . DR. Dobb's (21. tammikuuta 2014). Haettu 25. kesäkuuta 2016. Arkistoitu alkuperäisestä 7. heinäkuuta 2016.
  54. Nancy Walsh. Perl/Tk:n oppiminen . - O'Reilly, 1999. - 392 s. — ISBN 9781565923140 .
  55. ensimmäinen painos täysin saatavilla, valikoivasti, uudempi