INTERCAL

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

INTERCAL היא שפת תכנות פארודית, והיא שפת התכנות האיזוטרית הראשונה. השפה פותחה על ידי דון וודס וג'יימס ליון, שני סטודנטים באוניברסיטת פרינסטון, ב-1972. בתור פרודיה, היא תוקפת את ההיבטים של שפות התכנות השונות שהיו אז, וכן את ההתרבות של שפות מוצעות בשנות ה-60.

לפי המדריך המקורי,

Cquote1.svg

The full name of the compiler is "Compiler Language With No Pronounceable Acronym", which is, for obvious reasons, abbreviated "INTERCAL".

Cquote2.svg


(בתרגום חופשי: השם המלא של המהדר הוא "שפת מהדר חסרת קיצור שניתן להגות אותו", אשר, מסיבות ברורות, מקוצר ל-"INTERCAL".)

קיימות 2 גרסאות של INTERCAL‏: C-INTERCAL (בעבר תוחזק על ידי אריק ריימונד), ו-CLC-INTERCAL (מתוחזק על ידי קלאודיו קאלבלי).

מבוא[עריכת קוד מקור | עריכה]

INTERCAL תוכננה להיות שונה לגמרי מכל שפת תכנות אחרת. ל-INTERCAL קיימות הרבה תכונות שמתוכננות להקשות על המתכנת: היא משתמשת במשפטים כמו "READ OUT", וכן "IGNORE" וגם "FORGET" ומגדירים כמו "PLEASE". מילת המפתח האחרונה מספקת 2 סיבות לדחיית התוכנית על ידי המהדר: אם "PLEASE" לא מופיע מספיק, התוכנית מוגדרת כמנומסת באופן לא מספיק. אם "PLEASE" מופיע יותר מדי פעמים, התוכנית נדחת עקב נימוס מוגזם. אף על פי שתכונה זאת קיימת במהדר המקורי, היא לא הייתה מתועדת.

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

הביצוע המקורי של השפה השתמש בכרטיסים מחוררים ומערך התווים EBCDIC. כדי ש-INTERCAL יוכל לרוץ על מחשבים שמשתמשים בASCII, היה צריך לעשות תחליפים ל-2 תווים: ¢ הוחלף ב-$ בשביל אופרטור הערבוב, "מתאר את עליית המחיר של התוכנות ביחס לחומרות", וכן ∀ הוחלף ב-? לייצוג פעולת XOR יונארית, בשביל "לבטא בצורה נכונה את התגובה של האדם הממוצע כשהוא רואה בפעם הראשונה פעולת XOR".

על אף הסירבול של השפה, INTERCAL היא בכל זאת שלמה טיורינג: אם יש מספיק זיכרון, INTERCAL יכולה לפתור כל בעיה שמכונת טיורינג יכולה לפתור. אבל רוב היישומים של INTERCAL עושים זאת לאט מאוד: כמה תוכניות שמבצעות את הנפה של ארטוסתנס עד 65535 נבדקו על מחשב Sun SPARCStation-1. התוכנית שנכתבה בשפת C רצה בפחות מחצי שנייה, אותה התוכנית ב-INTERCAL רצה ביותר מ-17 שעות.

קלט ופלט[עריכת קוד מקור | עריכה]

INTERCAL-72 הייתה מאוד מוגבלת ביכולות הקלט-פלט: צורת הקלט הנתמכת היחידה הייתה מספרים שבהם הספרות מאויתות, וצורת הפלט היחידה הייתה גרסה מורחבת של ספרות רומיות. ב-C-INTERCAL הוספה האפשרות לקלט ופלט מכל סוג של טקסט.

דוגמה[עריכת קוד מקור | עריכה]

התוכנית הבאה, שנכתבה בגרסת C-INTERCAL, כותבת בפלט "Hello, world!":

DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP