ב-Online
 
 
 
 
 
לפרק את הבייט 
איזו שפת תכנות הכי גרועה? 
 
 ישלחו אתכם לגיהינום    צילום: flickr, Plutor, cc by    
לפרק את הבייט |
 

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

 
 
 
 
 
 
 
 
 
 
שפת התכנות היא האויב הכי גדול: המשחק Abuse שנכתב ב-Lisp
 שפת התכנות היא האויב הכי גדול: המשחק Abuse שנכתב ב-Lisp 
 צילום: Youtube 
 
בשבוע שעבר חיפשנו את שפת התכנות הטובה ביותר, ובין השורות בצבצה ועלתה שאלה מעניינת לא פחות: מהי שפת התכנות הגרועה ביותר? כזו שלא רק שלא תמצאו בה עבודה, אלא שתהיה גם קשה, מכוערת ומסורבלת במידה שתגרום לכם לזרוק את המחשב מהחלון או לעבור לגור בחדר מרופד.

קיימות שפות תכנות קלאסיות, שכוללות מאפיינים מסמרי שיער עבור המתכנת המודרני הממוצע. בשפת Lisp, למשל, יש כמות עצומה של סוגריים שמקיפים כל דבר וגם אחד את השני, ופעולות מתמטיות/לוגיות נכתבות בה בייצוג פולני הפוך מזעזע. שפת Prolog, לעומתה, נראית כאילו הומצאה על ידי סדיסט חובב שאלות היגיון בנוסח המבחן הפסיכומטרי, ועל COBOL בכלל מוטב לשתוק. מודעות דרושים למתכנתים בשפות אלה נדירות כמעט כמו פוליטיקאים ישרים, ועם זאת מדובר בכלי תכנות ממשיים שמראים תוצאות בשטח. ב-Lisp אפילו נכתב משחק מחשב נאה (לזמנו), Abuse.

כדי למצוא את הזוועות הגדולות באמת, עלינו לחפש שפות שהומצאו במטרה מפורשת להיות איומות ונוראות. ותאמינו או לא, מתברר שיש הרבה כאלה!
 

Intercal: אם כל המפלצות

פרסומת
 
מבין השפות הללו, שזכו לכינוי הדיפלומטי "שפות תכנות איזוטריות", Intercal היא אולי הוותיקה והמכובדת ביותר. היא הומצאה ב-1972 על ידי שני סטודנטים משועממים מפרינסטון, כפרודיה על עקרונות ושפות התכנות שהיו נפוצים באותה עת. בתור התחלה, הסימנים שבה מוגדרים בשמות לא קונבנציונליים. למשל, הסימן "#" נקרא "רשת" ובהתאם, "=" מכונה "חצי רשת". היא מקבלת כקלט אך ורק מספרים שכתובים במילים ("ארבע שתיים" עבור 42), ופולטת רק מספרים בספרות רומיות. תכונות אחרות שלה יביאו גם מתכנתים קשוחים לדמעות: היא מאפשרת לכתוב, לצד כל שורת קוד, מספר באחוזים שיקבע את הסיכוי ששורה זו תבוצע בפועל! הקומפיילר שלה מתעלם באלגנטיות מכל דבר שאיננו מבין והופך על ידי כך את הדיבוג לסיוט. האופרטורים הלוגיים שלה, AND, OR ו-XOR, בניגוד לכל היגיון, פועלים על קלט אחד ויחיד (על הביטים שלו, למעשה), ועל כל פקודה להתחיל באחת ממילות המפתח Do, Please או Please do שהפונקציונליות שלהן זהה לחלוטין, אך הקומפיילר ידחה קוד שאחת מהן מופיעה בו (לדעתו) במידה מוגזמת.
 

לתכנת או לא לתכנת? זו השאלה

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

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

טיורינג מתהפך כפרופלור

ענף אחר של שפות אזוטריות בחר להתמקד בסט הפקודות של מכונת טיורינג, הלא היא הבסיס לכל תורת המחשוב המודרני. זהו אוסף זעיר של פקודות בסיסיות להחריד, ששום מתכנת שפוי לא היה משתמש בהן לצורך מעשי – וזה בדיוק העניין! המרכזית מבין שפות אלה היא השפה בעלת השם ההולם "Brainfuck", בעלת שמונה פקודות בלבד, כל אחת מיוצגת באמצעות תו יחיד. הקטע הבא, שנלקח מויקיפדיה, הוא לולאה שרצה עשר פעמים ומטרתה להציב בארבעה תאי זיכרון את הערכים 70, 100, 30 ו-10:

++++++++++[>+++++++>++++++++++>+++>+<<<<-]

שפת "אוק!" (Ook!) עובדת באופן דומה, אך מכיוון שהיא מיועדת לאורנג-אוטנים, היא מורכבת משלושה אלמנטים בלבד: "Ook.", "Ook!" ו-"Ook?". מהשלושה ניתן להרכיב תשעה זוגות, ששמונה מתוכם מייצגים פקודות כמו ב-Branfuck (הזוג "Ook? Ook?" נשאר חסר שימוש)
 
שפת Whitespace כוללת פקודות מתקדמות קצת יותר, וכולן נכתבות באמצעות צירופים של רווחים וטאבים, מה שהופך אותה לבלתי נראית לחלוטין. ממציאיה ביקשו, כך מספרים, להחזיר את הכבוד האבוד לתווים אלה, שרוב שפות התכנות הקיימות מתעלמות מהם, והקומפיילר של Whitespace עצמו מתעלם מכל תו שאינו רווח או טאב. מלבד היותה מטורפת לחלוטית, שפה זו מעניינת במובן זה שאפשר לשבץ קוד שלה בתוך קוד של כל שפה אחרת כמעט, מבלי ששתי התוכניות השונות יפריעו זו לזו!
 
מימין לשמאל: מתכנת ב-Ook!, תוכנה ב-Piet שכותבת "Piet" וקוד מגניב בשפת Whitespace. תוכיחו שלא.
 מימין לשמאל: מתכנת ב-Ook!, תוכנה ב-Piet שכותבת "Piet" וקוד מגניב בשפת Whitespace. תוכיחו שלא.    צילום: Malene Thyssen ,Thomas Schoch. רשיון cc-by-sa 
 
שפת Piet כוללת גם היא מספר קטן של פקודות, והייחוד שלה הוא באופן התכנות המעיק – לא בהקלדת תווים כמו כל השפות האחרות, אלא בציור תמונות צבעוניות שנקראות בכיוון השעון וכל פיקסל בהן יכול לייצג פקודה או ערך. שפה זו נקראת על שם פיאט מונדריאן, הצייר ההולנדי שהמציא את סגנון הציור הצבעוני והמשונה הזה.
 

ללקוד עם חתולים

בהשראת האופנה האינטרנטית המרגיזה של תמונות חתולים עם כיתובים באנגלית משובשת, שזכו לכינוי LOLCATS, נולדה שפת תכנות חדשה – LOLCODE. זוהי שפה גבוהה יחסית, ועיקר הייחוד שלה הוא ברפרנס המשעשע (בדקה הראשונה, לפחות) לתמונות החתולים. הנה הקוד, מויקיפדיה, שמציג את המספרים בין 1 ל-10:


HAI
CAN HAS STDIO?
IM IN YR LOOP UPPIN YR VAR TIL BOTHSAEM VAR AN 10
VISIBLE SUM OF VAR AN 1
IM OUTTA YR LOOP
KTHXBYE
 

נטשו כל תקווה, אתם המתכנתים

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

ראשית, Malbolge עובדת לא בבסיס בינארי או עשרוני כמו כל שפה נורמלית, אלא בבסיס 3. יש בה שלושה משתנים בלבד, a, c ו-d, כאשר c הוא מספר רץ שמשמש כמצביע למיקום הפקודה הנוכחית. כאשר תוכנת Malbolge מופעלת היא נטענת לתחילתו של מרחב זיכרון בעל גודל קבוע, ושאר הזיכרון הזמין – במקום להיות מאופס – ממולא למרבה חוסר הנוחות בשרשרת של ערכים שונים. משתנה המצביע מאופס ל-1 (הפקודה הראשונה), והפקודות עצמן אינה נקראות ישירות אלא מחושבות באמצעות חיבור הערך של תו הפקודה למיקומו בזיכרון, וחישוב השארית של חלוקת התוצאה בתשעים וארבע. גם כאן יש שמונה פקודות, חלקן מופרכות לחלוטין, כמו למשל הפקודה שמבצעת חישוב חסר היגיון בבסיס שלוש על משתנה a ועל המיקום בזיכרון שעליו מצביע משתנה d, תוך העברת התוצאה הן ל-a והן לאותו מיקום. בשביל דברים כאלה בדיוק הומצא הביטוי WTF.
 
וכאילו זה לא מספיק, לאחר ביצוע כל פקודה, אותה פקודה מוצפנת בזיכרון באמצעות פעולת שארית נוספת וטבלת צופן מיוחדת, כך שאין שום דרך הגיונית לבצע לולאה על אותן הפקודות שוב ושוב.

הזדון העמוק המובנה בכל מאפיין ומאפיין של Malbolge הופך אותה, ללא שום תחרות, לשפת התכנות האיומה, הנוראה והבלתי שימושית ביותר בעולם. גם אם מאלצים אתכם ללמוד שפת תכנות כלשהי שלא מוצאת חן בעיניכם, תזכרו שתמיד יכול להיות הרבה, הרבה יותר גרוע.

לרשימה מקיפה של שפות תכנות אזוטריות.
 
 
 
 
 
תגובות
הוסף תגובה0 תגובות
הוספת תגובה
מאת
 
נושא
 
תוכן
 
 
 
 
תודה! תגובתך התקבלה.
התגובה תתפרסם בכפוף לתנאי האתר.
 
 
 
 
 

כל הזכויות שמורות 2011 © נענע 10 בע"מ
 
 
 
 
כל הזכויות שמורות © Nana10 בע"מ
Video powered by