T (שפת תכנות)

מתוך המכלול, האנציקלופדיה היהודית
קפיצה לניווט קפיצה לחיפוש
T
פרדיגמות

מרובת פרדיגמות: מונחית עצמים, אימפרטיבית, פונקציונלית

מטא-תכנות
תאריך השקה 1982
מתכנן Jonathan A. Rees, Norman I. Adams
מפתח Jonathan A. Rees ,Norman I. Adams, Kent M.Pitman
טיפוסיות דינמית,חזקה
הושפעה על ידי Scheme, Lisp
השפיעה על EuLisp, Joule
http://mumble.net/~jar/tproject

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

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

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

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

 (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 NEXT HELLO'
חוליה שנייה
NIL WORLD'

מבנה נתונים זה מזכיר רבות את מבנה הנתונים "שרשרת חוליות", אשר נפוץ בשפות עיליות רבות. בדרך כלל המצביע של האיבר האחרון הוא null ( מסמל "כלום" בשפות התכנות סי שארפ וג'אווה (ועוד) ), none ( בפייתון ) וכדומה, בהתאם לשפת התכנות.

ציר זמן של ניבי Lisp
1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 2019
LISP 2 ,LISP 1.5 ,LISP
Maclisp
Interlisp
Lisp Machine Lisp
Scheme R5RS R6RS R7RS small
NIL
Franz Lisp
Common Lisp
Le Lisp
T
Emacs Lisp
AutoLISP
PicoLisp
EuLisp
ISLISP
OpenLisp
PLT Scheme Racket
GNU Guile
Visual LISP
Qi, QiII Shen
Clojure
Arc
LFE
Hy

היסבים (פורטים)

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

T הותאמה לפלטפורמות חומרה ומערכות הפעלה רבות, כגון :

ראו גם

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

הערות שוליים

  1. ^ פול גרהאם, -ללא כותרת-, ‏הקישור נלקח ב-3 באוקטובר, 2020
  2. ^ cons היא פעולה בסיסית ברוב הניבים של שפות תכנות ממשפחת Lisp. cons מרכיב (cons tructs) אובייקטים בזיכרון בצורה רקורסיבית אשר מייצגים רשימה מקושרת (״שרשרת חוליות״). כל אובייקט ברשימה מחולק לשני הערכים: car - החלק הראשון אשר מכיל את הערך. וה-cdr - החלק השני אשר מכיל את ההפניה למקום הבא.
Logo hamichlol 3.png
הערך באדיבות ויקיפדיה העברית, קרדיט,
רשימת התורמים
רישיון cc-by-sa 3.0