Tcl

tcl
Språkklass multiparadigm :
objektorienterad ,
funktionell ,
processuell ,
händelsestyrd ,
imperativ
Utförandetyp tolkad
Framträdde i 1988
Författare John Ousterhout
Filtillägg _ .tcl
Släpp
Typ system dynamisk
Blivit påverkad Shell , Lisp
påverkas Python , Ruby
Licens BSD-liknande
Hemsida tcl.tk
 Mediafiler på Wikimedia Commons

Tcl (från engelska  Tool Command Language  - "command language of tools", läs "ticle" eller "ti-si-el") är ett skriptspråk på hög nivå .

Tcl används ofta tillsammans med grafikbiblioteket Tk ( Tool Kit) . Tcl / Tk-paketet på ryska kallas ibland "Tak-tikl" (den engelska versionen är "tikl-tok").

Språkets tillämpningsområde är snabb prototyping , skapande av grafiska gränssnitt för konsolprogram (mjukvarupaket), inbäddning i applikationsprogram, testning . Tcl används också i webbutveckling .

Funktioner

I Tcl kan data av alla typer, inklusive programkod, manipuleras som strängar. Detta gör det till ett språk med naturligt stöd för metaprogrammering . Detta programmeringsparadigm togs i beaktande under utvecklingen och utvecklingen av språket.

Ett Tcl-program består av kommandon separerade av rader eller semikolon. Varje kommando består av en uppsättning fält separerade med mellanslag. Det första fältet måste vara namnet på kommandot, och de valfria återstående fälten är de argument som skickas till det kommandot. Kommandot returnerar ett värde, ibland tomt. Det vill säga, liksom Lisp , använder Tcl prefixnotation.

Det finns inga nyckelord som sådana - konceptet med ett kommando i Tcl liknar konceptet med en procedur eller funktion i vanliga programmeringsspråk. Detta gäller även språkkontrollkonstruktioner. I kombination med den elementära syntaxen gör detta språket väl utbyggbart, inklusive bibliotek skrivna på andra språk som C / C++ eller Java .

Tcl har också en välimplementerad händelsebaserad programkontrollmodell . Händelser kan genereras av en timer, när data dyker upp i en kanal, när värdet på en variabel ändras, när ett externt program avslutas, eller helt enkelt när användaren arbetar med Tk-gränssnittet. Du kan ställa in dina egna händelser och hantera dem.

Liksom de flesta moderna skriptspråk innehåller Tcl avancerade verktyg för att arbeta med reguljära uttryck, fungerar med associativa arrayer och andra dynamiska datastrukturer.

Basic Tcl stödde inte OOP förrän version 8.6, men på grund av att det är lätt att utöka syntaxen för språket finns det många tillägg av Tcl med objektorienterade mekanismer, implementerade som länkbibliotek i C eller i Tcl själv. Före version 8.5 var de vanligaste: incr Tcl , XOTcl och Snit [3] . En annan implementering av OOP-mekanismer som använder Tcl själv, inkluderad i Tcl-standardbiblioteket [4] , är STOOOP- biblioteket [5] . Sedan version 8.5 finns en ny implementering av OOP för Tcl, TclOO , inkluderad sedan version 8.6 i språkkärnan [6] [not 1] :

förlängning genomförs på egenskaper hos den använda modellen
XOTcl C kraftfullt objektsystem med dynamisk definition av klasser och metoder, nära CLOS
inkr Tcl C OOP i en C++- stil , utökad med introduktionen av konfiguratorer
Snit tcl objektmodellimplementering baserad på delegering , inte arv
STOPP tcl OOP i en stil så nära C++ som möjligt, en klassväxlingsmekanism har också introducerats
TclOO [7] C Ett kompakt men kraftfullt objektorienterat system som kan användas både direkt och som ett ramverk för att bygga avancerade OOP-modeller.

Namnutrymmen stöds på språkets kärnnivå. När OOP-mekanismer implementeras i Tcl, används stöd för kapslingshierarkin av namnutrymmen på detta språk [8] .

Tcl är lätt att programmera i en funktionell stil : den tillhandahåller mekanismer som funktioner av högre ordning och funktionsabstraktioner [9] , även om Tcl sällan används på detta sätt. Här är ett exempel på hur två funktioner kan vara sammansatta :

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

I version 8.5 introducerade Tcl även kommandot applicera , vilket gör denna programmeringsstil mycket enklare.

Här är ett exempel på dess användning från den officiella dokumentationen:

proc map { lambda lista } { ställ in resultat {} för varje objekt $list { lappend resultat [apply $lambda $item ] } return $result } map { x { return [ stränglängd $ x ] : $x }} { a bb ccc dddd }

resultatet av detta exempel blir

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

Historik

Språket utvecklades av John Ousterhout medan han var vid University of California i Berkeley. Det ursprungliga målet var att skapa ett universellt språk för inbäddning i konsolapplikationer . Efter detta utökade Ousterhout sitt språk med verktyg för att skapa grafiska gränssnitt  - så här föddes Tcl / Tk. [tio]

Under fyra års utveckling inom universitetets väggar har Tikl-communityt vuxit till flera hundra tusen programmerare. 1993 utvecklades det första objektorienterade tillägget, incr Tcl .

1994 blev Ousterhout huvudingenjör i SunScript-projektet. Under de kommande fyra åren, som blev ett av Sun Corporations projekt, förblev Tikl inte bara ett fritt distribuerat system, utan förbättrades också avsevärt, blev plattformsoberoende .

Richard Stallman gav ett betydande slag mot språkets popularitet när han i september 1994 i ett antal nyhetsgrupper publicerade rekommendationen "Varför du inte bör använda Tcl" [11] . I den bygger han på påståendena att "Tcl är inte utformat som ett seriöst programmeringsspråk" och "Tcl har en speciell syntax som lockar hackare på grund av dess enkelhet. Men Tcl-syntaxen verkar märklig för de flesta användare." , och även i samband med marknadsföringen av Emacs Lisp , utfärdade en dom: " GNU- projektet kommer inte att använda Tcl i GNU-programvara" . Förutom subjektiva anspråk på språkets utformning, påpekade Stallman en objektiv nackdel vid den tiden - låg prestanda.

Tillväxten i antalet utvecklare som aktivt använder tikl uppgick dock till 600% under denna period.

1998, på grund av Java -boomen och den hårda konkurrensen i samband med den, kunde företaget inte längre ägna samma uppmärksamhet åt tikl. John Ousterhout lämnar Sun för att bilda (med Sun-stöd) Scriptics, och fortsätter utvecklingen av Tcl/Tk-teknologi [12] [13] . Det var ett av de första kommersiella mjukvaruföretagen som fokuserade på fri programvara .

I mars 1998 skrev Ousterhout den numera klassiska artikeln "Scripting: High-Level Programming for the 21st Century" [14] , där han kallade scripting languages ​​system integration languages, eftersom de är inriktade främst på att arbeta med operativa objekt. miljö och inte med elementära data. Detta tillåter, utan att skriva tusentals rader kod , att "limma" sådana objekt till ett med två eller tre kommandon.

Samma år vann han två stora priser för utvecklingen av Tcl-språket. Den första är ACM Software System Award, som erkänner "den mest betydande programvaran." Priset har tidigare hedrat grundläggande system som TCP/IP- protokollstacken , det första kalkylarket , den första relationsdatabasen , World Wide Web , Unix , PostScript och Smalltalk . Den andra är den årliga USENIX Software Tools User Group (STUG) Award som ett erkännande för enastående programvara.

1999 släpptes Tcl 8.0 - i den här implementeringen dök kompilering till bytecode först upp , vilket gjorde det möjligt att öka hastigheten med 6 gånger [15] . Nästa version av Tcl 8.1 introducerar fullt stöd för Unicode och introducerar multithreading för första gången . I samband med detta släpp sa Ousterhout:

"I allmänhet flyttar 8.1 Tcl till en ny kategori, eftersom den nu kan användas för serverapplikationer. C, C++ och Java kan fortfarande användas för att bygga de prestandakritiska delarna av applikationer, medan Tcl kan användas för att integrera och bygga front-end-komponenter." [16]

År 2000 döptes Scriptics om till Ajuba Solutions och köptes sedan av Interwoven, som inte var intresserad av att arbeta med fri programvara . I detta avseende överfördes utvecklingen av Tcl till programmeringsgemenskapen. Så här bildades Tcl Core Team .

Vid den nionde Tcl/Tk-konferensen i Vancouver introducerades StarKit virtuella filsystem , vilket ger ett nytt, användarvänligt sätt att distribuera Tcl-program.

Tcl-syntax

Manus kommandon separerade av rader eller semikolon (;). Team ord separerade med mellanslag. kommandonamn argument1 argument2 argumentN

Det första ordet är namnet på kommandot, resten är dess argument. Alla argument kan ersättas av ett annat kommando inom hakparenteser. Eventuella argument i klammerparenteser skickas till kommandot som det är, som ett enda argument.

Symboler av särskild betydelse

  • $  - Orsakar substitution av variabelvärde.
  • []  - Orsakar ersättning av resultatet av kommandoexekveringen inom parentes.
  • ""  - grupperar argumenten till ett med ersättning av variabelvärden.
  • {}  - grupperar argumenten till ett utan att ersätta variablernas värden.
  • \  - undkommer nästa tecken eller orsakar kontrollteckensersättning.
  • #  - början av en enradskommentar, måste vara efter ett oescapet nyradstecken eller ";" (semikolon).

Anteckningar om skripttolkningsprocessen

  • Inbrytning i ord, ersättning av variabelvärden och resultat av kommandoexekvering utförs i ett kommandopass.
  • Alla tecken inom parentesen {} och citattecken "" behandlas som ett ord.
  • Det första ordet i kommandot behandlas som en inbyggd eller definierad procedur.

Kommandoexempel

  • Tilldelning betecknas med ordet set , inte likhetstecknet.

Syntax:

ställ in variabelt värde

Exempel:

sätt en 2 :a set b 3
  • En kommentar indikeras med #

Syntax:

# kommentarstext

Exempel:

# är en kommentar
  • Utmatning (utskrift) implementeras av kommandot puts

Syntax:

sätta uttryck

Exempel:

sätter "Hej! Det är jag." sätter 123 sätter $a sätter "b = $b"
  • While -slingan implementeras med while -kommandot , som tar två argument. Det första är ett Tcl-uttryck (uttryck är faktiskt skrivna i ett miniatyriserat språk med matematik och jämförelser i C -stil ). Det andra argumentet är skriptet som ska köras vid varje iteration av . Den är vanligtvis placerad i lockiga hängslen för att undvika omedelbar avrättning.

Syntax:

medan { Tcl_Expression_With_Boolean_Value } { TclCommand otherTclCommand ... ... }

Exempel:

medan { $x < 10 } { sätter $x incr x }
  • Villkorligt kommando

Syntax:

if { Expression_Tcl_With_Boolean_Value } { Tcl kommando }

Exempel:

om { $x < 0 } { ställ in x 0 }
  • Filialkommando

Exempel:

switch - glob -- $var { { se } - { såg } - { sett } { sätter "Allt betyder samma sak!" } }
  • Kommandot kan till exempel inte ha några argument
pwd

returnerar helt enkelt den aktuella arbetskatalogen. Och laget

ställ in wdir [ pwd ]

du lagrar namnet på den aktuella katalogen i variabeln wdir .

  • Kommandot kan till exempel returnera en lista
glob mönster

returnerar en lista med filnamn i den aktuella katalogen som matchar mönstret Pattern .

Procedurer

Förfaranden definieras enligt följande

proc ProcedureName { Argument List } { }

Associativa arrayer

Följande kodavsnitt skapar och initierar en associativ array (även kallad karta, ordbok eller hash på andra språk).

sätta huvudstad ( Frankrike ) Paris satte huvudstad ( Italien ) Rom satte huvudstad ( Tyskland ) Berlin satte huvudstad ( Polen ) Warszawa satte huvudstad ( Ryssland ) Moskva satte huvudstad ( Spanien ) Madrid

För att fråga och visa ett av värdena för en associativ array, använd

sätter $capital ( Italien )

En lista över alla länder (arraynycklar) kan erhållas med kommandot

array names kapital

Resultatet kommer inte att sorteras eftersom Tcl-matriser är baserade på hashtabeller .

Polen Spanien Ryssland Tyskland Italien Frankrike

Sortering kan göras med kommandot

lsort [ matrisnamn versal ]

För att referera till en array (lämna den som en referens), använd namnet på den innehållande variabeln:

proc demo arrName { upvar 1 $arrName arr ; # knyt referensen till ett lokalt namn #gör något med arr }

För att komma åt en array efter värde, använd array get eller array set . Till exempel, för att kopiera en array till en annan:

array set Newarr [array få Oldarr ]

Tcl 8.5 introducerade arrayer som skickades av värde-ordböcker ( dict ).

För att konvertera en skalär variabel till en array och vice versa, ta bort den befintliga variabeln med kommandot unset .

Variabelt omfattning

Som standard är endast de variabler som definieras i proceduren synliga i proceduren. Utanför definitionen av en procedur är dess variabler inte tillgängliga förutom genom parameteröverföringsmekanismen. Det är möjligt att ha variabler i en procedur med samma namn som i huvudprogrammet, medan värdena för dessa variabler kommer att skilja sig, i själva verket kommer de att vara olika variabler. För att ändra detta beteende används de globala eller upvar- kommandona .

Exempel

Hej världen!

Hej, världsprogrammet ser ut så här

sätter "Hej värld!"

eller så

sätter { Hej världen ! _ }

Arrayer

Åtkomst till arrayelement

Visar värdet på arrayelementet OldArray(precision), vars namn (array) ges av den nya variabeln NewArray

set NewArray OldArray sätter [set $ { NewArray }( precision )] Addering av tal i en matris

Metod (A) - Addition med 'foreach' loop

ange nummer { 1 2 3 4 5 6 7 8 9 10 } ange resultat 0 för varje nummer $numbers { set resultat [expr { $result + $number }] } sätter $result

Metod (B) - Ett mycket mer elegant sätt att använda kommandot 'join'

ställ in siffror { 1 2 3 4 5 6 7 8 9 10 } sätter [expr [ join $numbers + ]] Lista innehållet i en array

Arrayen tcl_platform innehåller information om egenskaperna för plattformen som Tcl körs på. En lista över fastighetsnamn kan erhållas med

arraynamn tcl_plattform _

Följande utdrag matar ut dem tillsammans med deras värden:

foreach i [ arraynamn tcl_plattform ] { sätter "$i = $tcl_platform($i)" }

Om fastigheter ska sorteras

foreach i [ lsort [ arraynamn tcl_plattform ] ] { sätter "$i = $tcl_platform($i)" }

Kommandokapsling visas här. De kan kapslas till vilket djup som helst. Ett liknande resultat kan uppnås med parray-kommandot [17] som introduceras i Tcl 8.5.

Genomskärning av uppsättningar

Filterproceduren returnerar de element i listan för vilka skriptet utvärderas till TRUE:

proc filter { list script } { set res {} föreach e $list {if {[uplevel 1 $script $e ]} { lappend res $e }} return $res }

Kommandot uplevel 1 utvärderar ett uttryck i sammanhanget där ordfiltret kallas .

Proceduren  är en förkortning för att inkludera uppsättningar :

proc i { lista e } { expr {[ lsearch - exakt $list $e ] >= 0 } }

Undersökning:

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

Faktoriell

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

Detta visar att kommandonamnet kan vara vilken sträng som helst, såväl som operatorn ?: som är känd från andra språk .

Implementering, distributioner, verktyg

Tcl är ett tolkat språk, det vill säga Tcl- program är redo att köras utan kompilering och länkning .

Tcl-tolken har porterats till de flesta vanliga plattformar [18] . Den distribueras under en gratis , icke-copyleft- licens , som gör att den kan användas utan begränsningar i utvecklingen av proprietära applikationer , såväl som för att skapa proprietära derivatsystem. Utvecklare hänvisar till det som BSD-liknande , även om Tcl-licensen, jämfört med BSD-licensen, innebär färre begränsningar.

Implementering

För närvarande utförs arbetet med kärnan i Tcl-språket av en grupp utvecklare [19] som kallas Tcl Core Team [20] . De senaste versionerna av Tcl-översättaren och kärnbiblioteken är tillgängliga i SourceForge.net - förrådet , se listan över sourceforge-projekt som ingår i Tcl/Tk-huvuddistributionen [21] .

Tcl-översättaren kompilerar programmet till en mellanrepresentation - bytecode , och tolkar den sedan. Till skillnad från till exempel Python , sparas inte denna mellanrepresentation på disk, programmet kan bara lagras i källkod, eventuellt paketeras i en StarKit- modul eller med någon annan wrapper . Beroende på kompileringsalternativen kan Tcl-tolken stödja multithreading eller inte .

Medan de flesta Tcl-läroböcker för nybörjare säger något i stil med "Tcl har bara en typ av variabel, strängen", är verkligheten att Tcl-översättare har gjort saker annorlunda under lång tid. Internt använder Tcl ett dynamiskt typsystem med automatisk transparent strängkonvertering.

Tcl ingår i nästan alla Linux- distributioner . Microsoft Windows kräver ett separat installationspaket.

Version Tcl 8.4 skiljer sig från den tidigare med nya funktioner (optimering av 64-bitars kod, VFS, tillägg vad gäller introspektion ) och viss prestandaökning på grund av optimering av arbete med bytekod.

De nya funktionerna som lagts till i version 8.1 (som multitrådsstöd, internationaliseringsmöjligheter och hantering av Unicode-tecken) saktade ner Tcl med cirka 19 % jämfört med version 8, vilket gav farten snabbare. Utvecklarna av 8.4 har gjort allt för att maximera hastigheten för programexekveringen, för att säkerställa att de inte bara fungerar långsammare, utan även snabbare än när version 8.0 dök upp. Detta mål uppnåddes för nästan alla Tcl- och Tk-verktyg - version 8.4 är i genomsnitt 8 gånger snabbare än version 7.6 [15] .

Den nuvarande versionen av TCL är 8.6.

Alternativa implementeringar och dialekter

Det finns alternativa Tcl-implementationer för populära virtuella maskiner för allmänna ändamål . Detta är en Java -tolk - Jacl [22] (senaste versionen från 2008), och Eagle-projektet [23] , som implementerar de flesta Tcl 8.4-kommandon för CLR (byggd för .NET 4.0 och 2.0 är tillgängliga). Experiment pågår för att översätta Tcl-program till koden för den virtuella Parrot -maskinen , som utvecklas för den sjätte versionen av Perl [24] .

För programmering av inbyggda system och inbäddning i applikationer har en speciell dialekt av Tcl utvecklats - Jim [25] [26] . Detta är en tolk som implementerar en stor delmängd av Tcl, utökad med ytterligare objektorienterade och funktionella programmeringsmekanismer, och upptar mindre än 100 kilobyte i kompilerad form.

En annan dialekt av Tcl är det mobila skriptspråket Hecl [27] , utvecklat av David Welton och implementerat i Java ( J2ME ) [28] [29] . När det gäller Android- plattformen tillhandahålls Tcl-stöd på den (tillsammans med andra skriptspråk) av: SL4A skriptlager [30] ; det finns också en inbyggd Tcl-implementering för detta operativsystem som heter AndroWish [31] .

Distributioner

Alla distributioner som listas nedan distribueras fritt och är sammansatta av komponenter som har en eller annan gratis licens . De flesta av dem är plattformsoberoende (förutom WinTclTk och Tcl/Tk Aqua ), även om Tcl/Tk vanligtvis är en del av OS - distributionen på Unix-system .

  • Aktiv Tcl [32] Den mest använda distributionen av Tcl. Liksom andra företagsprodukter inkluderar ActiveState en stor uppsättning bibliotek och tillägg. I Windows-versioner innehåller den WSH- integreringsverktyg . Det finns inga verktyg som gör programmerarens liv enklare. Företaget säljer TclDevKit-paketet, som innehåller verktyg för att felsöka och skapa fristående program (det senare baserade på StarKit-teknologi ) och Komodo  , en universell IDE för skriptspråk som inkluderar visuella programmeringsverktyg för Tk- former.
  • WinTclTk [33] Mer kompakt än ActiveTcl, en distribution fokuserad på att arbeta med XOTcl  , en objektorienterad förlängning av Tcl. Listan över bibliotek som ingår i den är något smalare än i ActiveTcl, men grunduppsättningen finns här. Denna distribution inkluderar Tloona IDE [34]  , en traditionell utvecklingsmiljö, och XOTclIde [35] , en  objektorienterad programmeringsmiljö i Smalltalk -stil , båda med debuggers. Också fritt tillgängligt på utvecklarens webbplats är ett paket för att skapa en enda körbar TkWrapper-fil baserad på FreeWrap [36]  , en alternativ teknik till StarKit baserad på enkel ZIP - komprimering. Den senaste versionen hittills är 8.5.6 (3 december 2009, Tcl 8.5.6).
  • TclKit [37] Det är Tcl/Tk med en kärnuppsättning av bibliotek i en kompakt körbar fil. Distributionen skapades med hjälp av StarKit-teknik . Innehåller MetaKit- biblioteket som låter dig manipulera innehållet i den här filen. En annan populär distribution av Tcl i en fil är eTcl [38] . Dqkit- distributionen [39] är byggd på liknande principer  - en alternativ sammansättning känd som "TclKit på steroider", det finns flera alternativ som skiljer sig åt i sammansättningen av bibliotek, multithreading-stöd, etc.
  • MyTcl [40] En komplett integrerad utvecklingsmiljö (IDE) i Tcl, inklusive en språkmiljödistribution. Har förmågan att generera fristående applikationer i StarKit- format. Den nuvarande versionen är 1.0 Build 8 (18 juni 2012) för Win32 och Win64 med Tcl 8.5.11 integrerad i systemet. Det är för närvarande inte öppen källkod .
  • AndroWish [31] Miljö för att köra Tcl/Tk-skript och länka en tcl/tk-applikation till en apk-fil för körning under Android

Applikation

Tcl har tillsammans med Perl och Python blivit ett av de tre klassiska skriptspråken för allmänna ändamål. Denna treenighet visas inte bara som en lista över gratisdistributioner som sammanställts i ActiveState , utan också, till exempel, som språk där man (förutom PL/pgSQL- dialekten ) kan skriva utlösare och lagrade procedurer för den populära PostgreSQL -databasservern .

Tcl som ett inbäddningsbart språk har hittat tillämpning inom området CAD ( CAD | CAM | CAE ) [41] [42] . Den används till exempel som en databastuner i Unigraphics postprocessor . Dessutom är det de facto automations- och integrationsspråket i alla ledande programvarupaket för chipdesign ( FPGA och ASIC ).

Användning i webbutveckling

I webbprogrammering används Tcl vanligtvis tillsammans med AOLServers webbserver eller en av de "lätta" FastCGI -webbservrarna som lighttpd . För att integrera Tcl med Apache finns Rivet-modulen [43] .

Under kontroll av AOLServer, i synnerhet, är  OpenACS [ 44] ett innehållshanteringssystem för webbplatser med rik utökbarhet i Tcl-språket, utökat XOtcl eller projektöppet [45]  - ett grupparbetssystem med ett webbgränssnitt .

Det finns också projekt som TclHttpd [46] och dess efterföljare, Wub [47] , som är kompletta webbramverk . Baserat på den nya objektförlängningen av TclOO-språket utvecklas webbramverket Woof (Web Oriented Object Framework) [48] . Ett exempel på ett CMS för TclHttpd är Ucome [49] .

Förutom att användas som ett implementeringsspråk för webbapplikationer kan Tcl användas som ett skriptspråk för att utöka befintliga applikationer. Till exempel skrivs moduler för Eggdrop IRC-boten på den [50] [51] .

Fördelar och nackdelar

Nackdelen med tidiga versioner av Tcl/Tk var utan tvekan långsam prestanda. Versioner under 8 använde en direkt tolkning av källkoden, men att använda bytekod löste detta problem. Nu när det gäller hastighet skiljer sig Tcl inte mycket från PHP , även om det är märkbart sämre än sådana skriptspråk som till exempel Python eller Lua . Komplexa eller tidskritiska avsnitt av kod rekommenderas att exekveras som externa moduler i C / C++ .

Tcl/Tk har en obekant syntax för programmerare på "traditionella" språk. Det är närmare den vanliga Unix- skalsyntaxen . Denna syntax kan modifieras godtyckligt (som i andra "programmerbara programmeringsspråk" som Forth [not 2] eller Common Lisp ). Detta kan vara en fördel för en enskild programmerare eller en liten grupp programmerare, men gör att Tcl/Tk knappast lämpar sig för användning som allmänspråk för industriell utveckling. Även om förekomsten av standardiserade tillägg minskar svårighetsgraden av detta problem. Tcl kan även användas i stora projekt inom dess "ekologiska nisch" (inbäddade skript, "limning"-komponenter, WEB-programmering).

Även om Tcl har alla egenskaper hos ett funktionellt språk , utförde dess tolk före version 8.6 inte svansrekursionsoptimering , vilket gjorde det svårt att använda en rent funktionell stil och minskade dess effektivitet. Språkets flexibilitet gör det dock möjligt att kringgå detta problem genom att implementera en sken av en sådan optimering på hög nivå [52] . Slutligen låter kommandot tailcall , som dök upp i testversion 8.6, dig använda svansrekursion utan problem.

Den närmaste integrationen av Tcl med Tk -grafikbiblioteket , som ofta används i kombination med andra programmeringsspråk, är en otvivelaktig fördel med Tcl. För att skapa GUI - omslag för konsolprogram eller paket med konsolprogram kan Tcl vara det bästa valet.

Inflytande

Även om det inte är ett allmänt använt programmeringsspråk, har Tcl, tillsammans med (tidigare) språk som Lisp och Smalltalk , haft ett betydande inflytande på programmering. Det blev det första språket fokuserat på enkel inbäddning i applikationer [53] .

Användarvänligheten för det grafiska widgetbiblioteket Tk var oöverträffad och blev populär i andra allmänna skriptspråk förutom Tcl . Tkinter förblir standardverktyget för att skapa GUI- applikationer i Python . Det finns också Tk-bindningsbibliotek för Perl [ 54] (Tkx) och Ruby [53] .

SQLite  , ett inbäddningsbart lättviktigt SQL- databashanteringssystem, utvecklades ursprungligen som en förlängning till Tcl [53] .

Se även

Länkar

På ryska

Artiklar och recensioner Bloggar dedikerade till TCL

Böcker

På ryska

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å engelska

  • Clif Flynt. Tcl/Tk: En utvecklarguide . - 3. - Morgan Kaufmann, 2012. - 817 sid. - (Morgan Kaufmann-serien i mjukvaruteknik och programmering). — ISBN 9780123847171 .
2:a upplagan: "Tcl/Tk, Second Edition : A Developer's Guide", ISBN 1-55860-802-8 , 2003 1:a upplagan: Tcl/Tk för riktiga programmerare, 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 Programmering Cookbook ", ISBN 1-84951-298-1 , 2011
  • Wojciech Kocjan, Piotr Beltowski. Tcl 8.5 Nätverksprogrammering . - Packt Publishing, Limited, 2010. - 588 sid. — ISBN 9781849510967 .
  • Mark Harrison, Michael McLennan, effektiv Tcl/Tk-programmering. Skriva bättre program i Tcl och Tk, ISBN 0-201-63474-0
  • J. Adrian Zimmer "Tcl/Tk For Programmers", ISBN 0-8186-8515-8
  • Salvatore Sanfillipo "Tcl Wise. Guide till Tcl-programmeringsspråket" ( Första 9 kapitlen online Arkiverad 29 augusti 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

Anteckningar

  1. . Om ingen av implementeringarna av objektmodellen passar dig, eller om du är intresserad av hur den fungerar, kan du läsa artikeln Skapa objektkommandon Arkiverad 13 maj 2007 på Wayback Machine från  skaparna av SNIT
  2. En intressant symbios av Forth och Tcl inom HolonT- projektet Arkiverad 2 april 2012 på Wayback Machine , där Forth översätts till Tcl-kod.
Källor
  1. Tcl / Tk 8.6.12 släppt  (engelska) - 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. Hämtad 26 juni 2016. Arkiverad från originalet 6 oktober 2014.
  5. Sriram Srinivasan. 7.5 Jämförelse med andra OO-språk // Avancerad Perl-programmering . — 1:a upplagan. - O'Reilly , 1997. - ISBN 1-56592-220-4 .
  6. Kocjan, Beltowski, 2010 .
  7. TclOO Arkiverad 15 september 2018 på Wayback Machine i TclWiki
  8. Clyf Flynt. 8.1.7. Namnområdeskapsling // Tcl/Tk: En utvecklarguide. — 3:e upplagan. - Waltham, MA : Morgan Kaufmann, 2012. - P. 215. - 792 sid. — ISBN 0-12-384717-6 .
  9. se även Steg mot funktionell programmering Arkiverad 10 februari 2007 på Wayback Machine
  10. Se History of Tcl Arkiverad 10 juni 2016 på Wayback Machine
  11. Varför ska du inte använda Tcl . Datum för åtkomst: 14 maj 2007. Arkiverad från originalet den 4 februari 2012.
  12. Cameron Laird, Katherine Sorez, SunWorld, USA. Tcl-grundare lämnar Sun för nyföretagande  // Computerworld. - Öppna system , 1998. - Nr 07 .
  13. Robert McMillan, SunWorld. Tcl: vägen till ett nytt liv  // Computerworld. - Öppna system , 1998. - Nr 36 .
  14. John K. Ousterhout Skriptering: Programmering på högre nivå för det 21:a århundradet Arkiverad 1 februari 2010 på Wayback Machine  .
    Översättning av denna artikel Arkiverad 30 september 2007 på Wayback Machine  (ryska) i tidskriften Open Systems, nr 3, 1998
  15. 1 2 se Tcl Benchmarks Arkiverad 21 maj 2007 på Wayback Machine
  16. Ted Smalley Bowen. Tcl: En företagsvariant  // Computerworld. - Öppna system , 1999. - Nr 21 .
  17. Tcl Dokumentation | parraya . Hämtad 26 mars 2014. Arkiverad från originalet 11 maj 2014.
  18. TCL Wiki | På vilka plattformar körs Tcl . Hämtad 26 mars 2014. Arkiverad från originalet 2 september 2013.
  19. Tcl Core Team-medlemslista . Hämtad 14 maj 2007. Arkiverad från originalet 2 maj 2007.
  20. Tcl kärna laget . Hämtad 14 maj 2007. Arkiverad från originalet 30 april 2007.
  21. Tcl på SourceForge . Hämtad 14 maj 2007. Arkiverad från originalet 16 maj 2007.
  22. Tcl/Java-projektet, Jacl . Hämtad 14 maj 2007. Arkiverad från originalet 29 april 2007.
  23. Örnen projekterar, (Utvidgbar anpassningsbar generaliserad logikmotor) . Hämtad 11 juni 2011. Arkiverad från originalet 2 oktober 2011.
  24. delkl. Implementering av tcl riktad mot papegojan VM Arkiverad 22 maj 2011 på Wayback Machine ( arkiverad 24 augusti 2011 projektblogg Wayback Machine
  25. Steve Bennett. Jim Tcl. A Small Footprint Tcl Implementation // Tcl Association Press 18:e årliga Tcl Association Tcl/Tk Conference Proceedings. - Lulu.com, 2011. - S. 94-105 . — ISBN 0578098016 .
  26. Jim Tolken. En liten footprint-implementering av programmeringsspråket Tcl
  27. hecl.org Arkiverad 15 december 2010 på Wayback Machine : Hecl - The Mobile Scripting Language
  28. David Welton. Skapa en enkel applikation med Hecl  // Free Software Magazine. — Ons, 2007-10-31. - Problem. 20 . Arkiverad från originalet den 30 juni 2013.
  29. Implementering av Hecl-programmeringsspråket arkiverat 10 augusti 2013 på Wayback Machine 
  30. Om automatisering och skript för Android . "Hacker" (18 februari 2014). Hämtad 26 juni 2016. Arkiverad från originalet 15 augusti 2016.
  31. 12 AndroWish . Tcl/Tk för Android . Datum för åtkomst: 3 december 2014. Arkiverad från originalet 20 december 2014.
  32. ActiveTcl. Industry-Standard Tcl Distribution (inte tillgänglig länk) . Hämtad 1 september 2013. Arkiverad från originalet 21 augusti 2009. 
  33. WinTclTk. Tcl/Tk-distribution för Microsoft Windows . Hämtad 5 juni 2007. Arkiverad från originalet 22 juni 2007.
  34. Tloona Tcl/Tk IDE . Tillträdesdatum: 21 oktober 2008. Arkiverad från originalet den 22 mars 2009.
  35. XOTclIDE. Integrerad utvecklingsmiljö för XOTcl och Tcl . Hämtad 15 maj 2007. Arkiverad från originalet 21 juni 2007.
  36. FreeWrap. Bygger fristående TCL/TK-körbara filer. Ingen kompilator krävs! . Hämtad 15 maj 2007. Arkiverad från originalet 29 juni 2014.
  37. Tclkit-programkörning . Hämtad 14 maj 2007. Arkiverad från originalet 23 maj 2007.
  38. ETcl. Evolanes distribution av Tcl/Tk (inte tillgänglig länk) . Hämtad 1 september 2013. Arkiverad från originalet 1 september 2013. 
  39. dqkit . Hämtad 14 maj 2007. Arkiverad från originalet 21 maj 2007.
  40. MyTcl. Kraftfull Tcl/Tk IDE . Hämtad 25 mars 2013. Arkiverad från originalet 15 maj 2013.
  41. CAD-programvaruhistorik Arkiverad 13 januari 2010 på Wayback Machine i TclWiki Arkiverad 19 december 2006 på Wayback Machine
  42. Modern datorteknik i tjänst av Nike, Inc. Arkiverad 15 oktober 2011 på Wayback Machine i CAD och Graphics Magazine Arkiverad 25 mars 2010 på Wayback Machine , nr 10'2000
  43. Rivet - Webscripting för Tcl'ers . Hämtad 22 september 2010. Arkiverad från originalet 27 september 2011.
  44. OpenACS. Verktygslådan för onlinegemenskaper Arkiverad 31 augusti 2009 på Wayback Machine 
  45. projektet öppet. Open-Source Enterprise Project Management Arkiverad 14 januari 2010 på Wayback Machine 
  46. tclhttpd - Tcl webbserver . Hämtad 30 januari 2010. Arkiverad från originalet 25 januari 2010.
  47. Wub pure tcl HTTP1.1 server, klient och verktygssvit . Tillträdesdatum: 5 januari 2010. Arkiverad från originalet den 28 april 2010.
  48. Uff. Web Oriented Object Framework . Datum för åtkomst: 30 januari 2010. Arkiverad från originalet den 14 augusti 2009.
  49. Ucome. Din innehållshantering i Tcl Arkiverad 10 februari 2014 på Wayback Machine 
  50. Darryl K. Taft. Tcl-programmeringsspråk: 20 saker du inte vet . eWeek (31 januari 2011). Hämtad: 25 juni 2016.
  51. Installera en äggdroppe på IRC - "Hacker" (21 augusti 2000). Hämtad 25 juni 2016. Arkiverad från originalet 13 augusti 2016.
  52. Tail call optimization Arkiverad 11 mars 2007 på Wayback Machine beskriver detta problem och skisserar möjliga lösningar.
  53. ↑ 1 2 3 Andrew Binstock. Ett kvarts århundrade av Tcl . Dr. Dobb's (21 januari 2014). Hämtad 25 juni 2016. Arkiverad från originalet 7 juli 2016.
  54. Nancy Walsh. Lär dig Perl/Tk . - O'Reilly, 1999. - 392 sid. — ISBN 9781565923140 .
  55. första upplagan fullt tillgänglig, selektivt, nyare