زبان Tcl (مخفف Tool Control Language - زبان کنترل ابزار) :
زبان Tcl (مخفف Tool Control Language - زبان کنترل ابزار) حاصل تحقیقات John Ousterhout روی ابزارهای رایانه ای طراحی مدارهای الکتریکی در دانشگاه برکلی است.
در این تحقیقات، Ousterhout و دانشجویانش مجبور بودند برای هریک از این ابزارها یک زبان کنترل جداگانه طراحی کنند، اما به دلیل توجه بیشتر به خود ابزار (و نه زبان)، ابزارها عموما دارای زبانهای کنترل ضعیفی بودند.
در پاییز سال ۱۹۸۷، در آزمایشگاه شرکت DEC، این ایده به ذهن Ousterhout رسید که یک زبان فرمان قابل جاسازی(Emdeddable Command Language) طراحی کند. یک زبان مفسری (Interpreted) خوب که بتواند به عنوان یک بسته کتابخانه ای در برنامه های گوناگون استفاده شود. هدف این بود که مفسر زبان مجموعه ای از امکانات اولیه را (مانند متغیرها و ساختارهای کنترلی) فراهم آورد و هر یک از ابزارهای استفاده کننده از آن بتوانند ویژگیهای مورد نظر خود را به آن اضافه کنند.
Ousterhout در سال ۱۹۸۸ پس از بازگشت از آزمایشگاه DEC، کار بر روی Tcl را شروع کرد و نخستین نسخه آن را در یک متن پرداز (Text Editor) گرافیکی به کار گرفت. در ابتدا این کار فقط جنبه تحقیقاتی داشت و Ousterhout گمان نمیکرد دیگران هم به استقاده از آن علاقه مند باشند.
فلسفه زبان
نیاز به امکان جاسازی (Embeddability) قابلیت ویژه زبان Tcl است و به گفته Ousterhout باعث میشود که اهداف زیر برای زبان در نظر گرفته شود:
۱.زبان باید گسترش پذیر(extensible) باشد: افزودن امکانات جدید به زبان توسط سایر افراد باید به آسانی امکان پذیر باشد و امکانات اضافه شده باید چنان باشند که انگار جزئی از خود زبان هستند(طبیعی باشند، نه این که با استفاده از اعمال پیچیدهای به مقصود برسند).
۲.زبان باید ساده و عمومی باشد، تا بتواند به آسانی با برنامههای گوناگون کار کند و امکاناتی را که این برنامهها میتوانند به زبان اضافه کنند محدود نکند.
۳.زبان باید امکانات خوبی برای ادغام داشته باشد، زیرا امکانات مهمتر زبان آنهایی است که توسط برنامه استفاده کننده به زبان افزوده شده است و کار اصلی زبان ادغام (integration) و پیوند دادن آنها با یکدیگر است.
نوآوری ها
مهمترین نوآوریهای Tcl عبارتند از قابلیت جاسازی و آسانی تولید واسط کاربر گرافیکی. با ایجاد قابلیت جاسازی، مشکل بسیاری از افرادی که نیاز به یک زبان دارند، اما نمیخواهند یک زبان کامل را از ابتدا طراحی کنند حل شده است. به دلیل آسانی جاسازی Tcl در سایر برنامه ها، استفاده از آن در اوایل دهه ۹۰ به سرعت رشد کرد.
قابلیت دیگر Tcl، مجموعه ابزار Tk است که به عنوان گسترشی بر Tcl تولید شد و امکان ایجاد واسط کاربر گرافیکی با استفاده از ادغام مؤلفه(component)ها را به وسیله Tcl فراهم آورد. این قابلیت نیز به امکان استفاده از Tcl برای تولید برنامه های بزرگتر و با واسط کاربر مناسب افزود و در کسترش استفاده از آن سهم به سزایی داشت.
کاربردها
برخی از کاربردهای Tcl به شرح زیر است
کاربردهای وب : از آنجا که Tcl یک زبان رشته-محور است برای برنامه های وبی مفید است. از نمونه برنامه های وبی استفاده کننده از Tcl میتوان به AOLserver و TclHttpd اشاره کرد. به علاوه کتابخانه های CGI برای Tcl موجود است که امکان استفاده از آن به عنوان یک زبان برنامه نویسی وب را فراهم میکند.
برنامه های با واسط کاربر گرافیکی (GUI Desktop Applications): ابزار Tk برای ایجاد برنامه های گرافیکی بسیار قدرتمند است. به علاوه این ابزار چند-سکویی (multi-platform) است و بر روی [[لینوکس|Windows , [[Linux و Mac OS X قابل استفاده و اجراست.
آزمایش و خودکارسازی : Tcl خود دارای یک چارچوب تست به نام tcltest است. به علاوه شرکتهایی مانند Oracle, Sybase و Cisco میلیونها خط کد Tcl برای تست محصولات خود دارند.
پایگاههای داده: Tcl دارای گسترشهایی برای کار با پایگاههای داده گوناگون مانند MySQL, Sybase, PostgreSQL, Oracle و Berkeley DB میباشد. همچنین بستههای wrapper ای وجود دارند که یک واسط واحد برای چند نوع پایگاه داده فراهم میکنند.
توسعه نهفته (Embedded Development) : استفاده از Tcl به علت قابلیت ادغام بالای آن، هم در محصولات سختافزاری مانند محصولات Cisco و هم در محصولات نرم افزاری مانند نرم افزارهای طراحی به کمک رایانه (CAD) و خودکارسازی طراحی الکترونیکی (EDA) رایج است. ابزار شبیه سازی Modelsim یکی از ابزارهایی است که با زبان Tcl کار میکند.
علاوه بر کابردهای فوق، کاربردهای دیگر تحقیقاتی از Tcl نیز مشاهده شده است. به عنوان مثال در سیستمهای رباتیک از زبان Tcl استفاده شده است. همچنین این زبان در توسعه سریع نرم افزار (Rapid Application Development) نیز استفاده شده است
بررسی زبان شناختی(ساختار و نحو زبان)
برنامه های Tcl تشکیل شده اند از دستورهایی که با semicolon یا با رفتن به خط جدید (newline) از هم جدا شده اند. هر دستور از تعدادی کلمه تشکیل شده است که با فاصله از هم جدا شده اند. همهٔ دستورات Tcl مقدار برمیگردانند. اگر برگرداندن مقدار برای دستوری معنا نداشته باشد، یک رشته ی تهی برمیگرداند.
متغیرها
در Tcl نیازی به تعریف متغیر نیست. هر متغیری در اولین دفعه استفاده آن، تعریف میشود. همچنین متغیرها در Tcl دارای نوع نیستند. هر متغیری می تواند هر مقداری بگیرد. البته میتوان با استفاده از دستور variable اقدام به تعریف متغیر در یک namespace کرد . با استفاده از دستور set می توان مقادیر را در متغیر ها ذخیره و از آنها بازیابی نمود. برای ذخیره :
کد:
کد:
set x ۳۲ </souce> برای خواندن مقدار : <source lang="tcl"> set x
برای استفاده از مقادیر یک متغیر از روش «جایگذاری متغیر» به شکل زیر استفاده میشود:
کد:
این دستور مقدار x+۳ را برمیگرداند. هنگامی که یک علامت دلار در عبارت ظاهر میشود، Tcl حروف و اعداد پس از آن را به عنوان نام متغیر تعبیر می کند و مقدار آن متغیر را به جای نام آن میگذارد
جایگذاری متغیر را میتوان برای همه کلمههای یک دستور Tcl، مستقل از این که آن کلمه یک نام دستور و یا یک آرگومان است، به کار برد. مثلا عبارات زیر معادل عبارات قبلی است :
کد:
کد:
set a expr set x ۳۲ $a $x+۳
ساختارهای کنترلی
Tcl مجموعه کاملی از دستورات کنترلی شامل دستورات اجرای شرطی، دستورات حلقه و دستورات زیربرنامه ای را دارد. دستورهای کنترلی Tcl دستوراتی عادی هستند که به عنوان آرگومان، اسکریپتهای Tcl میگیرند[۱].به عنوان مثال دستور proc که برای تعریف زیربرنامه به کار میرود، سه آرگومان میگیرد : نام زیربرنامه، لیست نام پارامترهای آن، و بدنه زیربرنامه که یک اسکریپت Tcl است:
کد:
کد:
proc power {base p} { set result 1 while {$p > ۰} { set result [expr $result $base] set p [expr $p - ۱] } return $result }
مشابها دستور while که در بالا مشاهده میشود، یک دستور Tcl است که دو آرگومان میگیرد : یک عبارت که همان عبارت شرط است و یک بدنه که یک اسکریپت Tcl است.
از این زیربرنامه میتوان به شکل زیر استفاده کرد :
کد:
کد:
power 2 6 power ۱٫۱۵ ۵