TRAC (שפת תכנות)

**TRAC** (ראשי תיבות של **T**ext **R**eckoning **A**nd **C**ompiling) **שפה** היא שפת תכנות שפותחה בין השנים 1959–1964 על ידי קלווין מורס והוטמעה לראשונה על PDP-1 בשנת 1964 על ידי ל. פיטר דויטש. זוהי אחת משלוש "שפות ראשונות" שהומלצו על ידי טד נלסון בספר *Computer Lib*. השפה TRAC T64 שימשה לפחות עד שנת 1984, כאשר מורס עדכן אותה ל-TRAC T84.

## תיאור השפה
TRAC היא שפה המבוססת על טקסט בלבד – סוג של שפת מקרו. בשונה משפות מקרו "אד הוק" מסורתיות של אותה תקופה, כגון אלו שהיו נמצאות באסמבלרים, TRAC תוכננה בקפידה, היא עקבית ובמובנים רבים נחשבת לשפה שלמה. לשפה יש מפעילי קלט ופלט מפורשים, בניגוד לקלט/פלט המופעים בצורה מרומזת ברמת המקרו החיצונית, מה שהופך אותה לפשוטה יותר וגמישה יותר לעומת שפות מקרו ישנות.

TRAC היא שפת עיבוד טקסט,המכונה גם שפת עיבוד מחרוזות.כתוצאה מכך, סוג הנתונים היחיד הזמין הוא מחרוזת של תווים. מספרים מיוצגים כמחרוזות של ספרות, וחישוב אריתמטי של מספרים שלמים (ללא מגבלות ספציפיות על ערכים מקסימליים) מתבצע באמצעות פונקציות מובנות ("פרימיטיביות") הפועלות על הייצוג המחרוזתי שלהם. ניתן לטעון שאחד מהיבטי השלמות של השפה הוא שהקונספט של שגיאה מוגבל לאירועים כגון חוסר במקום אחסון או בקשה להרחבת מחרוזת העולה על זיכרון העבודה של המפרש; מה שבשפות רבות ייחשב לפעולות בלתי חוקיות, ב-TRAC מטופל על ידי הגדרת תוצאה (לעיתים מחרוזת ריקה) לכל קומבינציה אפשרית של מחרוזות ארגומנטים לפונקציות.

TRAC היא, בדומה ל־APL או LISP, שפה המבוססת על ביטויים (בניגוד לשפות המבוססות על פרוצדורות) אך, בשונה מ-APL, אין בה מפעילים כלל. במובנים רבים, היא דוגמה לתכנות פונקציונלי טהור. כמו ב-LISP, התחביר שלה כולל לרוב רמות רבות של סוגריים מקוננים.

TRAC היא homoiconic: כלומר, ניתן לייצג ולתפעל תוכנית TRAC בתוך שפת TRAC עצמה.הדגש על המחרוזות כסוג הנתונים היחיד הוא כה חזק עד ש-TRAC מספקת מנגנונים לטיפול בתווי התחביר של השפה עצמה, הן בתפקידם הסינטקטי והן כתווים רגילים, וקוד משתנה עצמי (self-modifying code) נתפס כתוצאה טבעית מטכניקות התכנות ה"טיפוסיות" ב-TRAC ולא כתכונה מיוחדת.

ההשראה העיקרית ל-TRAC נבעה משלושה מאמרים של דאגלס מקאלרוי.

## קניין רוחני
מורס רשם את המותג של השם TRAC במטרה לשמור על שליטתו בהגדרת השפה, מה שהיה מהלך יוצא דופן ופורץ דרך באותה תקופה. בשלב מסוים, הוא הגיש תביעה בגין הפרת קניין רוחני נגד DEC, בטענה שחוזה אספקת מיני-מחשב עם מפרש TRAC הפר את זכויותיו. "הגיליון הראשון של Dr. Dobb's Journal, אחד מהפרסומים הראשונים בתחום המחשבים האישיים, מכיל טור דעות חריף נגד מורס והחמדנות שלו בניסיון לגבות כסף מאנשים עבור שפת התכנות שלו." מאז, השם שימש מספר פעמים לפרויקטים בתחום טכנולוגיית המידע שאינם קשורים זה לזה, כולל מערכת ניהול פרויקטים בקוד פתוח בשם Trac.

## השפעה ושימוש
TRAC הוטמעה לאחר מכן על מחשבים מסוג PDP-8, PDP-10, ו-PDP-11.

נוצרו שפות שונות בהשראת TRAC. כדי להימנע מבעיות עם מורס, שינו את שמות הפרימיטיבים ו/או השתמשו במטא-תווים שונים. במקרה של SAM76, נוספו פרימיטיבים, לפי דברי קלאוד קאגן, "משום ש-TRAC היא כמו שפת תינוק". במקרה של MINT, נוספו פרימיטיבים כדי לאפשר גישה למערכת עורך טקסט מתקדמת.
* אחת הבעיות הנתפסות ב-TRAC הייתה חוסר בהרחבה מלאה: חלק מהפונקציות הפרימיטיביות ב-TRAC רגישות להבחנה בין ארגומנט ריק (מחרוזת של 0 תווים) לבין ארגומנט שאינו קיים (ללא סימון גבולות), אך מעבר לארגומנט האחרון שאינו ריק, פונקציה שהוגדרה על ידי המשתמש אינה יכולה להבחין ביניהם. SAM76 הייתה שפה בדומה ל-TRAC אשר ביטלה מגבלה זו.
* ראס נלסון יישם שפת הרחבות ל-emacs בשם MINT (ראשי תיבות של **M**INT **I**s **N**ot **T**RAC). שפה זו משמשת בעורך FreeMACS של FreeDOS.
* ג'ון ווקר יישם ספריית שפת הרחבות הניתנת להטמעה בשם DIESEL  (ראשי תיבות של **D**umb **I**nterpretively **E**valuated **S**tring **E**xpression **L**anguage) במקור לעיבוד מקרו בתפריטים ב-AutoCAD.

TRAC שימשה על ידי FTP Software במוצר PC/TCP שלה כשפת סקריפטים למתזג מודמים.

TRAC שימשה גם כ-front end למערכת הרינדור Cray של Digital Productions לסרטים, כולל *The Last Starfighter*.

## דוגמאות
### דוגמה 1: תוכנית בסיסית ב-TRAC T64

```trac-wiki
#(DS,PROG.A,(
#(PS,(WHAT IS YOUR NAME?
))
#(DS,NAME,##(RS))
#(PS,(
GOODBYE))
))'
```


### דוגמה 2: חישוב מספרי פיבונאצ'י ב-TRAC T84

```trac-wiki
:(s,fibo,(
:(ei,<1>, 1, 0,(
:(ei,<1>, 2, 1,(
:(aa, :(ri,fibo,:(as, <1>,1)),:(ri,fibo,:(as, <1>,2)))
))
))
))`
:(mw,fibo)'
```


## ראו גם
*קרן TRAC (משמר)
*TRAC, שפה המתארת פרוצדורות עבור מקלדת תגובתית ב-Communications of the ACM, כרך 9, מספר 3, מרץ 1966.
*דף המידע של Andrew Walker על TRAC
*ערך TRAC ב-HOPL אנציקלופדיה של שפות תכנות
*פרויקט יישום של TRAC ב-SourceForge.
*רhאיון היסטורי בעל-פה עם Calvin N. Mooers ו-Charlotte D. Mooers ב-Charles Babbage Institute. הריאיון דן בשליפה של מידע ובמחקר על שפות תכנות מתקופת מלחמת העולם השנייה ועד תחילת שנות ה-90.

## הערות שוליים

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