סמנטיקה של קבוע.

Fractal

New member
סמנטיקה של קבוע.

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

Fractal

New member
במילים אחרות ערכו נקבע בזמן טעינה/איתחול ...

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

vinney

Well-known member
כן

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

Fractal

New member
למה בכלל אנחנו צריכים קבועים ?

למה אנחנו רוצים משהו שלא משנה את ערכו ? למה זה טוב ?
 

giladznaor

New member
מכמה סיבות

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

maverick 42

New member
שמע,יש קונספט שלא חשבתי עליו עד שהתחלתי ללמוד

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

Fractal

New member
החלשה של הגדרת קבוע.

קודם נסכם: אמרנו שקבוע זה תא שיכול לקבל ערך, ומאותו רגע ערכו לא משתנה למשך ריצת התוכנית. (בכך בעצם הבדלנו קבוע מערך; קבוע יכול לשנות ערכו תחת איתחול מחדש) במילים אחרות (נעוות קצת את ההגדרה): קבוע זה תא שמכיל ערך ושערכו לא משתנה ביחס לערכו באיתחול התוכנית. בצורה כזו לקבוע אין משמעות בריק; קבוע מוגדר ביחס לריצת תוכנית. נניח קיום קבוע C, אזי: 1. נריץ תוכנית P עם ערך C=a ונזין אותה בקלט X - התוכנית עכשיו במצב S1. 2. נריץ תוכנית P עם ערך C=b ונזין אותה בקלט X - התוכנית עכשיו במצב S2. נניח שניתן יהיה *לשנות* את ערכו של C בריצה 1 ובמצב S1 לערך b, כך שאחרי השינוי מצב התוכנית יהיה S2. שימו לב שאחרי שמשנים את ערכו של C התוכנית נמצאת במצב זהה לזה של 2, או המילים אחרות C הוא קבוע ביחס לערכו (אם היה נקבע כך) באיתחול התוכנית. (הערה: כרגע נניח דטרמיניזם) האם C עדיין יענה על הצרכים שלנו מקבוע ? האם אפשר לראות הגדרה זו כהרחבה להגדרה של קבוע ?
 

vinney

Well-known member
אני לא בטוח שאני עוקב אחרי התיאוריה

אבל על פניו נראה שכן. אתה רוצה לספר קצת יותר על מה עומד מאחורי השאלות?
 

Fractal

New member
אני עוד לא בטוח.

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

maverick 42

New member
אני לא חושב שיש משהו באמצע

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

Fractal

New member
מה בקשר לשינוי ערכו של קבוע בזמן איתחול מחדש?

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

maverick 42

New member
שמע, זה כבר עניין של סמנטיקה

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

BlackBamba

New member
"סמנטיקה של קבוע" ראה "סמנטיקה של קבוע"

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