Tcl

tcl
Clasa de limba multi- paradigma :
orientat pe obiecte ,
funcțional ,
procedural ,
bazat pe evenimente ,
imperativ
Tipul de execuție interpretat
Aparut in 1988
Autor John Ousterhout
Extensie de fișier .tcl
Eliberare
Tip sistem dinamic
A fost influențat Shell , Lisp
influențat Python , Ruby
Licență asemănător BSD
Site-ul web tcl.tk
 Fișiere media la Wikimedia Commons

Tcl (din limba engleză  Tool Command Language  - „limbajul de comandă al instrumentelor”, citiți „ticle” sau „ti-si-el”) este un limbaj de scripting de nivel înalt .

Tcl este adesea folosit împreună cu biblioteca grafică Tk (Tool Kit) . Pachetul Tcl / Tk în rusă este uneori numit „Tak-tikl” (versiunea în engleză este „tikl-tok”).

Domeniile de aplicare ale limbajului sunt prototiparea rapidă , crearea de interfețe grafice pentru programele consolă (pachete software), încorporarea în programe de aplicație, testarea . Tcl este folosit și în dezvoltarea web .

Caracteristici

În Tcl, datele de toate tipurile, inclusiv codul programului, pot fi manipulate ca șiruri de caractere. Acest lucru îl face un limbaj cu suport natural pentru metaprogramare . Această paradigmă de programare a fost luată în considerare în timpul dezvoltării și evoluției limbajului.

Un program Tcl constă din comenzi separate prin linii noi sau punct și virgulă. Fiecare comandă constă dintr-un set de câmpuri separate prin spații. Primul câmp trebuie să fie numele comenzii, iar câmpurile rămase opționale sunt argumentele transmise comenzii respective. Comanda returnează o valoare, uneori goală. Adică, la fel ca Lisp , Tcl folosește notația de prefix.

Nu există cuvinte cheie ca atare - conceptul de comandă în Tcl este similar cu conceptul de procedură sau funcție din limbajele obișnuite de programare. Acest lucru se aplică și constructelor de control al limbajului. Combinat cu sintaxa elementară, acest lucru face ca limbajul să fie bine extensibil, inclusiv biblioteci scrise în alte limbaje, cum ar fi C / C++ sau Java .

Tcl are, de asemenea, un model de control al programului bazat pe evenimente bine implementat . Evenimentele pot fi generate de un cronometru, când apar date într-un canal, când se schimbă valoarea unei variabile, când se termină un program extern sau pur și simplu când utilizatorul lucrează cu interfața Tk. Puteți să vă setați propriile evenimente și să le gestionați.

La fel ca majoritatea limbajelor de scripting moderne , Tcl conține instrumente avansate pentru lucrul cu expresii regulate, funcționează cu matrice asociative și alte structuri de date dinamice.

Basic Tcl nu a suportat OOP până la versiunea 8.6, totuși, datorită ușurinței extinderii sintaxei limbajului, există multe extensii ale Tcl cu mecanisme orientate pe obiecte, implementate ca biblioteci de legături în C sau în Tcl însuși. Înainte de versiunea 8.5, cele mai comune erau: incr Tcl , XOTcl și Snit [3] . O altă implementare a mecanismelor OOP folosind Tcl însuși, inclusă în biblioteca standard Tcl [4] , este biblioteca STOOOP [5] . Din versiunea 8.5 există o nouă implementare a OOP pentru Tcl, TclOO , inclusă începând cu versiunea 8.6 în limbajul de bază [6] [nota 1] :

extensie implementat pe caracteristicile modelului utilizat
XOTcl C sistem de obiecte puternic cu definirea dinamică a claselor și metodelor, aproape de CLOS
incr Tcl C OOP într-un stil C++ , extins prin introducerea configuratorilor
Snit tcl Implementarea modelului obiect bazat pe delegare , nu pe moștenire
STOOOP tcl OOP într-un stil cât mai apropiat de C++, a fost introdus și un mecanism de comutare de clasă
TclOO [7] C Un sistem compact, dar puternic, orientat pe obiecte, care poate fi utilizat atât direct, cât și ca cadru pentru construirea de modele OOP avansate.

Spațiile de nume sunt acceptate la nivelul de bază al limbii. La implementarea mecanismelor OOP în Tcl, se folosește suportul pentru ierarhia de imbricare a spațiilor de nume în acest limbaj [8] .

Tcl este ușor de programat într- un stil funcțional : oferă mecanisme precum funcții de ordin superior și abstracții de funcții [9] , deși Tcl este rar folosit în acest fel. Iată un exemplu despre cum pot fi compuse două funcții :

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

În versiunea 8.5, Tcl a introdus și comanda apply , ceea ce face acest stil de programare mult mai ușor.

Iată un exemplu de utilizare a acestuia din documentația oficială:

hartă proc { listă lambda } { setați rezultatul {} pentru fiecare articol $list { lapend rezultat [aplica $lambda $element ] } returnează $rezultat } map { x { return [ lungime șir $x ] : $x }} { a bb ccc dddd }

rezultatul acestui exemplu va fi

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

Istorie

Limbajul a fost dezvoltat de John Ousterhout în timp ce era la Universitatea din California din Berkeley. Scopul inițial a fost de a crea un limbaj universal pentru încorporarea în aplicațiile console . Ulterior, Ousterhout și-a extins limbajul cu instrumente pentru crearea de interfețe grafice  - așa s-a născut Tcl / Tk. [zece]

Timp de 4 ani de dezvoltare în interiorul zidurilor universității, comunitatea Tikl a crescut la câteva sute de mii de programatori. În 1993, a fost dezvoltată prima extensie orientată pe obiecte, incr Tcl .

În 1994, Ousterhout a devenit inginer principal al proiectului SunScript. În următorii 4 ani, devenind unul dintre proiectele Sun Corporation , Tikl nu numai că a rămas un sistem distribuit gratuit , dar s-a și îmbunătățit semnificativ, a devenit multi-platformă .

Richard Stallman a dat o lovitură semnificativă popularității limbii când a publicat în septembrie 1994 într-o serie de grupuri de știri recomandarea „De ce nu ar trebui să utilizați Tcl” [11] . În el, el se bazează pe afirmațiile că „Tcl nu este conceput ca un limbaj de programare serios” și „Tcl are o sintaxă specială care atrage hackerii datorită simplității sale. Dar sintaxa Tcl pare ciudată pentru majoritatea utilizatorilor.” , și, de asemenea, în legătură cu promovarea Emacs Lisp , a emis un verdict: „ proiectul GNU nu va folosi Tcl în software-ul GNU” . Pe lângă pretențiile subiective ale designului limbajului, Stallman a subliniat un dezavantaj obiectiv la acel moment - performanța scăzută.

Cu toate acestea, creșterea numărului de dezvoltatori care folosesc în mod activ tikl sa ridicat la 600% în această perioadă.

În 1998, din cauza boom-ului Java și a concurenței acerbe asociate acestuia, corporația nu a mai putut acorda aceeași atenție lui tikl. John Ousterhout părăsește Sun pentru a forma (cu suport Sun) Scriptics, continuând dezvoltarea tehnologiei Tcl/Tk [12] [13] . A fost una dintre primele firme comerciale de software care sa concentrat pe software liber .

În martie 1998, Ousterhout a scris articolul acum clasic „Scripting: High-Level Programming for the 21st Century” [14] , în care a numit limbaje de scripting limbaje de integrare a sistemelor, deoarece acestea sunt concentrate în primul rând pe lucrul cu obiecte ale operațiunii. mediu, și nu cu date elementare. Acest lucru permite, fără a scrie mii de linii de cod , să „lipim” astfel de obiecte într-unul singur cu două sau trei comenzi.

În același an, a câștigat două premii majore pentru dezvoltarea limbajului Tcl. Primul este ACM Software System Award, care recunoaște „cel mai important software”. Premiul a onorat anterior sisteme de bază, cum ar fi stiva de protocol TCP/IP , prima foaie de calcul, prima bază de date relațională , World Wide Web , Unix , PostScript și Smalltalk . Al doilea este premiul anual USENIX Software Tools User Group (STUG) pentru recunoașterea software-ului remarcabil.

În 1999, a fost lansat Tcl 8.0 - în această implementare, a apărut pentru prima dată compilarea la bytecode , ceea ce a făcut posibilă creșterea vitezei de 6 ori [15] . Următoarea versiune a Tcl 8.1 introduce suport complet Unicode și introduce multithreading pentru prima dată . În legătură cu această versiune, Ousterhout a declarat:

„În general, 8.1 mută Tcl într-o nouă categorie, deoarece acum poate fi folosit pentru aplicații de server. C, C++ și Java pot fi încă folosite pentru a construi părțile critice pentru performanță ale aplicațiilor, în timp ce Tcl poate fi folosit pentru a integra și a construi componente front-end.” [16]

În 2000, Scriptics a fost redenumită Ajuba Solutions și apoi cumpărată de Interwoven, care nu era interesată să lucreze cu software liber . În acest sens, dezvoltarea Tcl a fost transferată comunității de programare. Așa s- a format Tcl Core Team .

La cea de-a 9-a conferință Tcl/Tk din Vancouver , a fost introdus sistemul de fișiere virtual StarKit , oferind o modalitate nouă, ușor de utilizat, de a distribui programe Tcl.

Sintaxa Tcl

Scenariul comenzi separate prin linii noi sau punct și virgulă (;). Echipă cuvinte separate prin spații. CommandName argument1 argument2 argumentN

Primul cuvânt este numele comenzii, restul sunt argumentele acesteia. Orice argument poate fi înlocuit cu o altă comandă cuprinsă între paranteze drepte. Orice argumente între acolade sunt transmise comenzii așa cum este, ca un singur argument.

Simboluri cu semnificație deosebită

  • $  - Determină înlocuirea valorii variabile.
  • []  - Determină înlocuirea rezultatului execuției comenzii între paranteze.
  • ""  - grupează argumentele într-unul singur cu înlocuirea valorilor variabilelor.
  • {}  - grupează argumentele într-unul singur fără a înlocui valorile variabilelor.
  • \  - scapă următorul caracter sau provoacă înlocuirea caracterului de control.
  • #  - începutul unui comentariu pe o singură linie, trebuie să fie după un caracter nou linie fără escape sau „;” (punct și virgulă).

Note despre procesul de analizare a scripturilor

  • Despărțirea în cuvinte, înlocuirea valorilor variabilelor și rezultatele execuției comenzii sunt efectuate într-o singură trecere de comandă.
  • Toate caracterele din paranteze {} și ghilimele „” sunt tratate ca un singur cuvânt.
  • Primul cuvânt al comenzii este tratat ca o procedură încorporată sau definită.

Exemple de comenzi

  • Atribuirea este indicată de cuvântul set , nu de semnul egal.

Sintaxă:

setați valoarea variabilei

Exemplu:

seteaza un 2 setul b 3
  • Un comentariu este indicat cu #

Sintaxă:

# text de comentariu

Exemplu:

# este un comentariu
  • Ieșirea (imprimarea) este implementată de comanda puts

Sintaxă:

pune expresie

Exemplu:

pune "Bună! Sunt eu." pune 123 pune $a pune "b = $b"
  • Bucla while este implementată cu comanda while , care are două argumente. Prima este o expresie Tcl (expresiile sunt de fapt scrise într-un limbaj miniaturizat de matematică și comparații în stil C ). Al doilea argument este scriptul care trebuie executat la fiecare iterație a . De obicei este plasat în bretele pentru a evita executarea imediată.

Sintaxă:

în timp ce { Tcl_Expression_With_Boolean_Value } { TclCommand otherTclCommand ... ... }

Exemplu:

în timp ce { $x < 10 } { pune $x incr x }
  • Comanda condiționată

Sintaxă:

dacă { Expression_Tcl_With_Boolean_Value } { Comanda Tcl }

Exemplu:

dacă { $x < 0 } { set x 0 }
  • Comanda de filială

Exemplu:

comutator - glob -- $var { { see } - { saw } - { seen } { pune „Totul înseamnă același lucru!” } }
  • Comanda poate să nu aibă argumente, de exemplu
pwd

pur și simplu returnează directorul de lucru curent. Și echipa

set wdir [ pwd ]

stocați numele directorului curent în variabila wdir .

  • Comanda poate returna o listă, de exemplu
glob Pattern

va returna o listă de nume de fișiere în directorul curent care se potrivesc cu modelul Pattern .

Proceduri

Procedurile sunt definite după cum urmează

proc ProcedureName { Argument List } { }

Matrice asociative

Următorul fragment de cod va crea și inițializa o matrice asociativă (numită și hartă, dicționar sau hash în alte limbi).

a stabilit capitala ( Franta ) Paris a stabilit capitala ( Italia ) Roma a stabilit capitala ( Germania ) Berlin a stabilit capitala ( Polonia ) Varsovia a stabilit capitala ( Rusia ) Moscova a stabilit capitala ( Spania ) Madrid

Pentru a interoga și afișa una dintre valorile unui tablou asociativ, utilizați

pune $capital ( Italia )

O listă a tuturor țărilor (chei de matrice) poate fi obținută cu comanda

matrice numește capital

Rezultatul nu va fi sortat deoarece tablourile Tcl se bazează pe tabele hash .

Polonia Spania Rusia Germania Italia Franta

Sortarea se poate face cu comanda

lsort [ nume matrice capitală ]

Pentru a face referire la o matrice (treceți-o ca referință), utilizați numele variabilei care o conține:

proc demo arrName { upvar 1 $arrName arr ; # legați referința la un nume local # faceți ceva cu arr }

Pentru a accesa o matrice după valoare, utilizați array get sau array set . De exemplu, pentru a copia o matrice în alta:

set de matrice Newarr [matrice obține Oldarr ]

Tcl 8.5 a introdus tablouri trecute de dicționare de valoare ( dict ).

Pentru a converti o variabilă scalară într-o matrice și invers, eliminați variabila existentă cu comanda unset .

Domeniu variabil

În mod implicit, numai variabilele definite în procedură sunt vizibile în interiorul procedurii. În afara definiției unei proceduri, variabilele acesteia nu sunt accesibile decât prin mecanismul de trecere a parametrilor. Este posibil să existe variabile într-o procedură cu același nume ca în programul principal, în timp ce valorile acestor variabile vor diferi, de fapt vor fi variabile diferite. Pentru a schimba acest comportament, se folosesc comenzile globale sau upvar .

Exemple

Salut Lume!

Bună ziua, programul mondial arată așa

pune „Bună lume!”

sau așa

pune { Bună lume ! _ }

Arrays

Accesarea elementelor matricei

Afișarea valorii elementului de matrice OldArray(precizie), al cărui nume (matrice) este dat de noua variabilă NewArray

set NewArray OldArray pune [set $ { NewArray }( precizie )] Adunarea numerelor într-o matrice

Metoda (A) - Adăugarea folosind bucla „foreach”.

setează numere { 1 2 3 4 5 6 7 8 9 10 } setează rezultatul 0 pentru fiecare număr $numere { set rezultat [expr { $rezultat + $număr }] } pune $rezultat

Metoda (B) - Un mod mult mai elegant folosind comanda „join”.

setează numere { 1 2 3 4 5 6 7 8 9 10 } pune [expr [ unește $numerele + ]] Afișarea conținutului unui tablou

Matricea tcl_platform conține informații despre proprietățile platformei pe care rulează Tcl. O listă de nume de proprietăți poate fi obținută cu

nume de matrice tcl_platform

Următorul fragment le scoate împreună cu valorile lor:

foreach i [ nume de matrice tcl_platform ] { pune „$i = $tcl_platform($i)” }

Dacă proprietățile ar trebui sortate

foreach i [ sortează [ nume de matrice tcl_platform ] ] { pune „$i = $tcl_platform($i)” }

Imbricarea comenzilor este demonstrată aici. Ele pot fi imbricate la orice adâncime. Un rezultat similar poate fi obținut cu comanda parray [17] introdusă în Tcl 8.5.

Intersecția mulțimilor

Procedura de filtrare returnează acele elemente ale listei pentru care scriptul evaluează la TRUE:

filtru proc { script de listă } { set res {} foreach e $list {if {[uplevel 1 $script $e ]} { lapend res $e }} return $res }

Comanda de nivel superior 1 evaluează o expresie în contextul în care este numit cuvântul filtru .

Procedura in  este o notație scurtă pentru a include seturi:

proc în { lista e } { expr {[ lsearch - exact $list $e ] >= 0 } }

Examinare:

% filtru { a b c } { în { b c d }} b c

Factorial

proc ! x {expr { $x < 2 ? 1 : $x * [ ! [ incr x - 1 ]]}}

Acest lucru demonstrează că numele comenzii poate fi orice șir, precum și operatorul ?: cunoscut din alte limbi .

Implementare, distribuții, instrumente

Tcl este un limbaj interpretat , adică programele Tcl sunt gata să ruleze fără compilare și legare .

Interpretul Tcl a fost portat pe cele mai comune platforme [18] . Este distribuit sub o licență gratuită , non-copyleft , care îi permite să fie utilizat fără restricții în dezvoltarea de aplicații proprietare , precum și pentru a crea sisteme derivate proprietare. Dezvoltatorii îl numesc asemănător BSD , deși, în comparație cu licența BSD, licența Tcl impune mai puține restricții.

Implementare

În prezent, lucrările asupra nucleului limbajului Tcl sunt efectuate de un grup de dezvoltatori [19] numit Tcl Core Team [20] . Cele mai recente versiuni ale traductorului Tcl și bibliotecile de bază sunt disponibile în depozitul SourceForge.net , vezi lista proiectelor sourceforge incluse în distribuția principală Tcl/Tk [21] .

Traducatorul Tcl compilează programul într-o reprezentare intermediară - bytecode , apoi îl interpretează. Spre deosebire de, de exemplu, Python , această reprezentare intermediară nu este salvată pe disc, programul poate fi stocat doar în codul sursă, eventual ambalat într-un modul StarKit sau folosind un alt wrapper . În funcție de opțiunile de compilare, interpretul Tcl poate sau nu să accepte multithreading .

În timp ce majoritatea manualelor Tcl pentru începători spun ceva de genul „Tcl are un singur tip de variabilă, șirul”, realitatea este că traducătorii Tcl fac lucrurile diferit de mult timp. Pe plan intern, Tcl folosește un sistem de tip dinamic cu conversie automată transparentă a șirurilor.

Tcl este inclus în aproape toate distribuțiile Linux . Microsoft Windows necesită un pachet de instalare separat.

Versiunea Tcl 8.4 diferă de cea anterioară cu funcții noi (optimizarea codului pe 64 de biți, VFS, completări în ceea ce privește introspecția ) și o anumită creștere a performanței datorită optimizării lucrului cu bytecode.

Noile funcții adăugate în versiunea 8.1 (cum ar fi suportul multithreading, facilitățile de internaționalizare și manipularea caracterelor Unicode) au încetinit Tcl cu aproximativ 19% față de versiunea 8, care a dat un salt în viteză. Dezvoltatorii lui 8.4 au depus toate eforturile pentru a maximiza viteza de execuție a programului, pentru a se asigura că funcționează nu numai mai lent, ci chiar mai rapid decât era când a apărut versiunea 8.0. Acest obiectiv a fost atins pentru aproape toate instrumentele Tcl și Tk - versiunea 8.4 este în medie de 8 ori mai rapidă decât versiunea 7.6 [15] .

Versiunea actuală a TCL este 8.6.

Implementări și dialecte alternative

Există implementări alternative Tcl pentru mașinile virtuale de uz general populare. Acesta este un interpret Java - Jacl [22] (ultima versiune din 2008) și proiectul Eagle [23] , care implementează majoritatea comenzilor Tcl 8.4 pentru CLR (sunt disponibile versiuni pentru .NET 4.0 și 2.0). Sunt în curs de desfășurare experimente pentru a traduce programele Tcl în codul mașinii virtuale Parrot , care este dezvoltată pentru a șasea versiune a Perl [24] .

Pentru programarea sistemelor încorporate și încorporarea în aplicații, a fost dezvoltat un dialect special al lui Tcl - Jim [25] [26] . Acesta este un interpret care implementează un subset mare de Tcl, extins cu mecanisme de programare funcționale și orientate pe obiecte suplimentare și ocupă mai puțin de 100 de kiloocteți în formă compilată.

Un alt dialect al Tcl este limbajul de scripting mobil Hecl [27] , dezvoltat de David Welton și implementat în Java ( J2ME ) [28] [29] . În ceea ce privește platforma Android , suportul Tcl pe aceasta (împreună cu alte limbaje de scripting) este asigurat de: SL4A scripting layer [30] ; există și o implementare nativă Tcl pentru acest sistem de operare numită AndroWish [31] .

Distribuții

Toate distribuțiile enumerate mai jos sunt distribuite gratuit și sunt asamblate din componente care au una sau alta licență gratuită . Cele mai multe dintre ele sunt multi-platformă (cu excepția WinTclTk și Tcl/Tk Aqua ), deși pe sistemele Unix Tcl/Tk face de obicei parte din distribuția sistemului de operare .

  • Tcl activ [32] Cea mai utilizată distribuție a Tcl. Ca și alte produse ale companiei, ActiveState include un set mare de biblioteci și extensii. În versiunile Windows, include instrumente de integrare WSH . Nu există instrumente care să facă viața mai ușoară programatorului. Compania vinde pachetul TclDevKit, care conține instrumente pentru depanare și crearea de programe autonome (acestea din urmă bazate pe tehnologia StarKit ) și Komodo , un IDE  universal pentru limbaje de scripting care include instrumente de programare vizuală pentru formularele Tk .
  • WinTclTk [33] Mai compactă decât ActiveTcl, o distribuție axată pe lucrul cu XOTcl  , o extensie orientată pe obiect a lui Tcl. Lista bibliotecilor incluse în ea este oarecum mai restrânsă decât în ​​ActiveTcl, dar setul de bază este prezent aici. Această distribuție include Tloona IDE [34]  , un mediu de dezvoltare tradițional și XOTclIde [35] , un mediu  de programare orientat pe obiecte în stil Smalltalk , ambele cu depanare. De asemenea, disponibil gratuit pe site-ul dezvoltatorului este un pachet pentru crearea unui singur fișier executabil TkWrapper bazat pe FreeWrap [36]  , o tehnologie alternativă la StarKit bazată pe compresie ZIP simplă. Cea mai recentă versiune până în prezent este 8.5.6 (3 decembrie 2009, Tcl 8.5.6).
  • TclKit [37] Este Tcl/Tk cu un set de bază de biblioteci într-un executabil compact. Distribuția a fost creată folosind tehnologia StarKit . Conține biblioteca MetaKit care vă permite să manipulați conținutul acestui fișier. O altă distribuție populară a Tcl într-un fișier este eTcl [38] . Distribuția dqkit [39] este construită pe principii similare  - un ansamblu alternativ cunoscut sub numele de „TclKit pe steroizi”, există mai multe opțiuni care diferă în ceea ce privește compoziția bibliotecilor, suportul multithreading etc.
  • MyTcl [40] Un mediu de dezvoltare integrat complet (IDE) în Tcl, inclusiv o distribuție de mediu de limbaj. Are capacitatea de a genera aplicații autonome în format StarKit . Versiunea actuală este 1.0 Build 8 (18 iunie 2012) pentru Win32 și Win64 cu Tcl 8.5.11 integrat în sistem. Momentan nu este open source .
  • AndroWish [31] Mediu pentru rularea scripturilor Tcl/Tk și conectarea unei aplicații tcl/tk într-un fișier apk pentru execuție sub Android

Aplicație

Tcl, împreună cu Perl și Python , a devenit unul dintre cele trei limbaje clasice de scriptare de uz general. Această trinitate apare nu numai ca o listă de distribuții gratuite compilate în ActiveState , ci și, de exemplu, ca limbi în care (pe lângă dialectul PL/pgSQL ) se pot scrie declanșatoare și proceduri stocate ale popularului server de baze de date PostgreSQL .

Tcl ca limbaj încorporabil și-a găsit aplicație în domeniul CAD ( CAD | CAM | CAE ) [41] [42] . Este, de exemplu, folosit ca tuner de baze de date în postprocesorul Unigraphics . În plus, este limbajul de automatizare și integrare de facto în toate pachetele software de proiectare a cipurilor ( FPGA și ASIC ).

Utilizare în dezvoltarea web

În programarea web, Tcl este de obicei folosit împreună cu serverul web AOLServer sau cu unul dintre serverele web „ușoare” FastCGI precum lighttpd . Pentru a integra Tcl cu Apache , există modulul Rivet [43] .

Sub controlul AOLServer, în special, OpenACS [44]  este un sistem de management de conținut pentru site-uri web cu extensibilitate bogată în limbajul Tcl, XOtcl extins sau project-open [45]  - un sistem de lucru în grup cu o interfață web .

Există, de asemenea, proiecte precum TclHttpd [46] și succesorul său, Wub [47] , care sunt cadre Web complete . Pe baza noii extensii de obiecte a limbajului TclOO, se dezvoltă cadrul web Woof (Web Oriented Object Framework) [48] . Un exemplu de CMS pentru TclHttpd este Ucome [49] .

Pe lângă faptul că este folosit ca limbaj de implementare a aplicațiilor web, Tcl poate fi folosit ca limbaj de scripting pentru a extinde aplicațiile existente. De exemplu, modulele pentru botul IRC Eggdrop sunt scrise pe el [50] [51] .

Avantaje și dezavantaje

Dezavantajul versiunilor timpurii de Tcl/Tk a fost, fără îndoială, performanța lentă. Versiunile sub 8 au folosit o interpretare directă a codului sursă, cu toate acestea, utilizarea bytecode a rezolvat această problemă. Acum, din punct de vedere al vitezei, Tcl nu este mult diferit de PHP , deși este vizibil inferior unor limbaje de scriptare precum, de exemplu, Python sau Lua . Se recomandă ca secțiunile de cod complexe sau critice în timp să fie executate ca module externe în C / C++ .

Tcl/Tk are o sintaxă necunoscută pentru programatori în limbaje „tradiționale”. Este mai aproape de sintaxa shell standard Unix . Această sintaxă poate fi modificată în mod arbitrar (ca și în alte „limbaje de programare programabile” precum Forth [nota 2] sau Common Lisp ). Acest lucru poate fi un avantaj pentru un programator individual sau un grup mic de programatori, dar face ca Tcl/Tk să fie greu potrivit pentru utilizare ca limbaj de uz general pentru dezvoltarea industrială. Deși prezența extensiilor standardizate reduce severitatea acestei probleme. Tcl poate fi folosit și în proiecte mari în cadrul „nișei sale ecologice” (scripturi încorporate, componente de „lipire”, programare WEB).

Deși Tcl are toate proprietățile unui limbaj funcțional , interpretul său anterior versiunii 8.6 nu a efectuat optimizarea recursiunii de coadă , ceea ce a făcut dificilă utilizarea unui stil pur funcțional și i-a redus eficiența. Cu toate acestea, flexibilitatea limbajului face posibilă ocolirea acestei probleme prin implementarea unui aspect al unei astfel de optimizări la un nivel înalt [52] . În cele din urmă, comanda tailcall , care a apărut în versiunea de testare 8.6, vă permite să utilizați recursiunea tail fără probleme.

Cea mai strânsă integrare a Tcl cu biblioteca grafică Tk , care este adesea folosită în combinație cu alte limbaje de programare, este un avantaj incontestabil al Tcl. Pentru a crea pachete GUI pentru programe de consolă sau pachete de programe de consolă, Tcl poate fi cea mai bună alegere.

Influență

Deși nu este un limbaj de programare utilizat pe scară largă, Tcl, împreună cu limbaje (anterioare) precum Lisp și Smalltalk , a avut o influență notabilă asupra programarii. A devenit primul limbaj axat pe ușurința de încorporare în aplicații [53] .

Ușurința de utilizare a bibliotecii de widget -uri grafice Tk a fost de neegalat și a devenit populară în alte limbaje de scriptare de uz general, în afară de Tcl . Tkinter rămâne instrumentul implicit pentru crearea aplicațiilor GUI în Python . Există, de asemenea, biblioteci de legare Tk pentru Perl [ 54] (Tkx) și Ruby [53] .

SQLite  , un sistem ușor de încorporat de gestionare a bazelor de date SQL , a fost dezvoltat inițial ca o extensie a Tcl [53] .

Vezi și

Link -uri

În rusă

Articole și recenzii Bloguri dedicate TCL

Cărți

În rusă

original: Brent Welch, Ken Jones, Jeffrey Hobbs „Practical Programming in Tcl and Tk (a patra ediție)”, ISBN 0-13-038560-3 , 2003 ( versiune electronică [55] )
  • Moskvin P. V. „ABC TCL”, ISBN 5-93517-130-9
  • Alexey Petrovsky, TCL (Tool Command Language), ISBN 5-901321-16-2

În engleză

  • Clif Flynt. Tcl/Tk: Ghidul dezvoltatorului . - 3. - Morgan Kaufmann, 2012. - 817 p. - (Seria Morgan Kaufmann în inginerie software și programare). — ISBN 9780123847171 .
Ediția a doua: „Tcl/Tk, Ediția a doua: Ghid pentru dezvoltatori”, ISBN 1-55860-802-8 , 2003 Ediția 1: Tcl/Tk pentru programatori reali, ISBN 0-12-261205-1
  • John K. Ousterhout, Ken Jones „Tcl and the DTk Toolkit (Ediția a doua)”, ISBN 0-321-33633-X , 2009
  • Bert Wheeler „ Tcl/Tk 8.5 Programing Cookbook ”, ISBN 1-84951-298-1 , 2011
  • Wojciech Kocjan, Piotr Beltowski. Tcl 8.5 Programare în rețea . - Packt Publishing, Limited, 2010. - 588 p. — ISBN 9781849510967 .
  • Mark Harrison, Michael McLennan, Programare eficientă Tcl/Tk. Scrierea unor programe mai bune în Tcl și Tk, ISBN 0-201-63474-0
  • J. Adrian Zimmer „Tcl/Tk pentru programatori”, ISBN 0-8186-8515-8
  • Salvatore Sanfillipo „Tcl Wise. Ghid pentru limbajul de programare Tcl" ( Primele 9 capitole on-line Arhivat 29 august 2013 la Wayback Machine )
  • Paul Raines, Jeff Tranter „Tcl/Tk in a Nutshell: A Desktop Quick Reference”, ISBN 1-56592-433-9
  • David Maggiano „Programare CGI cu Tcl”, ISBN 0-201-60629-1
  • JM Ivler, Kamran Husain, „Resursa dezvoltatorului Cgi: programare web în Tcl și Perl”, ISBN 0-13-727751-2

Note

  1. . Dacă niciuna dintre implementările modelului obiect nu vi se potrivește sau sunteți interesat de modul în care funcționează, puteți citi articolul Crearea comenzilor obiectelor Arhivat 13 mai 2007 pe Wayback Machine de  la creatorii SNIT
  2. O simbioză interesantă a lui Forth și Tcl în cadrul proiectului HolonT Arhivat 2 aprilie 2012 la Wayback Machine , unde Forth este tradus în cod Tcl.
Surse
  1. Tcl / Tk 8.6.12 LANSAȚĂ  (engleză) - 2021.
  2. https://www.tcl.tk/software/tcltk/8.6.html
  3. Kocjan, Beltowski, 2010 , pp. 62-63.
  4. Bibliotecă Tcl standard (tcllib) . www.tcl.tk. Preluat la 26 iunie 2016. Arhivat din original la 6 octombrie 2014.
  5. Sriram Srinivasan. 7.5 Comparație cu alte limbi OO // Programare Perl avansată . — Ediția I. - O'Reilly , 1997. - ISBN 1-56592-220-4 .
  6. Kocjan, Beltowski, 2010 .
  7. TclOO Arhivat 15 septembrie 2018 la Wayback Machine în TclWiki
  8. Clyf Flynt. 8.1.7. Imbricarea spațiului de nume // Tcl/Tk: Ghidul dezvoltatorului. — ediția a 3-a. - Waltham, MA : Morgan Kaufmann, 2012. - P. 215. - 792 p. — ISBN 0-12-384717-6 .
  9. vezi și Pași către programarea funcțională Arhivat 10 februarie 2007 la Wayback Machine
  10. Vezi History of Tcl Arhivat 10 iunie 2016 la Wayback Machine
  11. De ce nu ar trebui să utilizați Tcl . Data accesului: 14 mai 2007. Arhivat din original la 4 februarie 2012.
  12. Cameron Laird, Katherine Sorez, SunWorld, SUA. Fondatorul Tcl pleacă de la Sun pentru o nouă afacere  // Computerworld. - Sisteme deschise , 1998. - Nr. 07 .
  13. Robert McMillan, SunWorld. Tcl: calea către o nouă viață  // Computerworld. - Sisteme deschise , 1998. - Nr. 36 .
  14. John K. Ousterhout Scripting: Higher Level Programming for the 21st Century Arhivat la 1 februarie 2010 la Wayback Machine  .
    Traducerea acestui articol Arhivat la 30 septembrie 2007 la Wayback Machine  (rusă) în revista Open Systems, nr. 3, 1998
  15. 1 2 vezi Tcl Benchmarks Arhivat 21 mai 2007 la Wayback Machine
  16. Ted Smalley Bowen. Tcl: o variantă de întreprindere  // Computerworld. - Sisteme deschise , 1999. - Nr. 21 .
  17. Documentația Tcl | parare . Preluat la 26 martie 2014. Arhivat din original la 11 mai 2014.
  18. TCL Wiki | Pe ce platforme rulează Tcl . Preluat la 26 martie 2014. Arhivat din original la 2 septembrie 2013.
  19. Tcl Core Team - lista de membri . Consultat la 14 mai 2007. Arhivat din original pe 2 mai 2007.
  20. Echipa de bază Tcl . Consultat la 14 mai 2007. Arhivat din original la 30 aprilie 2007.
  21. Tcl la SourceForge . Consultat la 14 mai 2007. Arhivat din original pe 16 mai 2007.
  22. Proiectul Tcl/Java, Jacl . Consultat la 14 mai 2007. Arhivat din original pe 29 aprilie 2007.
  23. Proiectul Eagle, (Extensible Adaptable Generalized Logic Engine) . Preluat la 11 iunie 2011. Arhivat din original la 2 octombrie 2011.
  24. partcl. Implementarea tcl care vizează VM-ul papagal Arhivat la 22 mai 2011 la Wayback Machine ( arhivat pe 24 august 2011 pe blogul proiectului la Wayback Machine
  25. Steve Bennett. Jim Tcl. Implementarea Tcl cu amprentă mică // Presa Asociației Tcl Actele Conferinței Tcl/Tk a celei de-a 18-a ediții anuale a Asociației Tcl. - Lulu.com, 2011. - S. 94-105 . — ISBN 0578098016 .
  26. Interpretul Jim. O implementare cu amprentă mică a limbajului de programare Tcl
  27. hecl.org Arhivat pe 15 decembrie 2010 la Wayback Machine : Hecl - The Mobile Scripting Language
  28. David Welton. Creați o aplicație simplă cu Hecl  // Free Software Magazine. — miercuri, 31.10.2007. - Problemă. 20 . Arhivat din original la 30 iunie 2013.
  29. Implementarea limbajului de programare Hecl Arhivat 10 august 2013 la Wayback Machine 
  30. Despre automatizare și scripting pentru Android . „Hacker” (18 februarie 2014). Preluat la 26 iunie 2016. Arhivat din original la 15 august 2016.
  31. 12 AndroWish . Tcl/Tk pentru Android . Data accesului: 3 decembrie 2014. Arhivat din original pe 20 decembrie 2014.
  32. ActiveTcl. Distribuția Tcl standard din industrie (link indisponibil) . Consultat la 1 septembrie 2013. Arhivat din original pe 21 august 2009. 
  33. WinTclTk. Distribuție Tcl/Tk pentru Microsoft Windows . Consultat la 5 iunie 2007. Arhivat din original pe 22 iunie 2007.
  34. Tloona Tcl/Tk IDE . Data accesului: 21 octombrie 2008. Arhivat din original la 22 martie 2009.
  35. XOTclIDE. Mediu de dezvoltare integrat pentru XOTcl și Tcl . Consultat la 15 mai 2007. Arhivat din original pe 21 iunie 2007.
  36. FreeWrap. Construiește executabile TCL/TK autonome. Nu este necesar un compilator! . Consultat la 15 mai 2007. Arhivat din original pe 29 iunie 2014.
  37. Timpul de rulare a aplicației Tclkit . Consultat la 14 mai 2007. Arhivat din original pe 23 mai 2007.
  38. ETcl. Distribuția lui Evolane de Tcl/Tk (link indisponibil) . Consultat la 1 septembrie 2013. Arhivat din original la 1 septembrie 2013. 
  39. dqkit . Consultat la 14 mai 2007. Arhivat din original pe 21 mai 2007.
  40. MyTcl. IDE Tcl/Tk puternic . Preluat la 25 martie 2013. Arhivat din original la 15 mai 2013.
  41. Istoricul software-ului CAD Arhivat la 13 ianuarie 2010 la Wayback Machine în TclWiki Arhivat la 19 decembrie 2006 la Wayback Machine
  42. Tehnologia computerizată modernă la serviciul Nike, Inc. Arhivat 15 octombrie 2011 la Wayback Machine în CAD and Graphics Magazine Arhivat 25 martie 2010 la Wayback Machine , nr. 10'2000
  43. Rivet - Webscripting for Tcl'ers . Consultat la 22 septembrie 2010. Arhivat din original pe 27 septembrie 2011.
  44. OpenACS. Setul de instrumente pentru comunitățile online, arhivat la 31 august 2009 la Wayback Machine 
  45. proiect deschis. Open-Source Enterprise Project Management Arhivat 14 ianuarie 2010 la Wayback Machine 
  46. tclhttpd - Tcl Web Server . Consultat la 30 ianuarie 2010. Arhivat din original la 25 ianuarie 2010.
  47. Server, client și suită de instrumente Wub pure tcl HTTP1.1 . Data accesului: 5 ianuarie 2010. Arhivat din original pe 28 aprilie 2010.
  48. Woof. Cadrul de obiecte orientat web . Data accesului: 30 ianuarie 2010. Arhivat din original la 14 august 2009.
  49. Ucome. Gestionarea conținutului dvs. în Tcl Arhivat 10 februarie 2014 la Wayback Machine 
  50. Darryl K. Taft. Limbajul de programare Tcl: 20 de lucruri pe care nu le știi . eWeek (31 ianuarie 2011). Preluat: 25 iunie 2016.
  51. Instalarea unui eggdrop pe IRC - „Hacker” (21 august 2000). Preluat la 25 iunie 2016. Arhivat din original la 13 august 2016.
  52. Tail call optimization Arhivat la 11 martie 2007 pe Wayback Machine descrie această problemă și prezintă posibile soluții.
  53. ↑ 1 2 3 Andrew Binstock. Un sfert de secol de Tcl . Dr. Dobb's (21 ianuarie 2014). Preluat la 25 iunie 2016. Arhivat din original la 7 iulie 2016.
  54. Nancy Walsh. Învățarea Perl/Tk . - O'Reilly, 1999. - 392 p. — ISBN 9781565923140 .
  55. prima ediție complet disponibilă, selectiv, mai nouă