Tcl (oficjalnie ang. Tool Command Language) to w rzeczywistości wysokopoziomowa biblioteka w C z 20 letnią historią (inny nieoficjalny skrót to ang. The C Library), która rozwiązuje wiele problemów pojawiających się przy tworzeniu złożonych systemów. Jak popatrzy się na jej API (http://www.tcl.tk/man/tcl8.5/TclLib/contents.htm) to znajdzie się tam wieloplatformowe abstrakcje takich problemów jak: systemu I/O, system plików, programowanie zdarzeniowe i wielowątkowe, arytmetyka o definiowalnej precyzji, alokatory pamięci, zarządzanie stringami z pełnym wsparcie dla UTF-8 (w tym regexp), struktury danych: listy, wektory, tablice hashujące, zliczanie referencji, limitowanie wykorzystania zasobów, debugowanie, parsowanie wyrażeń arytmetycznych, modułowe budowanie i linkowanie kodu. Bibliotece Tcl towarzyszy chyba nawet popularniejszy od niej wieloplatformowy toolkit okienkowy Tk i równie znany pakiet Expect do automatyzacji interaktywnych programów programów terminalowych (jest on podstawą wielu środowisk do automatyzacji testów oprogramowania i sprzętu używanych np. w GCC/GDB, Intelu, Motoroli, Cisco, AMD, czy open-source DejaGNU).
Ze względu na jakość tego kodu biblioteka Tcl i Tk otrzymała prestiżowe nagrody ACM i USENIX - jej kod jest naprawdę wspaniałym przykładem jak należy pisać w C.
Tcl: award-winning software
In the spring of 1998 I learned the wonderful news that Tcl had won two major awards. The first is the ACM Software System Award, awarded each year for "a software system that has had a lasting influence". Past winners of the award include such seminal systems as the TCP/IP protocols, the first spreadsheets, the first relational databases, the World-Wide Web, Unix, PostScript, and Smalltalk. The second award was the USENIX Software Tools User Group (STUG) Award, given each year in recognition of an outstanding software tool.
Główną stroną o Tcl/Tk jest http://www.tcl.tk/, ale bardziej żywą witryną jest Tcl/Tk Wiki: http://wiki.tcl.tk/, gdzie znajdują się aktualne referencje co i gdzie nt. Tcl/Tk można znaleźć w sieci.
Oprócz podstawowej implementacji Tcl w C jest wiele implementacji w C dla środowisk wbudowanych, z których najbardziej zaawansowaną jest wspomniany JIM. Oprócz tego istnieją implentacje w Javie (Jacl przeznaczona bardziej dla środowisk J2EE i mniejsza Hecl dla J2ME).
Faktem jest, że Tcl (pronounced tickle -
http://en.wikipedia.org/wiki/Tcl) jako środowisko programowania przez szerokie grono ludzie nie jest znany lub po prostu jest nierozumiany.
see: Tcl the Misunderstood
http://antirez.com/articoli/tclmisunderstood.html
http://programming.reddit.com/info/2t7m/comments
A tutaj dyskusja, w której moim zdaniem najlepiej udało się w formie
żartu uchwycić sedno sprawy:
http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/8ba7b3e2e65dda9e
Poniżej wybrałem z niej najważniejsze stwierdzenia:
>I'm all for having many sensible languages floating around. But the
>fact that tcl is so obscure works to my disadvantage as a builder of
>modest applications. In the IT world, I found it hard to convince
>people to use a product built from something they never heard of.
Another approach several of us have employed--often
successfully!--is to say, "I built this project with
a high-quality C library."
I'm entirely serious.
=========
So... TCL stands for:
The high quality
C
Library
==========
Or even better:
>The< C Library
==========
"It was *that* high-quality I didn't even need to write a single line of
C to make my application work." ;-)
===========
In fact ...
That was just a few runtime configuration settings. Not programming at
all. After all, programming requires tens of thousands of Indian wage
slaves and investments of hundreds of millions of dollars. Everyone
knows that!
===========
Boss: Which bit of code did you modify to fix that bug?
Tcler: None. I just modified the config files!
saves me from having to write code change documentation ;-)
===========
i do tego przykłady programowanie obiektowego w Tcl (TclOO
http://wiki.tcl.tk/18152) zaprzeczające zarzutowi, że Tcl nie jest językiem obiektowym. (W moim odczuciu to tak naprawę Tcl jest bardziej językiem "komponentowym" - co jest naprawdę cennym wkładem podejścia obiektowego, bo prowadzi do budowania "reusable software" - see:
U. Zdun. Language Support for Dynamic and Evolving Software
Architectures. PhD thesis, University of Essen, Germany, January 2002.
http://wi.wu-wien.ac.at/~uzdun/publications/ile.pdf
wersja HTML:
http://64.233.183.104/search?q=cache:XWPmOd9SYlMJ:wi.wu-wien.ac.at/~uzdun/publications/ile.pdf+Support+for+%22Evolving+Software+Architectures%22+xotcl&hl=pl&ct=clnk&cd=1&gl=pl&client=firefox-a
Warto zobaczyć także:
W końcu zebrałem się na napisanie, że TCL w Polsce jest jednak używany:
http://tclmentorpl.kocjan.org/2007/09/ja-czuj-e-si-rodzi-co-zupenie-nowego.html
http://tclmentor.kocjan.org/2007/10/is-tcl-alive-and-well-or-dying.html
http://journal.dedasys.com/articles/2006/03/06/ruby-vs-tcl