בתשובה לעומר גולדמן, 14/12/06 19:57
מכונת טיורינג 424564
טל דיבר כאן פעם <דמיין קישור כאן> על מישהו שהוכיח שאפשר לסמלץ מכונת טיורינג באמצעות Templates ב-++C, כך שריצת המכונה תתבצע כולה עוד בזמן הקומפילציה (בפרט נובע מכך שאפשר לכתוב תוכנית כל כך גרועה ב-++C, שהיא תתקע את המחשב כבר כשמקמפלים אותה).
קשה ב C קל בקרב (וב lisp) 424569
מקרו ב lisp הוא למעשה תוכנית שמתבצעת בזמן קומפלציה, ולכן קל מאד להכניס את הקומפיילר ללולאה אין סופית.
מטה תיכנות ב ++C הוא קשה כי השפה שלו, templates, היא מוגבלת ביותר ולא כוללת לולאות.
קשה ב C קל בקרב (וב lisp) 424570
ההבדל הוא שבל-lisp זה מכוון. אני לא מבין גדול ב-++C, אבל אני חושד שלא לכך התכוונו אליו שיצרו את ה-templates.
קשה ב C קל בקרב (וב lisp) 424609
מצד שני, כל מה שאפשר לעשות בעזרת לולאה אפשר לעשות גם בעזרת רקורסיה, וכאלה דווקא יש ב-templates.
קשה ב C קל בקרב (וב lisp) 424619
אפשר גם במכונת טיורינג
;)
קשה ב C קל בקרב (וב lisp) 424657
אם זה מעניין אותך, אז הנה שני מאמרי מבוא ל-template metaprogramming ב-C++ של טוד ולדהויזן:

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

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

חזרה לעמוד הראשי המאמר המלא

מערכת האייל הקורא אינה אחראית לתוכן תגובות שנכתבו בידי קוראים