למה GO נבהל מכל panic?
-
אני חושב שגם בשאלה הזו אין שום דבר מיוחד בgo.
panic זה מן הסתם שם נרדף לexception. ומדובר פה לפי מה שאני מבין בגישה למשתנה מצביע לא מאותחל/ריק. מה שנקרא בjava "טעות המיליון דולר" - NullPointerException.
exception זה פיצ'ר בשפות תכנות, שגורם לתוכנה ליפול אם אין לכידה וטיפול במקום להמשיך "כאילו כלום".
אני מתאר לעצמי שכל מתכנת מרגיש לפחות לפעמים שהexception יותר מפריעים ממסייעים. בגללם התוכנה שלו קורסת והוא צריך להסתרבל עם טיפול בשגיאות וכו'. בכל זאת אם זה קיים זה אומר שהעדר גרוע יותר: תוכנית שממשיכה לרוץ באופן שלא צפית (כי אם צפית למה לא טיפלת בזה?) זה סכנה גדולה יותר מתוכנית קורסת (שנראית הסכנה הגדולה ביותר כאשר זה קורה...). -
@dovid
ניחשתי שזה משהו משותף לשפות הלאו לוואל
בכללי זה טוב שאתה תופס את הבאגים מוקדם (בקימפול למשל)
ולא אחרי שזה בפרודקשן מלא
אבל הייתי מצפה לאופציה של "התעלם" מפעולות שהם לא קריטיות
כך שאם יש איזה באג מתוחכם שקורה רק במקרה מסויים תחת עומס (מה שקרה לי היום)
אני יוותר על הפעולה הזאת והמשתמש שיצר את הבאג יקבל כמה שגיאות
אבל שאר הלקוחות ישארו באוויר -
כמו ש@yossiz אמר זה קורה בכל שפה נורמלית, זה לא באג אלא זה שכלול שהכניסו לכל שפה.
ושפת PHP לא מוכרת לי בעניין הזה, אבל ללא ספק יש את זה שם אבל יש לקחת בחשבון שני דברים:
א. קריסה בPHP זה סה"כ בהקשר של בקשה בודדת - זה היקף האפליקציה שרצה באותו רגע.
ב. יש מחלקות "סלחניות" שסובלות שגיאות. כל מתכנת יכול לעטוף כל קוד מחולל שגיאות בקוד משלו שיהיה סלחן ולעולם "לא יעשה בעיות" אבל זה יתנקם בבאגים הרבה יותר גרועים (בקושי לאתרם ובתוצאות המשונות שלהם) מאשר קריסה כוללת שמאוד קל לטפל בה. -
@WWW תחשוב על הטלפון, נניח אתה שומר פרטי איש קשר, ויש באג והשמירה לא נעשתה. אם המפתח דאג, תוצג לך שגיאה ותדע שאיש הקשר לא נשמר (ותנסה מהר להשיג את המספר שוב). אבל אם זו שגיאה שלא נצפתה, אילו התוכנה לא תקרוס יופיע לך כיתוב חגיגי שאיש הקשר נשמר בהצלחה.
בלינק הבא
https://softwareengineering.stackexchange.com/a/403344
יש דוגמה (קיצונית אמנם) שתאזן לך את השאלה: תוכנה של מטוס שתקרוס זה יחייב את הטייס לטוס "ידנית" ועם מעט מידע. אבל זה הרבה יותר טוב מאם התוכנה תמשיך לעבוד ותיתן מידע שגוי. -
על איזה תהליך צאצא אתה מדבר?
אני לא מכיר go אבל לא דיברת על תהליכי משנה.
מאוד יכול להיות שעצם הקריסה של תהליך גוררת שגיאה נוספת אצל האב והיא זו שגורמת לקריסתו (כל עוד לא טיפלו בתרחיש הזה).
בקיצור תיערך לשגיאות כדי שיקרו כמה שפחות ונסה ללכוד את אלו שכן יקרו ואז תחליט איך נכון להמשיך והאפליקציה שלך תמשיך. -
@dovid
כנראה שזה ההבדל
אני הפנמתי כבר בהתחלה שאין כאן הנחות (בשונה מPHP)
ואני דווקא נהנה מזה ,כי אז אתה לא נתקע עם זה בפרודקשן
אבל היום כאמור נפלתי עם טיפול במערך(יותר נכון מפה) ע"י שתי תהליכים במקביל
ומשום מה לא מזהירים על כך במדריכים למפות בGO
ורק אחרי שהלקוח הזעיק אותי למחשב ואחרי ניפוי באגים + חיפוש בגוגל
גיליתי את הסוד ורצתי לחפש את כל המקומות בו אני יוצר איברים למערך והוספתי נעילה
וזה די מתסכל שאני לא יכול לישון בשקט
שהשרת שלי ישאר למעלה גם אחרי שהרצתי בדיקות בסיסיות
(איך אני אמור ליצור כזאת שגיאה בתנאי מעבדה?)
@יוסף-בן-שמעון
בPHP אם אתה לא כותב את הסקריפט נכון הוא לא יתחיל
אבל לא נראה לי שיש הפתעות באמצע הריצה -
@nigun הבעיה היא אחרת. שאתה משתמש בפרודקשיין בשפה שהרגע למדת,
ולא רק השפה חדשה אלא גם כל הטכניקות שלה גם זרות לך לגמרי (כמו ריבוי תהליכים. ואם יש אזהרות במדריכים, שמה הם אמורים להיות).
לא רק שאין בזה בעיה אלא שזה הדרך הכי טובה ללמוד! אבל המחיר הוא השגיאות האלה. -
@יוסף-בן-שמעון אמר בלמה GO נבהל מכל panic?:
@WWW דוקא זכור לי שאם אתה כותב שתי פונקציות בשם זהה נזרקת חריגה והתהליך מתרסק, אני טועה?
זו שגיאת מהדר נראה לי.
-
@dovid אמר בלמה GO נבהל מכל panic?:
@WWW תחשוב על הטלפון, נניח אתה שומר פרטי איש קשר, ויש באג והשמירה לא נעשתה. אם המפתח דאג, תוצג לך שגיאה ותדע שאיש הקשר לא נשמר (ותנסה מהר להשיג את המספר שוב). אבל אם זו שגיאה שלא נצפתה, אילו התוכנה לא תקרוס יופיע לך כיתוב חגיגי שאיש הקשר נשמר בהצלחה.
יש עוד אלפי דגמי טלפונים שזה לא קורה.
מבחינתי בכזה מקרה אמור להיות הודעה :שגיאה כללית". -
@WWW אמר בלמה GO נבהל מכל panic?:
מבחינתי בכזה מקרה אמור להיות הודעה :שגיאה כללית".
אתה חי בקונספט של אקסס ואולי גם PHP, שחלק רב מהמערכת בכלל לא נכתב על ידך. אז הדרישות שלך מופנות למתכנת של חלק אחר בתוכנה.
אם אתה זה שכותב את הקוד, מאפס, מי ידאג לכזו הודעה אם לא אתה.
המתכנת אמור לעשות לכידת שגיאות ולכתוב את זה. ואם הוא לא לכד אנחנו מגיעים לנושא ש@nigun פתח.
הוא לא ציפה להודעה כזו אלא ציפה שחבר של nil יחזיר גם nil וכן הלאה ולא צריך לעשות שגיאות על כל דבר שחסר או לא מתאים.