|
||||
|
||||
טל דיבר כאן פעם <דמיין קישור כאן> על מישהו שהוכיח שאפשר לסמלץ מכונת טיורינג באמצעות Templates ב-++C, כך שריצת המכונה תתבצע כולה עוד בזמן הקומפילציה (בפרט נובע מכך שאפשר לכתוב תוכנית כל כך גרועה ב-++C, שהיא תתקע את המחשב כבר כשמקמפלים אותה). |
|
||||
|
||||
מקרו ב lisp הוא למעשה תוכנית שמתבצעת בזמן קומפלציה, ולכן קל מאד להכניס את הקומפיילר ללולאה אין סופית. מטה תיכנות ב ++C הוא קשה כי השפה שלו, templates, היא מוגבלת ביותר ולא כוללת לולאות. |
|
||||
|
||||
ההבדל הוא שבל-lisp זה מכוון. אני לא מבין גדול ב-++C, אבל אני חושד שלא לכך התכוונו אליו שיצרו את ה-templates. |
|
||||
|
||||
מצד שני, כל מה שאפשר לעשות בעזרת לולאה אפשר לעשות גם בעזרת רקורסיה, וכאלה דווקא יש ב-templates. |
|
||||
|
||||
אפשר גם במכונת טיורינג ;) |
|
||||
|
||||
אם זה מעניין אותך, אז הנה שני מאמרי מבוא ל-template metaprogramming ב-C++ של טוד ולדהויזן: (הפרויקט השנתי שעשיתי בסוף התואר, יחד עם אייל ותיק, היה לתכנן ולממש ספריית מטריצות מתוחכמת לחישובים "כבדים" תוך שימוש ב-template metaprogramming) |
|
||||
|
||||
תודה זה אכן מענין. קראתי לפני כמה שנים את Modern C++ Design, ואני עוקב מדי פעם אחרי boost. בהמשך למה שנאמר, ניראה ש metaprogramming ב ++C, זה יותר feature שיצא משליטה מאשר תיכנון אלגנטי. יש לנו למעשה שלוש שפות שונות, שמייצרות אחת את השניה: C preprocessor, אבל אין ממש קשר בין הסינטקס והיכולות של השפות האלה.metaprogramming ++C אני משווה את זה ל defmacro של lisp, ואני נידהם מהאלגנטיות. למה לא להשתמש באותו סינטקס ל preprocessor ולשפה עצמה? פשוט גדול. |
|
||||
|
||||
קצת התנתקתי מ-C++ בשנים האחרונות. ממה שאני זוכר, הנטייה היא להיפטר מה-preprocessor ולהחליף macros ב-templates, כדי להקל על המתכנת במניעת שגיאות טיפוסים. האם metaprogramming זה פיצ'ר שיצא משליטה? יכול להיות ואני יכול להבין את מי שיטען זאת. מצד שני, יש שיאמרו שזה מה שיפה בזה - ההפתעה של "מה אשפר לעשות עם זה למרות שמתכנני המנגנון לא חשבו על זה". |
חזרה לעמוד הראשי | המאמר המלא |
מערכת האייל הקורא אינה אחראית לתוכן תגובות שנכתבו בידי קוראים | |
RSS מאמרים | כתבו למערכת | אודות האתר | טרם התעדכנת | ארכיון | חיפוש | עזרה | תנאי שימוש | © כל הזכויות שמורות |