T (שפת תכנות)

T היא שפת תכנות מרובת פרדיגמות, וניב של שפת Scheme (שהיא ניב של Lisp). היא פותחה בתחילת שנות ה-80 של המאה ה-20 על ידי ג'ונתן א. ריס, קנט מ. פיטמן ונורמן י. אדמס מאוניברסיטת ייל כניסוי בעיצוב ומימוש שפת תכנות.

 רציונל ודוגמות 

המטרה של T היא לבחון את התזה אשר פותחה על ידי גיא ל. סטיל ג'וניור וג'רלד ג'יי סוסמן בסדרת המאמרים שלהם על Scheme, שגורסת כי ניתן להשתמש ב-Scheme בתור הבסיס לשפת תכנות פרקטית אשר מסוגלת להביע מגוון רחב של רעיונות (High Expressive Power) וכן שמימושים של Scheme יכולים להיות טובים יותר ממערכות Lisp אחרות, ואף להתחרות במימושים של שפות תכנות כגון C ו-BLISS, שבעבר נחשבו נחשבות ליעילות הרבה יותר מניבי Lisp בארכיטקטורות מחשב קונבנציונליות (אם כי ניבי Lisp יכולים להיות יעילים באותה המידה באמצעות מהדר טוב.

ב-T ישנם תכונות נוספות שחסרות ב-Scheme . לדוגמה, T היא מונחית עצמים והיא מכילה סביבות מחלקה ראשונה, שנקראות "locales". מימוש תאורטי של פעולת ה-conscons היא פעולה בסיסית ברוב הניבים של שפות תכנות ממשפחת Lisp.

cons מרכיב (cons tructs) אובייקטים בזיכרון בצורה רקורסיבית אשר מייצגים רשימה מקושרת (״שרשרת חוליות״). כל אובייקט ברשימה מחולק לשני הערכים: car - החלק הראשון אשר מכיל את הערך.

וה-cdr - החלק השני אשר מכיל את ההפניה למקום הבא. לדוגמה: (define-predicate pair?)
 (define-settable-operation (car pair))
 (define-settable-operation (cdr pair))
 (define (cons the-car the-cdr)
 (object nil
 ((pair? self) t)
 ((car self) the-car)
 ((cdr self) the-cdr)
 (((setter car) self new-car) (set the-car new-car))
 (((setter cdr) self new-cdr) (set the-cdr new-cdr))))
דוגמה זו ממחישה שאובייקטים ב-T קשורים באופן הדוק לסְגוֹרים (closures) ולהעברת מסרים (Message passing). ישנה פעולה מובנית בשפה (Primitive Function) ששמה join אשר מחברת 2 אובייקטים ביחד, ומאפשרת דבר המזכיר ירושה.

ב-T, כמו ניבי Lisp רבים אחרים, ניתן "לכתוב מחדש את השפה", כלומר, לשנות ערכים של פעולות וערכים מוגדרים בשפה, ולכן היא משויכת לפרדיגמה "מטא תכנות" . לדוגמה, ב-Scheme, הפעולה define מגדירה ערך מסוים (סוג של השמה), ולכן ניתן להשתמש בה גם להגדרת עצמה מחדש, כך של define תהיה משמעות שונה .(define define 6)
(write define)בקוד לעיל שינינו את ערך הפעולה define ל-6, והדפסנו .

cons (מהמילה "construct" באנגלית שמשמעותה "לבנות") היא פעולה שקיימת ברוב השפות ממשפחת Lisp. היא יוצרת 2 תאים בזיכרון (בדרך כלל 4 בייטים (bytes) לכל תא) . התא הראשון מייצג את הערך, ואילו התא השני מייצג הפניה (מצביע) לתא הבא. בניבי LISP רבים מזינים את הערך NIL לפרמטר השני כאשר אין המשך לביטוי ה cons (כלומר, הגענו לאיבר האחרון) . בניבים רבים, NIL הוא שקר (FALSE) ו T הוא אמת (TRUE) . ב-Scheme, הניב שעליו שפת T התבססה, מסמנים אמת ב t# ושקר בf#.

דוגמה למימוש פעולת cons בניב Common Lisp: (CONS 'HELLO ( CONS 'WORLD NIL) )תחילה, הפעולה יצרה חוליה שהערך בתא הראשון שלה זה HELLO', והפניה לחוליה הבאה. ערך התא הראשון של החוליה השנייה הוא WORLD' והערך השני הוא NIL (המקביל לביטוי הבוליאני "שקר" (False) בניבי Lisp), ולכן אין חוליה שלישית והרשימה נגמרת . יש לסמן מחרוזות (בין היתר) ב-Common Lisp (וכן בניבים אחרים) בגרש בתחילתן על מנת לאותת למהדר לא להתייחס לטקסט כביטוי כגון מחרוזת או מתודה שצריך לפשטו. ניתן גם לכתוב את המילה השמורה quote לפני הערך כדי לקבל אותה תוצאה, בניבים רבים. לדוגמה, (qoute hello) יחזיר HELLO.

אם נדפיס את הרשימה נקבל : (HELLO WORLD).

מופיע ייצוג גרפי לחידוד ההבנה:
+חוליה ראשונהPOINTER TO NEXTHELLO'
+חוליה שנייהNILWORLD'
מבנה נתונים זה מזכיר רבות את מבנה הנתונים "שרשרת חוליות", אשר נפוץ בשפות עיליות רבות. בדרך כלל המצביע של האיבר האחרון הוא null (מסמל "כלום" בשפות התכנות סי שארפ וג'אווה (ועוד)), none (בפייתון) וכדומה, בהתאם לשפת התכנות.
+ציר זמן של ניבי Lisp19551960196519701975198019851990199520002005201020152019LISP 2 ,LISP 1.5 ,LISPMaclispInterlispLisp Machine LispSchemeR5RSR6RSR7RS smallNILFranz LispCommon LispLe LispTEmacs LispAutoLISPPicoLispEuLispISLISPOpenLispPLT SchemeRacketGNU GuileVisual LISPQi, QiIIShenClojureArcLFEHy

 היסבים (פורטים) 
נא לא להתבלבל בין המושג היסב (פורט) למושג פורט בתקשורת מחשבים.

T הותאמה לפלטפורמות חומרה ומערכות הפעלה רבות, כגון :
 MIPS: DEC 3100 (pmax), SGI IRIS
 Motorola 68000 (m68k): Apollo Domain/OS, HP/UX, Mac/AUX, NeXT, SunOS 3
 NS320xx (n32k): Encore Multimax
 SPARC: SunOS 4 and above, Solaris, Unix on Connection Machine 5
 VAX: Ultrix

 ראו גם 
 Scheme
 Lisp
 Common Lisp
 אוניברסיטת ייל

 קישורים חיצוניים 

 ההיסטוריה של T
 T revival project, באתר Wayback Machine

הערות שוליים

קטגוריה:שפות תכנות
קטגוריה:ניבי Lisp