Tcl

מתוך המכלול, האנציקלופדיה היהודית
קפיצה לניווט קפיצה לחיפוש
Tcl
פרדיגמות מרובת פרדיגמות: מונחית עצמים, פונקציונלית, פרוצדורלית, מונחית אירועים
תאריך השקה 1988
מפתח ג'ון אוסטרווט
מימושים ActiveTcl
השפיעה על Windows PowerShell
סיומת .tcl
http://www.tcl.tk

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 בוויקישיתוף
הערך באדיבות ויקיפדיה העברית, קרדיט,
רשימת התורמים
רישיון cc-by-sa 3.0

25123646Tcl