Tcl

Tcl (ראשי תיבות של "Tool Command Language"; את השם Tcl מבטאים "טיקל") היא שפת תסריט שפותחה על ידי חוקר מדעי המחשב ג'ון אוסטרווט. Tcl נמצאת בשימוש נרחב ב-CGI, בבדיקות תוכנה וביצירת ממשקים גרפיים. ב-Tcl כל דבר הוא פקודה, אפילו מבני שפה בסיסיים כמו if ו-for. למרות זאת, התחביר של Tcl דומה מאוד לזה של ++C ושפות תסריט מקבילות. ל-Tcl הרחבות רבות וקהילה גדולה של מפתחים המתחזקים אותה, מה שעושה את השפה לחזקה מאוד ובעלת מגוון של יכולות. השילוב בין Tcl להרחבה שלה התומכת בממשקים גרפיים (TK GUI Toolkit) מאוד נפוץ ושמו Tcl/TK (מבוטא "טיקל-טוק"). עד גרסה 8.5, Tcl תמכה בתכנות מונחה עצמים אך ורק באמצעות הרחבות כדוגמת IncrTCL. החל מגרסה 8.6, Tcl תומכת בתכנות מונחה עצמים באופן טבעי. Tcl היא שפה מפורשת, זאת אומרת שכדי להריץ קוד יש צורך במפרש. כל דבר הוא פקודה, אפילו מבני שפה. ניתן ליצור פקודות עם מספר משתנה של ארגומנטים. כל המשתנים הם מחרוזות, או שניתן לבטא אותם בקלות כמחרוזות. ניתנת בקלות להרחבה באמצעות השפות C, ‏C++ ו-Java. חוצה-פלטפורמות - פועלת על כל פלטפורמה או מערכת הפעלה ידועה. תוכנת TCL מורכבת מאוסף פקודות לביצוע. קריאה לפקודה היא רשימה של מילים המופרדת ברווחים. המילה הראשונה היא שם הפקודה ושאר המילים הם הארגומנטים לפקודה: commandName argument1 argument2 ... argumentN דוגמה מעשית לכתיבת "Hello World" על המסך באמצעות הפקודה puts. puts "Hello, world!" כעת, אם נרצה לחשב ביטוי מתמטי ולהוציא אותו למסך כפלט נכתוב: puts [expr {5+6*10}] הפקודה expr מחשבת ביטוי מתמטי שניתן לה כארגומנט. הקפנו אותה בסוגריים מרובעים כדי לקבל את הערך שהוחזר על ידה. כעת נראה דוגמה למשפט תנאי: if {$a==0} { puts "a is zero" } a הוא משתנה והוספנו לו את האופרטור $ כדי לקבל את ערכו. אם לא נוסיף לו $, a פשוט יחשב מחרוזת. ב tcl פונקציות נקראות פרוצדורות, ולשם הגדרת פרוצדורה משתמשים בפקודה proc proc name arglist body כדי להחזיר ערך המחושב בתוך הפרוצדורה נשתמש בפקודה return ראו דוגמה proc calc_mean {a b} { return [expr ($a +$b)/2] } כדי להשתמש במשתנים אנו זקוקים קודם כל לפקודה set כדי לשים ערכים לתוכם. כמו כן אין צורך להכריז עליהם או על סוגם בשום מקום. set a "hello" המחרוזת "hello" תכנס למשתנה בשם a, וכדי לגשת אחר כך לערכו נוסיף $ לפניו. ב-Tcl כל המשתנים הם בעצם ייחוסים למידע האמיתי שנמצא בזיכרון. כאשר שמים ערך לתוך משתנה באמצעות set, הוא רק מקצה מיקום חדש בזיכרון והאוסף זבל מוחק לאחר מכן את הערך הקודם. בגישה רגילה למשתנים, ניתן לגשת אך ורק לאלו שנמצאים בטווח ההכרה (הסקופ) הנוכחי או בסקופ הגלובלי כמו ב-java או ב-C++, כל זה ע"פ שיטת הסקופ הסטטי. ב-TCL יש אפשרות לסקופ דינאמי: ניתן באמצעות הפקודה upvar ליצור ייחוס למשתנה הנמצא במקום כלשהו במחסנית הקריאות. לצורך זה יש לספק את שם המשתנה ואת הרמה בשרשרת הדינמית (במחסנית) בה הוא נמצא. Tcl זקוקה לניהול זיכרון מפני שהיא תומכת ביצירת אובייקטים ומפני שהמשתנים הם בסך הכל ייחוסים. דוגמה לאובייקט היא רשימה שבתוכה מופיעה רשימה אחרת באמצעות ייחוס. ל-Tcl יש אוסף זבל (Garbage Collector) הפועל בשיטת מניית התייחסויות. השפה מתגברת על בעיית ההצבעה המעגלית (הטיפוסית לשיטה זו) בכך שכל הערכים בשפה אינם ברי שינוי (immutable). נגיד ש-a מצביע ל-b. כעת נרצה לכוון את b ל-a, לא נוכל לעשות זאת משום שכשננסה לשנות את b, ייווצר מיקום חדש בזיכרון ש-b יצביע אליו. עכשיו, אף על פי ש-b מצביע על a, a מצביע למיקום אחר בזיכרון. כך לא ייווצרו הצבעות מעגליות. ל-Tcl הרחבות רבות שניתן להתקין, כל הרחבה כזאת מסודרת במה שנקרא packages. ה-Tcl/TK היא הרחבה שמאפשרת בניית GUI באופן פשוט מאוד. ל-TK בעצמה יש הרחבות שימושיות כגון וידג'טים מיוחדים או ספריות גרפיות. TK הותאמה גם לשפות תסריט אחרות כמו פייתון ו-Perl. הרחבת ה-Expect היא גם כן הרחבה נפוצה מאוד המאפשרת אוטומציה ובדיקה של תוכנות בסביבת UNIX. ספריית ה-TclLIB מאגדת בתוכה מספר עצום של סקריפטים המסייעים לעבודה עם Tcl. ה"מפרש" מופץ בקוד פתוח תחת רישיון מבוסס על BSD-licence. כמו כן ישנה גרסה מהודרת נפוצה של ActiveState. מדיה וקבצים בנושא Tcl בוויקישיתוף אתר האינטרנט הרשמי של Tcl (באנגלית) אתר הבית של Tcl ו-TK ויקי של השפה הפצת Tcl של ActiveState אתר ללימוד השפה בשפה העברית tcl-heb.tk