ארכיון יומי: 27 ספטמבר, 2010

ריקוד המכונה

אחת הבעיות הקשות ביותר בעולם המחשבים היא שכל ארכיטקטורת מעבדים עובדת לגמרי שונה, ועם סט הוראות לגמרי שונה.

למשל בעולם האינטל/AMD יש לנו חיים מאוד קלים. אנחנו עובדים עם אינדיאנים קטנים (Little Endian). מי שמתעסק במעבדי ARM, עדיין עם חיים קלים, אינדיאנים קטנים והוראות מעבד ממש דומות, אבל לא זהות. ההתעסקות עם המעבד המתמטי של ARM ועוד כמה הוראות שונות לגמרי מאשר מעבדי Intel.

זו הסיבה שיש שפות עיליות, אשר נועדו להוריד מאיתנו כמה שרק ניתן את הצורך לטפל בפרטים ה"קטנים" האלו של שינוי המעבדים. אבל רובן אינן באמת מגנות עלינו מזה. כלומר בשפות כמו פסקל או C/++ עדיין יש השפעה על גודל האינדיאנים, או כמה ביט שהקוד רץ בו, ועוד כל מיני דברים קטנים ומעצבנים. הן רק לוקחות מאיתנו את הצורך לחשוב בצורה של drop down rules אל תוך שיגרות, אובייקטים (לפחות בפסקל ו ++C) ויכולות הקצאה דינמיות בצורה ידידותית יותר מאשר ברירת המחדל בשפות האסמבלר השונות.

אז לפני ראש השנה, הגיע טרול לא חשוב מאיזו עדה, והחליט לתת לי פקודות של "כתוב תוכנית שממירה בין מספר לתו, בצורה עצמאית", ועוד כמה דברים מעצבנים כאלו כמו לשתף זיכרון של משתנה אחד לכמה טיפוסים, חלוקת כתובת IP שהיא longint למערך של 4 בתים וכו' הכל כמובן אני צריך לכתוב בשפת פסקל…

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

אז החלטתי לפשט את השאלה המקורית שלי, וגם עניין אותי לקבל תשובה לנושא, ושאלתי את תותחי הקוד הפתוח בwhatsup, עד שלימון אחד סיפק תשובה.

אני חייב לציין שזו הפעם הראשונה מלמעלה מ13-15 שנה (עצוב שאני יכול להגיד דברים כאלו) שאני פיזית כותב קוד בשפת אסמבלר (תחביר att במקרה הזה), והיה נחמד להיזכר, אבל הטרול הזה הצליח לגרום לי להבין משהו שאני לא הבנתי לפני זה. אני כל הזמן מסביר שבשפת פסקל אפשר לרדת לרמה הנמוכה ביותר, ואפשר לעלות לרמות מאוד גבוהות, שלפעמים מזכירות יותר שפות דינאמיות (אבל השפה עצמה היא לא), מאשר שפה "עילית" כדוגמתה, והדוגמא הזו מוכיחה שגם כאשר יורדים לרמה הכמעט נמוכה ביותר (לפני שפת מכונה), עדיין היא ידידותית וקלה יותר לפיתוח מאשר שפת C, או בשפה המתמטית: מ.ש.ל.

ד"א, למרות שאני הצלחתי להראות לו שאני מסוגל לעמוד בכל המשימות שלו, זה לא הפריע לטרול להמשיך להגיד שאי אפשר לעשות כלום בפסקל, למרות חוסר היוכלת להתמודד באתגר…

ההקדמה מאוד הזכירה לי את השיר של משינה בשם ריקוד המכונה, שהוא בעצם חיקוי (כמו כמעט כל השירים של הלקה) של השיר של madness בשם One Step Beyond.