|
||||
|
||||
אבל הרי את טוענת את המובן, או המוכח מאליו. לא ניתן לכתוב תוכנה שאין בה טעויות וזה מוכח מתמטית על פי מכונת טיורינג. |
|
||||
|
||||
מה ש"מוכח מתמטית" הוא שישנן בעיות שאינן ניתנות להכרעה באמצעות חישוב, ודוגמא קלאסית היא "בעיית העצירה". דווקא השאלה של כתיבת תוכנה ש"אין בה טעויות" היא שאלה העומדת באחת החזיתות של המחקר במדעי-המחשב, בתחום שנקרא verification ("וידוא", כמדומני) ועוסק ב"הוכחה מתמטית של נכונותן של תכניות מחשב". בהקשר הזה, "טעות" היא חוסר-התאמה בין התנהגות התכנית לבין אפיון מדויק של האופן בו היא אמורה להתנהג, כך ששוב - לא ניתן לדבר על "תוכנה שאין בה טעויות", משום שכל תוכנה היא כזו (נטולת-טעויות) ביחס לאיזשהו אפיון (היא עצמה). סביר שהטעויות שחן עושה אכן מתבטאות בחריגה מאיזשהו אפיון של התכניות שהיא רוצה לכתוב, אולם אלה טעויות של חן (ולא של התוכנה). |
|
||||
|
||||
מה היה בדיוק הקיצור לתשובה נכונה אך לא רלוונטית? האם אתה לא מבלבל עם הטסט של טיורינג לבינה מלאכותית? בקורס החישוביות שלקחתי בזמנו הראנו באמצעות מודל מכונת טיורינג שאי אפשר לכתוב תוכנה חופשית מבאגים. הסתכלות על הטעות התיכנותית מצד האפיון לא שולל את קיום הבאג כי צריך להכניס למשוואה לא רק את האופן בו היא אמורה להתנהג אלא גם את אופן השימוש. אינני זוכר את ההוכחה (בכ"ז עברו אי אילו שנים) אבל חלק מההסבר היה חוסר האפשרות לבדיקת כל הצירופים האפשריים. |
|
||||
|
||||
חשבתי שבתגובתך המקורית רמזת לבעיית העצירה. בתגובתי שלי התייחסתי לבעיה זו, הנוגעת ליסודות התאוריה של מדעי המחשב ולחישוביות, ולא למבחן-טיורינג, שהוא עניין פילוסופי בהרבה (מלבד ההצלחה המעשית בתחום, המופגנת בימים אלה ע"י אפופידס 1.0b). תיאלץ להסביר שוב, אם לא את ההוכחה, אז לפחות מה היא מוכיחה (בפרט, להגדיר "באג"). האפיון המלא של תוכנית הוא פונקציה על קבוצת הקלטים לתוך קבוצת הפלטים. למשל: ניתן בהחלט לכתוב תוכנית נטולת-באגים המקבלת כקלט מספר חיובי ושלם קטן מ-100 ומחזירה כפלט את אותו מספר. אנא, נסה להסביר למה התכוונת. אם מדובר בקבוצת קלטים אינסופית, עדיין ישנן דרכים לכתוב תכניות ולהוכיח את נכונותן, ולעיסוק בכך התייחסתי בתגובה הקודמת. |
|
||||
|
||||
אני אנסה להזכר או אולי המחברות הישנות נמצאות בבויידם של הורי .יכול להיות שמדובר בבעית העצירה. האם יש לך איזה מראה מקום לרענון הזכרון? |
|
||||
|
||||
|
||||
|
||||
כבר שנים שכמעט אינני עוסק בתכנות, ומעולם לא למדתי זאת בצורה מסודרת, אבל מובן שניתן לכתוב תוכנית נקיה מקוצים. הדבר תלוי במורכבות התוכנה. אפילו כיום אני מסוגל לכתוב תוכנית, שבכל פעם שתופעל תצליח לחשב כמה זה 1+1 ללא שום באג. |
|
||||
|
||||
int main(){return 42;} תוכנה זו אף פעם לא טועה, ואף עושה מעבר למצופה.
|
חזרה לעמוד הראשי | המאמר המלא |
מערכת האייל הקורא אינה אחראית לתוכן תגובות שנכתבו בידי קוראים | |
RSS מאמרים | כתבו למערכת | אודות האתר | טרם התעדכנת | ארכיון | חיפוש | עזרה | תנאי שימוש | © כל הזכויות שמורות |