חפש בבלוג זה

יום חמישי, 15 בספטמבר 2022

שלושה מצבים לביט



שלושה מצבים לביט

 

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

 

   
ביט שיש לו שני מצבים הוא יסוד במחשבים למיניהם 

 

 

 

המחשב האלקטרוני בנוי על כך שהיחידה החישובית הקטנה ביותר, הביט, יכולה להכיל אחד משני הערכים :  0 או 1.    העובדה הזו עומדת בבסיס הסיפור הבא.

 כתבתי כבר בעבר על התקופה שבה עבדתי במסגרת פרויקט של חיל האוויר במכון וייצמן למדע, כאשר פיתחנו את מערכת תקני כ"א באמצעות  DB1, המוצר שפותח במכון וייצמן ולימים שמו הוסב ל SAPIENS.    כדי לכתוב קוד שמשתמש במסד הנתונים של DB1   הייתה שפה שנקראה  DBPL1    שבעצם נבנתה מעל שפת ה  .PL1 לשפה זו הייתה גרסה ישנה עם תחביר קצת מסורבל, ואמרו לי שיש בדרך גרסה חדשה שבנה אחד מחברי הצוות שם כעבודת מאסטר.

 
לעיתים עבודות מאסטר לא נשארות על הנייר אלא יוצא מהן משהו מועיל 

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

 
עסקה שהשתלמה לשני הצדדים 

 

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

השארתי אותו עם בעיה שנראתה מאד משונה 


 

 

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

 
בניגוד לארכימדס לא בדיוק יצאתי מהאמבטיה, אך בהחלט זו הייתה הארה 

  כשהגעתי הלכתי אליו ואמרתי לו שמצאתי מה הבעיה.  "ידעתי" הזדעק "גילית שלביט יש באמת שלושה מצבים".  במקום לענות נטלתי גיר וכתבתי על הלוח אצלו במשרד:

DEFAULT RANGE (*) STATIC

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

 
הציור הזה מתאר בערך את מצב הרוח שלו באותו רגע 

 

 

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

יש משתנים סטטיים ויש זמרים סטטיים 
יש

 

 

בתכנות, כל פעם שבו קוראים לפונקציה שתבצע משהו, ההנחה היא שהזיכרון המוקצה לפונקציה כולל כל המשתנים שלה מוקצים מחדש, וכאשר יוצאים מהפונקציה הם נעלמים.    הפסוק שכתבתי למעלה מטרתו לקבע את הזיכרון של כל המשתנים כסטאטי, כלומר כאשר יוצאים מהפונקציה הם לא נעלמים, וכשנכנסים אליה שנית לא מקצים אותם מחדש.  המטרה היא לחסוך את זמן ההקצאה והשחרור.   והיכן הבעיה?  בכניסה לפונקציה הוא נתן ערך התחלתי למשתנה מסוים שיהיה "0"  ואם תנאי מסוים מתקיים הוא השתנה ל "1".  כך שבפעם הראשונה הפונקציה עבדה באופן תקין,  אבל בכניסה השנייה של הפונקציה בגלל שלא הוקצה המשתנה מחדש, לא ניתן למשתנה ערך התחלתי, והערך הקודם נשמר.  כך שברגע שהוא הפך ל  "1"  הוא נשאר כך לנצח בכל ההפעלות של הפונקציה, בין אם זה נכון ובין אם לא.   הוא  לא לקח בחשבון אפשרות כזו, ולא היה ערוך לכך.  הפתרון: הורדתי את ההגדרה הזו, והכל עבד, הוא הוסיף לחוברת ההוראות שלו איסור מפורש להשתמש במשתנים סטטיים.

צירוף כל הדברים גרם לבלבול מוחלט 



 

אמנם יש לוגיקה תלת-ערכית שבה יש שלושה ערכי אמת: אמת, שקר ולא ידוע, אבל זה לא ממש היה המקרה.

 
כאמור - יש לוגיקה תלת-ערכית אבל היא לא בסיפור הזה 

 

 

 

 

 

אין תגובות:

הוסף רשומת תגובה