Tcl

tcl
Sprog klasse multiparadigme :
objektorienteret ,
funktionel ,
proceduremæssig ,
begivenhedsdrevet ,
imperativ
Udførelsestype fortolket
Dukkede op i 1988
Forfatter John Ousterhout
Filtypenavn _ .tcl
Frigøre
Type system dynamisk
Blev påvirket Shell , Lisp
påvirket Python , Ruby
Licens BSD-lignende
Internet side tcl.tk
 Mediefiler på Wikimedia Commons

Tcl (fra det engelske  Tool Command Language  - "command language of tools", læs "ticle" eller "ti-si-el") er et scriptsprog på højt niveau .

Tcl bruges ofte i forbindelse med Tk (Tool Kit) grafikbibliotek . Tcl / Tk-pakken på russisk kaldes nogle gange "Tak-tikl" (den engelske version er "tikl-tok").

Sprogets anvendelsesområde er hurtig prototyping , oprettelse af grafiske grænseflader til konsolprogrammer (softwarepakker), indlejring i applikationsprogrammer, test . Tcl bruges også i webudvikling .

Funktioner

I Tcl kan data af alle typer, inklusive programkode, manipuleres som strenge. Dette gør det til et sprog med naturlig understøttelse af metaprogrammering . Dette programmeringsparadigme blev taget i betragtning under udviklingen og udviklingen af ​​sproget.

Et Tcl-program består af kommandoer adskilt af nye linjer eller semikolon. Hver kommando består af et sæt felter adskilt af mellemrum. Det første felt skal være navnet på kommandoen, og de valgfrie resterende felter er de argumenter, der sendes til den kommando. Kommandoen returnerer en værdi, nogle gange tom. Det vil sige, ligesom Lisp , bruger Tcl præfiksnotation.

Der er ingen nøgleord som sådan - konceptet med en kommando i Tcl ligner konceptet med en procedure eller funktion i almindelige programmeringssprog. Dette gælder også for sprogkontrolkonstruktioner. Kombineret med den elementære syntaks gør dette sproget godt udvideligt, herunder biblioteker skrevet på andre sprog såsom C / C++ eller Java .

Tcl har også en velimplementeret event-baseret programkontrolmodel . Hændelser kan genereres af en timer, når data vises i en kanal, når værdien af ​​en variabel ændres, når et eksternt program slutter, eller blot når brugeren arbejder med Tk-grænsefladen. Du kan indstille dine egne begivenheder og administrere dem.

Som de fleste moderne scriptsprog indeholder Tcl avancerede værktøjer til at arbejde med regulære udtryk, arbejder med associative arrays og andre dynamiske datastrukturer.

Basic Tcl understøttede ikke OOP før version 8.6, men på grund af den nemme udvidelse af sprogets syntaks er der mange udvidelser af Tcl med objektorienterede mekanismer, implementeret som linkbiblioteker i C eller i selve Tcl. Før version 8.5 var de mest almindelige: incr Tcl , XOTcl og Snit [3] . En anden implementering af OOP-mekanismer, der bruger Tcl selv, inkluderet i Tcl-standardbiblioteket [4] , er STOOOP- biblioteket [5] . Siden version 8.5 er der en ny implementering af OOP for Tcl, TclOO , inkluderet siden version 8.6 i sprogkernen [6] [note 1] :

udvidelse implementeret på egenskaber ved den anvendte model
XOTcl C kraftfuldt objektsystem med dynamisk definition af klasser og metoder, tæt på CLOS
incr Tcl C OOP i en C++- stil , udvidet med introduktionen af ​​konfiguratorer
Snit tcl objektmodelimplementering baseret på delegation , ikke arv
STOOOP tcl OOP i en stil så tæt som muligt på C++, en klasseskiftemekanisme er også blevet introduceret
TclOO [7] C Et kompakt, men kraftfuldt objektorienteret system, der både kan bruges direkte og som ramme for opbygning af avancerede OOP-modeller.

Navneområder understøttes på sprogets kerneniveau. Ved implementering af OOP-mekanismer i Tcl, bruges understøttelse af indlejringshierarkiet af navnerum på dette sprog [8] .

Tcl er let at programmere i en funktionel stil : det giver mekanismer såsom funktioner af højere orden og funktionsabstraktioner [9] , selvom Tcl sjældent bruges på denne måde. Her er et eksempel på, hvordan to funktioner kan sammensættes :

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

I version 8.5 introducerede Tcl også kommandoen apply , som gør denne programmeringsstil meget lettere.

Her er et eksempel på dets brug fra den officielle dokumentation:

proc map { lambda liste } { sæt resultat {} for hvert element $list { lappend resultat [anvend $lambda $item ] } returner $result } kort { x { return [ strenglængde $ x ] : $x }} { a bb ccc dddd }

resultatet af dette eksempel vil være

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

Historie

Sproget blev udviklet af John Ousterhout, mens han var på University of California i Berkeley. Det oprindelige mål var at skabe et universelt sprog til indlejring i konsolapplikationer . Efter dette udvidede Ousterhout sit sprog med værktøjer til at skabe grafiske grænseflader  - sådan blev Tcl / Tk født. [ti]

I 4 års udvikling inden for universitetets mure er Tikl-samfundet vokset til flere hundrede tusinde programmører. I 1993 blev den første objektorienterede udvidelse, incr Tcl , udviklet .

I 1994 blev Ousterhout ledende ingeniør på SunScript-projektet. I løbet af de næste 4 år, da Tikl blev et af Sun Corporations projekter , forblev Tikl ikke kun et frit distribueret system, men blev også væsentligt forbedret og blev på tværs af platforme .

Richard Stallman gav et betydeligt slag for sprogets popularitet, da han i september 1994 i en række nyhedsgrupper offentliggjorde anbefalingen "Hvorfor du ikke bør bruge Tcl" [11] . I den bygger han på påstandene om, at "Tcl ikke er designet som et seriøst programmeringssprog" og "Tcl har en særlig syntaks, der tiltrækker hackere på grund af dets enkelhed. Men Tcl-syntaksen virker mærkelig for de fleste brugere." , og også i forbindelse med promoveringen af ​​Emacs Lisp , udstedte en dom: " GNU -projektet kommer ikke til at bruge Tcl i GNU-software" . Ud over subjektive krav til sprogets design påpegede Stallman en objektiv ulempe på det tidspunkt - lav ydeevne.

Væksten i antallet af udviklere, der aktivt bruger tikl, udgjorde dog 600% i denne periode.

I 1998, på grund af Java -boomet og den hårde konkurrence forbundet med det, kunne selskabet ikke længere være opmærksom på tikl. John Ousterhout forlader Sun for at danne (med Sun-støtte) Scriptics og fortsætter udviklingen af ​​Tcl/Tk-teknologi [12] [13] . Det var et af de første kommercielle softwarefirmaer, der fokuserede på fri software .

I marts 1998 skrev Ousterhout den efterhånden klassiske artikel "Scripting: High-Level Programming for the 21st Century" [14] , hvori han kaldte scripting languages ​​system integration languages, fordi de primært fokuserer på at arbejde med objekter i driften. miljø og ikke med elementære data. Dette gør det muligt, uden at skrive tusindvis af kodelinjer , at "lime" sådanne objekter til én med to eller tre kommandoer.

Samme år vandt han to store priser for udviklingen af ​​Tcl-sproget. Den første er ACM Software System Award, som anerkender "den mest betydningsfulde software." Prisen har tidligere hædret grundlæggende systemer såsom TCP/IP -protokolstakken , det første regneark , den første relationelle database , World Wide Web , Unix , PostScript og Smalltalk . Den anden er den årlige USENIX Software Tools User Group (STUG) Award som anerkendelse af fremragende software.

I 1999 blev Tcl 8.0 udgivet - i denne implementering dukkede kompilering til bytecode først op , hvilket gjorde det muligt at øge hastigheden med 6 gange [15] . Den næste version af Tcl 8.1 introducerer fuld Unicode- understøttelse og introducerer multithreading for første gang . I forbindelse med denne udgivelse udtalte Ousterhout:

“Generelt flytter 8.1 Tcl ind i en ny kategori, da den nu kan bruges til serverapplikationer. C, C++ og Java kan stadig bruges til at bygge de ydeevnekritiske dele af applikationer, mens Tcl kan bruges til at integrere og bygge frontend-komponenter." [16]

I 2000 blev Scriptics omdøbt til Ajuba Solutions og derefter købt af Interwoven, som ikke var interesseret i at arbejde med fri software . I denne forbindelse blev udviklingen af ​​Tcl overført til programmeringsfællesskabet. Sådan blev Tcl Core Team dannet .

Ved den 9. Tcl/Tk-konference i Vancouver blev det virtuelle filsystem StarKit introduceret , hvilket giver en ny, brugervenlig måde at distribuere Tcl-programmer på.

Tcl-syntaks

Manuskript kommandoer adskilt af nye linjer eller semikolon (;). Hold ord adskilt af mellemrum. kommandonavn argument1 argument2 argumentN

Det første ord er navnet på kommandoen, resten er dens argumenter. Ethvert argument kan erstattes af en anden kommando omgivet af firkantede parenteser. Eventuelle argumenter i krøllede klammeparenteser sendes til kommandoen, som de er, som et enkelt argument.

Symboler af særlig betydning

  • $  - Forårsager substitution af variabel værdi.
  • []  - Forårsager substitution af resultatet af kommandoudførelsen inden for parentes.
  • ""  - grupperer argumenterne i ét med substitution af variabelværdier.
  • {}  - grupperer argumenterne i én uden at erstatte variablernes værdier.
  • \  - undslipper det næste tegn eller bevirker substitution af kontroltegn.
  • #  - begyndelsen af ​​en enkeltlinjekommentar, skal være efter et uundgået linjeskifttegn eller ";" (semikolon).

Bemærkninger om script-parsing-processen

  • Indbrydning i ord, substitution af variable værdier og resultater af kommandoudførelse udføres i én kommandopas.
  • Alle tegn inden for parentes {} og anførselstegn "" behandles som ét ord.
  • Det første ord i kommandoen behandles som en indbygget eller defineret procedure.

Kommandoeksempler

  • Tildeling er angivet med ordet sæt , ikke lighedstegnet.

Syntaks:

indstille variabel værdi

Eksempel:

sæt en 2 sæt b 3
  • En kommentar er angivet med #

Syntaks:

# kommentartekst

Eksempel:

# er en kommentar
  • Output (udskrivning) implementeres af puts -kommandoen

Syntaks:

sætte udtryk

Eksempel:

sætter "Hej! Det er mig." sætter 123 sætter $a sætter "b = $b"
  • While -løkken implementeres med while -kommandoen , som tager to argumenter. Det første er et Tcl-udtryk (udtryk er faktisk skrevet i et miniaturiseret sprog med matematik og C -stil sammenligninger ). Det andet argument er scriptet, der skal udføres ved hver iteration af . Det er normalt placeret i krøllede seler for at undgå øjeblikkelig henrettelse.

Syntaks:

mens { Tcl_Expression_With_Boolean_Value } { TclCommand andenTclCommand ... ... }

Eksempel:

mens { $x < 10 } { sætter $x incr x }
  • Betinget kommando

Syntaks:

if { Expression_Tcl_With_Boolean_Value } { Tcl kommando }

Eksempel:

hvis { $x < 0 } { sæt x 0 }
  • Afdelingskommando

Eksempel:

switch - glob -- $var { { se } - { } - { set } { sætter "Det hele betyder det samme!" } }
  • Kommandoen kan f.eks. ikke have nogen argumenter
pwd

returnerer blot den aktuelle arbejdsmappe. Og holdet

sæt wdir [ pwd ]

du gemmer navnet på den aktuelle mappe i variablen wdir .

  • Kommandoen kan f.eks. returnere en liste
glob mønster

vil returnere en liste over filnavne i den aktuelle mappe, der matcher mønsteret Pattern .

Procedurer

Procedurer er defineret som følger

proc ProcedureName { Argument List } { }

Associative arrays

Følgende kodestykke vil oprette og initialisere et associativt array (også kaldet et kort, ordbog eller hash på andre sprog).

hovedstad ( Frankrig ) Paris satte hovedstad ( Italien ) Rom satte hovedstad ( Tyskland ) Berlin satte hovedstad ( Polen ) Warszawa satte hovedstad ( Rusland ) Moskva satte hovedstad ( Spanien ) Madrid _

For at forespørge og vise en af ​​værdierne for et associativt array skal du bruge

sætter $kapital ( Italien )

En liste over alle lande (arraynøgler) kan fås med kommandoen

array navne hovedstad

Resultatet vil ikke blive sorteret, fordi Tcl-arrays er baseret på hash-tabeller .

Polen Spanien Rusland Tyskland Italien Frankrig

Sortering kan udføres med kommandoen

lsort [ matrixnavne kapital ]

For at henvise til en matrix (giv den som reference), skal du bruge navnet på den indeholdende variabel:

proc demo arrName { upvar 1 $arrName arr ; # bind referencen til et lokalt navn #gør noget med arr }

For at få adgang til et array efter værdi, brug array get eller array set . For eksempel, for at kopiere et array til et andet:

array sæt Newarr [array hent Oldarr ]

Tcl 8.5 introducerede arrays videregivet af værdi-ordbøger ( dict ).

For at konvertere en skalarvariabel til en matrix og omvendt skal du fjerne den eksisterende variabel med kommandoen unset .

Variabelt omfang

Som standard er det kun de variable , der er defineret i proceduren, der er synlige i proceduren. Uden for definitionen af ​​en procedure er dens variabler ikke tilgængelige undtagen gennem parameteroverførselsmekanismen. Det er muligt at have variabler i en procedure med samme navn som i hovedprogrammet, mens værdierne af disse variabler vil være forskellige, faktisk vil de være forskellige variabler. For at ændre denne adfærd bruges de globale eller upvar- kommandoer .

Eksempler

Hej Verden!

Hej, verdensprogrammet ser sådan ud

sætter "Hej verden!"

eller sådan

sætter { Hej verden ! _ }

Arrays

Adgang til array-elementer

Viser værdien af ​​array-elementet OldArray(præcision), hvis navn (array) er givet af den nye variabel NewArray

sæt NewArray OldArray sætter [sæt $ { NewArray }( præcision )] Tilføjelse af tal i et array

Metode (A) - Tilføjelse ved hjælp af 'foreach' loop

sæt tal { 1 2 3 4 5 6 7 8 9 10 } sæt resultat 0 for hvert nummer $numbers { sæt resultat [udtr { $result + $number }] } sætter $result

Metode (B) - En meget mere elegant måde ved at bruge 'join'-kommandoen

sæt tal { 1 2 3 4 5 6 7 8 9 10 } puts [udtr . [ join $numbers + ]] Visning af indholdet af et array

tcl_platform - arrayet indeholder information om egenskaberne for den platform, som Tcl kører på. En liste over ejendomsnavne kan fås med

matrixnavne tcl_platform _

Følgende uddrag udlæser dem sammen med deres værdier:

foreach i [array navne tcl_platform ] { sætter "$i = $tcl_platform($i)" }

Hvis ejendomme skal sorteres

foreach i [ lsort [ matrixnavne tcl_platform ] ] { sætter "$i = $tcl_platform($i)" }

Kommando-nesting demonstreres her. De kan indlejres til enhver dybde. Et lignende resultat kan opnås med parray-kommandoen [17] introduceret i Tcl 8.5.

Skæring af sæt

Filterproceduren returnerer de elementer på listen , for hvilke scriptet evalueres til TRUE:

proc filter { liste script } { sæt res {} foreach e $list {if {[uplevel 1 $script $e ]} { lappend res $e }} return $res }

Kommandoen uplevel 1 evaluerer et udtryk i den kontekst, hvori ordfilteret kaldes .

Den i proceduren  er en forkortelse for at inkludere sæt:

proc i { liste e } { udtr {[ lsearch - nøjagtig $list $e ] >= 0 } }

Undersøgelse:

% filter { a b c } { i { b c d }} b c

Faktoriel

proc ! x {udg . { $x < 2 ? 1 : $x * [ ! [ stigning x - 1 ]]}}

Dette viser, at kommandonavnet kan være en hvilken som helst streng, såvel som operatoren ?: kendt fra andre sprog .

Implementering, distributioner, værktøjer

Tcl er et fortolket sprog, det vil sige , Tcl- programmer er klar til at køre uden kompilering og linkning .

Tcl-tolken er blevet overført til de fleste almindelige platforme [18] . Det distribueres under en gratis , ikke-copyleft- licens , som gør det muligt at bruge det uden begrænsninger i udviklingen af ​​proprietære applikationer , samt til at skabe proprietære afledte systemer. Udviklere omtaler det som BSD-lignende , selvom Tcl-licensen sammenlignet med BSD-licensen pålægger færre begrænsninger.

Implementering

I øjeblikket udføres arbejdet med kernen af ​​Tcl-sproget af en gruppe udviklere [19] kaldet Tcl Core Team [20] . De seneste versioner af Tcl-oversætteren og kernebibliotekerne er tilgængelige i SourceForge.net - depotet , se listen over sourceforge-projekter inkluderet i Tcl/Tk-hoveddistributionen [21] .

Tcl-oversætteren kompilerer programmet til en mellemrepræsentation - bytecode , og fortolker den derefter. I modsætning til for eksempel Python , gemmes denne mellemrepræsentation ikke på disken, programmet kan kun gemmes i kildekode, eventuelt pakket i et StarKit- modul eller ved hjælp af en anden wrapper . Afhængigt af kompileringsmulighederne understøtter Tcl-fortolkeren måske eller ikke multithreading .

Mens de fleste begynder-Tcl-lærebøger siger noget i retning af "Tcl har kun én type variabel, strengen", er virkeligheden, at Tcl-oversættere har gjort tingene anderledes i lang tid. Internt bruger Tcl et dynamisk typesystem med automatisk transparent strengkonvertering.

Tcl er inkluderet i næsten alle Linux- distributioner . Microsoft Windows kræver en separat installationspakke.

Version Tcl 8.4 adskiller sig fra den forrige med nye funktioner (optimering af 64-bit kode, VFS, tilføjelser med hensyn til introspektion ) og en vis ydelsesforøgelse på grund af optimering af arbejdet med bytekode.

De nye funktioner tilføjet i version 8.1 (såsom multithreading-understøttelse, internationaliseringsfaciliteter og håndtering af Unicode-tegn) sænkede Tcl med omkring 19 % sammenlignet med version 8, hvilket gav et spring i hastighed. Udviklerne af 8.4 har gjort alt for at maksimere hastigheden af ​​programafviklingen for at sikre, at de ikke kun arbejder langsommere, men endda hurtigere, end det var, da version 8.0 dukkede op. Dette mål blev nået for næsten alle Tcl- og Tk-værktøjer - version 8.4 er i gennemsnit 8 gange hurtigere end version 7.6 [15] .

Den aktuelle version af TCL er 8.6.

Alternative implementeringer og dialekter

Der er alternative Tcl-implementeringer til populære virtuelle maskiner til generelle formål . Dette er en Java -fortolker - Jacl [22] (seneste version fra 2008) og Eagle-projektet [23] , som implementerer de fleste Tcl 8.4-kommandoer til CLR (byggeprogrammer til .NET 4.0 og 2.0 er tilgængelige). Eksperimenter er i gang med at oversætte Tcl-programmer til koden for den virtuelle Parrot -maskine , som er ved at blive udviklet til den sjette version af Perl [24] .

Til programmering af indlejrede systemer og indlejring i applikationer er der udviklet en speciel dialekt af Tcl - Jim [25] [26] . Dette er en fortolker, der implementerer en stor delmængde af Tcl, udvidet med yderligere objektorienterede og funktionelle programmeringsmekanismer, og optager mindre end 100 kilobyte i kompileret form.

En anden dialekt af Tcl er det mobile scriptsprog Hecl [27] , udviklet af David Welton og implementeret i Java ( J2ME ) [28] [29] . Hvad angår Android -platformen , leveres Tcl-understøttelse på den (sammen med andre scriptsprog) af: SL4A scriptinglag [30] ; der er også en indbygget Tcl-implementering for dette OS kaldet AndroWish [31] .

Fordelinger

Alle de distributioner, der er anført nedenfor, distribueres frit og er samlet af komponenter, der har en eller anden gratis licens . De fleste af dem er på tværs af platforme (undtagen WinTclTk og Tcl/Tk Aqua ), selvom Tcl/Tk normalt er en del af OS - distributionen på Unix-systemer .

  • Aktiv Tcl [32] Den mest udbredte distribution af Tcl. Som andre firmaprodukter inkluderer ActiveState et stort sæt biblioteker og udvidelser. I Windows-versioner inkluderer det WSH- integrationsværktøjer . Der er ingen værktøjer , der gør programmørens liv lettere. Virksomheden sælger TclDevKit-pakken, som indeholder værktøjer til fejlfinding og oprettelse af selvstændige programmer (sidstnævnte baseret på StarKit-teknologi ) og Komodo  , en universel IDE til scriptsprog, der inkluderer visuelle programmeringsværktøjer til Tk - formularer.
  • WinTclTk [33] Mere kompakt end ActiveTcl, en distribution fokuseret på at arbejde med XOTcl  , en objektorienteret udvidelse af Tcl. Listen over biblioteker, der er inkluderet i den, er noget smallere end i ActiveTcl, men det grundlæggende sæt er til stede her. Denne distribution inkluderer Tloona IDE [34]  , et traditionelt udviklingsmiljø, og XOTclIde [35] , et Smalltalk  -stil objektorienteret programmeringsmiljø , begge med debuggere. Også frit tilgængelig på udviklerens websted er en pakke til at skabe en enkelt eksekverbar TkWrapper-fil baseret på FreeWrap [36]  , en alternativ teknologi til StarKit baseret på simpel ZIP - komprimering. Den seneste version til dato er 8.5.6 (3. december 2009, Tcl 8.5.6).
  • TclKit [37] Det er Tcl/Tk med et kernesæt af biblioteker i én kompakt eksekverbar. Distributionen blev oprettet ved hjælp af StarKit-teknologi . Indeholder MetaKit- biblioteket , der giver dig mulighed for at manipulere indholdet af denne fil. En anden populær distribution af Tcl i én fil er eTcl [38] . dqkit- distributionen [39] er bygget på lignende principper  - en alternativ samling kendt som "TclKit på steroider", der er flere muligheder, der adskiller sig i sammensætningen af ​​biblioteker, multithreading-understøttelse osv.
  • MyTcl [40] Et komplet integreret udviklingsmiljø (IDE) i Tcl, inklusive en sprogmiljødistribution. Har evnen til at generere selvstændige applikationer i StarKit -format. Den nuværende version er 1.0 Build 8 (18. juni 2012) til Win32 og Win64 med Tcl 8.5.11 integreret i systemet. Det er i øjeblikket ikke open source .
  • AndroWish [31] Miljø til at køre Tcl/Tk-scripts og linke en tcl/tk-applikation til en apk-fil til udførelse under Android

Ansøgning

Tcl er sammen med Perl og Python blevet et af de tre klassiske scriptsprog til generelle formål. Denne treenighed optræder ikke kun som en liste over gratis distributioner kompileret i ActiveState , men også for eksempel som sprog, hvor man (udover PL/pgSQL- dialekten ) kan skrive triggere og lagrede procedurer på den populære PostgreSQL -databaseserver .

Tcl som et integreret sprog har fundet anvendelse inden for CAD ( CAD | CAM | CAE ) [41] [42] . Den bruges for eksempel som en databasetuner i Unigraphics postprocessor . Derudover er det de facto automatiserings- og integrationssprog i alle førende chipdesignsoftwarepakker ( FPGA'er og ASIC'er ).

Brug i webudvikling

I webprogrammering bruges Tcl normalt sammen med AOLServer -webserveren eller en af ​​de "lette" FastCGI -webservere som lighttpd . For at integrere Tcl med Apache er der Rivet-modulet [43] .

Især under kontrol af AOLServer er OpenACS [44]  et indholdsstyringssystem til websteder med rig udvidelsesmuligheder i Tcl-sproget, udvidet XOtcl eller projektåbent [45]  - et gruppearbejdssystem med en webgrænseflade .

Der er også projekter som TclHttpd [46] og dets efterfølger, Wub [47] , som er komplette web- frameworks . Baseret på den nye objektudvidelse af TclOO-sproget udvikles webrammeværket Woof (Web Oriented Object Framework) [48] . Et eksempel på et CMS til TclHttpd er Ucome [49] .

Ud over at blive brugt som et webapplikationsimplementeringssprog, kan Tcl bruges som et scriptsprog til at udvide eksisterende applikationer. For eksempel er moduler til Eggdrop IRC-bot skrevet på den [50] [51] .

Fordele og ulemper

Ulempen ved tidlige versioner af Tcl/Tk var uden tvivl langsom ydeevne. Versioner under 8 brugte en direkte fortolkning af kildekoden, men brug af bytekode løste dette problem. Nu, hvad angår hastighed, er Tcl ikke meget anderledes end PHP , selvom det er mærkbart ringere end sådanne scriptsprog som for eksempel Python eller Lua . Komplekse eller tidskritiske sektioner af kode anbefales at blive udført som eksterne moduler i C / C++ .

Tcl/Tk har en ukendt syntaks for programmører på "traditionelle" sprog. Det er tættere på standard Unix shell syntaks . Denne syntaks kan modificeres vilkårligt (som i andre "programmerbare programmeringssprog" såsom Forth [note 2] eller Common Lisp ). Dette kan være en fordel for en individuel programmør eller en lille gruppe af programmører, men gør Tcl/Tk næppe velegnet til brug som et generelt sprog til industriel udvikling. Selvom tilstedeværelsen af ​​standardiserede udvidelser reducerer alvoren af ​​dette problem. Tcl kan også bruges i store projekter inden for dens "økologiske niche" (indlejrede scripts, "liming"-komponenter, WEB-programmering).

Selvom Tcl har alle egenskaberne for et funktionelt sprog , udførte dets tolk før version 8.6 ikke hale-rekursionsoptimering , hvilket gjorde det vanskeligt at bruge en rent funktionel stil og reducerede dens effektivitet. Sprogets fleksibilitet gør det dog muligt at omgå dette problem ved at implementere et skin af en sådan optimering på et højt niveau [52] . Endelig giver tailcall- kommandoen, som dukkede op i testversion 8.6, dig mulighed for at bruge halerekursion uden problemer.

Den tætteste integration af Tcl med Tk -grafikbiblioteket , som ofte bruges i kombination med andre programmeringssprog, er en utvivlsom fordel ved Tcl. For at oprette GUI- indpakninger til konsolprogrammer eller pakker med konsolprogrammer kan Tcl være det bedste valg.

Indflydelse

Selvom det ikke er et udbredt programmeringssprog, har Tcl sammen med (tidligere) sprog som Lisp og Smalltalk haft en bemærkelsesværdig indflydelse på programmering. Det blev det første sprog, der fokuserede på nem indlejring i applikationer [53] .

Brugervenligheden af ​​Tk grafiske widget -bibliotek var uden sidestykke og blev populær i andre generelle scriptsprog udover Tcl . Tkinter forbliver standardværktøjet til at oprette GUI- applikationer i Python . Der er også Tk-bindingsbiblioteker for Perl [ 54] (Tkx) og Ruby [53] .

SQLite  , et letvægts SQL -databasestyringssystem, der kan integreres, blev oprindeligt udviklet som en udvidelse til Tcl [53] .

Se også

Links

På russisk

Artikler og anmeldelser Blogs dedikeret til TCL

Bøger

På russisk

original: Brent Welch, Ken Jones, Jeffrey Hobbs "Practical Programming in Tcl and Tk (4th Edition)", ISBN 0-13-038560-3 , 2003 ( elektronisk version [55] )
  • Moskvin P. V. "ABC TCL", ISBN 5-93517-130-9
  • Alexey Petrovsky, TCL (Tool Command Language), ISBN 5-901321-16-2

På engelsk

  • Clif Flynt. Tcl/Tk: En udviklervejledning . - 3. - Morgan Kaufmann, 2012. - 817 s. - (Morgan Kaufmann-serien i softwareteknik og programmering). — ISBN 9780123847171 .
2. udgave: "Tcl/Tk, Second Edition : A Developer's Guide", ISBN 1-55860-802-8 , 2003 1. udgave: Tcl/Tk for rigtige programmører, 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 Netværksprogrammering . - Packt Publishing, Limited, 2010. - 588 s. — ISBN 9781849510967 .
  • Mark Harrison, Michael McLennan, effektiv Tcl/Tk-programmering. At skrive bedre programmer i Tcl og Tk, ISBN 0-201-63474-0
  • J. Adrian Zimmer "Tcl/Tk For Programmers", ISBN 0-8186-8515-8
  • Salvatore Sanfillipo "Tcl Wise. Guide til Tcl -programmeringssproget" (Første 9 kapitler online Arkiveret 29. august 2013 på Wayback Machine )
  • Paul Raines, Jeff Tranter "Tcl/Tk in a Nutshell: A Desktop Quick Reference", ISBN 1-56592-433-9
  • David Maggiano "CGI-programmering med Tcl", ISBN 0-201-60629-1
  • JM Ivler, Kamran Husain, "Cgi Developer's Resource: Web Programming in Tcl and Perl", ISBN 0-13-727751-2

Noter

  1. . Hvis ingen af ​​implementeringerne af objektmodellen passer dig, eller du er interesseret i, hvordan den fungerer, kan du læse artiklen Creating Object Commands Arkiveret 13. maj 2007 på Wayback Machine  fra skaberne af SNIT
  2. En interessant symbiose af Forth og Tcl inden for HolonT- projektet Arkiveret 2. april 2012 på Wayback Machine , hvor Forth er oversat til Tcl-kode.
Kilder
  1. Tcl / Tk 8.6.12 UDGIVET  (engelsk) - 2021.
  2. https://www.tcl.tk/software/tcltk/8.6.html
  3. Kocjan, Beltowski, 2010 , s. 62-63.
  4. Standard Tcl-bibliotek (tcllib) . www.tcl.tk. Hentet 26. juni 2016. Arkiveret fra originalen 6. oktober 2014.
  5. Sriram Srinivasan. 7.5 Sammenligning med andre OO-sprog // Avanceret Perl-programmering . — 1. udgave. - O'Reilly , 1997. - ISBN 1-56592-220-4 .
  6. Kocjan, Beltowski, 2010 .
  7. TclOO Arkiveret 15. september 2018 på Wayback Machine i TclWiki
  8. Clyf Flynt. 8.1.7. Namespace nesting // Tcl/Tk: En udviklervejledning. — 3. udgave. - Waltham, MA : Morgan Kaufmann, 2012. - S. 215. - 792 s. — ISBN 0-12-384717-6 .
  9. se også Trin mod funktionel programmering Arkiveret 10. februar 2007 på Wayback Machine
  10. Se History of Tcl Arkiveret 10. juni 2016 på Wayback Machine
  11. Hvorfor bør du ikke bruge Tcl . Dato for adgang: 14. maj 2007. Arkiveret fra originalen 4. februar 2012.
  12. Cameron Laird, Katherine Sorez, SunWorld, USA. Tcl-stifter forlader Sun til ny virksomhed  // Computerworld. - Åbne systemer , 1998. - Nr. 07 .
  13. Robert McMillan, SunWorld. Tcl: vejen til et nyt liv  // Computerworld. - Åbne systemer , 1998. - Nr. 36 .
  14. John K. Ousterhout Scripting: Higher Level Programming for the 21st Century Arkiveret 1. februar 2010 på Wayback Machine  .
    Oversættelse af denne artikel Arkiveret 30. september 2007 på Wayback Machine  (russisk) i tidsskriftet Open Systems, nr. 3, 1998
  15. 1 2 se Tcl Benchmarks Arkiveret 21. maj 2007 på Wayback Machine
  16. Ted Smalley Bowen. Tcl: An Enterprise Variant  // Computerworld. - Åbne systemer , 1999. - Nr. 21 .
  17. Tcl Dokumentation | parray . Hentet 26. marts 2014. Arkiveret fra originalen 11. maj 2014.
  18. TCL Wiki | På hvilke platforme kører Tcl . Hentet 26. marts 2014. Arkiveret fra originalen 2. september 2013.
  19. Tcl Core Team-medlemsliste . Hentet 14. maj 2007. Arkiveret fra originalen 2. maj 2007.
  20. Tcl Core Team . Hentet 14. maj 2007. Arkiveret fra originalen 30. april 2007.
  21. Tcl hos SourceForge . Hentet 14. maj 2007. Arkiveret fra originalen 16. maj 2007.
  22. Tcl/Java-projektet, Jacl . Hentet 14. maj 2007. Arkiveret fra originalen 29. april 2007.
  23. The Eagle Project, (Extensible Adaptable Generalized Logic Engine) . Hentet 11. juni 2011. Arkiveret fra originalen 2. oktober 2011.
  24. delkl. Implementering af tcl målrettet papegøjen VM Arkiveret 22. maj 2011 på Wayback Machine ( arkiveret 24. august 2011 projektblog Wayback Machine
  25. Steve Bennett. Jim Tcl. Et lille fodaftryk Tcl-implementering // Tcl Association Press 18'th Annual Tcl Association Tcl/Tk Conference Proceedings. - Lulu.com, 2011. - S. 94-105 . — ISBN 0578098016 .
  26. Jim-tolken. En lille footprint implementering af Tcl programmeringssproget
  27. hecl.org Arkiveret 15. december 2010 på Wayback Machine : Hecl - The Mobile Scripting Language
  28. David Welton. Opret en simpel applikation med Hecl  // Free Software Magazine. — Onsdag, 31-10-2007. - Udstedelse. 20 . Arkiveret fra originalen den 30. juni 2013.
  29. Implementering af Hecl-programmeringssproget arkiveret 10. august 2013 på Wayback Machine 
  30. Om automatisering og scripting til Android . "Hacker" (18. februar 2014). Hentet 26. juni 2016. Arkiveret fra originalen 15. august 2016.
  31. 12 AndroWish . Tcl/Tk til Android . Dato for adgang: 3. december 2014. Arkiveret fra originalen 20. december 2014.
  32. ActiveTcl. Industry-Standard Tcl Distribution (utilgængeligt link) . Hentet 1. september 2013. Arkiveret fra originalen 21. august 2009. 
  33. WinTclTk. Tcl/Tk-distribution til Microsoft Windows . Hentet 5. juni 2007. Arkiveret fra originalen 22. juni 2007.
  34. Tloona Tcl/Tk IDE . Dato for adgang: 21. oktober 2008. Arkiveret fra originalen 22. marts 2009.
  35. XOTclIDE. Integreret udviklingsmiljø for XOTcl og Tcl . Hentet 15. maj 2007. Arkiveret fra originalen 21. juni 2007.
  36. FreeWrap. Opbygger selvstændige TCL/TK-eksekverbare. Ingen compiler påkrævet! . Hentet 15. maj 2007. Arkiveret fra originalen 29. juni 2014.
  37. Runtime for Tclkit-applikationen . Hentet 14. maj 2007. Arkiveret fra originalen 23. maj 2007.
  38. ETcl. Evolanes distribution af Tcl/Tk (utilgængeligt link) . Hentet 1. september 2013. Arkiveret fra originalen 1. september 2013. 
  39. dqkit . Hentet 14. maj 2007. Arkiveret fra originalen 21. maj 2007.
  40. MyTcl. Kraftig Tcl/Tk IDE . Hentet 25. marts 2013. Arkiveret fra originalen 15. maj 2013.
  41. CAD software historie Arkiveret 13. januar 2010 på Wayback Machine i TclWiki Arkiveret 19. december 2006 på Wayback Machine
  42. Moderne computerteknologi til tjeneste for Nike, Inc. Arkiveret 15. oktober 2011 på Wayback Machine i CAD og Graphics Magazine Arkiveret 25. marts 2010 på Wayback Machine , nr. 10'2000
  43. Rivet - Webscripting for Tcl'ers . Hentet 22. september 2010. Arkiveret fra originalen 27. september 2011.
  44. OpenACS. Værktøjssættet til onlinefællesskaber Arkiveret 31. august 2009 på Wayback Machine 
  45. Projekt åbent. Open-Source Enterprise Project Management Arkiveret 14. januar 2010 på Wayback Machine 
  46. tclhttpd - Tcl webserver . Hentet 30. januar 2010. Arkiveret fra originalen 25. januar 2010.
  47. Wub pure tcl HTTP1.1 server, klient og værktøjspakke . Dato for adgang: 5. januar 2010. Arkiveret fra originalen 28. april 2010.
  48. Puf. Weborienteret objektramme . Dato for adgang: 30. januar 2010. Arkiveret fra originalen 14. august 2009.
  49. Ucome. Din indholdsstyring i Tcl Arkiveret 10. februar 2014 på Wayback Machine 
  50. Darryl K. Taft. Tcl-programmeringssprog: 20 ting, du ikke ved . eWeek (31. januar 2011). Hentet: 25. juni 2016.
  51. Installation af en eggedrop på IRC - "Hacker" (21. august 2000). Hentet 25. juni 2016. Arkiveret fra originalen 13. august 2016.
  52. Tail call optimization Arkiveret 11. marts 2007 på Wayback Machine beskriver dette problem og skitserer mulige løsninger.
  53. ↑ 1 2 3 Andrew Binstock. Et kvart århundrede af Tcl . Dr. Dobb's (21. januar 2014). Hentet 25. juni 2016. Arkiveret fra originalen 7. juli 2016.
  54. Nancy Walsh. Læring Perl/Tk . - O'Reilly, 1999. - 392 s. — ISBN 9781565923140 .
  55. første udgave fuldt tilgængelig, selektivt, nyere