VB.NET
עד אתמול עוד החזקתי מ DOTNET, אמרו, "נכון שזה מכונה וירטואלית, אבל זה מתקמפל לקוד מכונה מקומי אחרי ההרצה הראשונה" וכו', ויש גם אופטימייזרים... רק 15% יותר איטי מקוד מקומי... הקיצר, אני כותב את הקוד הבאה:
אבל כאן, לא ולא. בכוונה תחילה שמתי STOP בלולאה, וביקשתי שיציג לי את ה DISASSEMBLY של הקוד שרץ. עבור השורה הזאת בלבד היו שם 9 שורות, חילוק FLOAT וחזרה ל INTEGER, ואפילו קריאה לפונקציה! על כל חילוק הוא שם קריאה לפונקציה! באמת! הרי i הוא INTEGER, החילוק בכל מקרה יתעגל ל INTEGER, אז למה FLOAT? אז נכון שהקופניג של הפורייקט היה DEBUG, אבל גם כשהעברתי אותו ל RELEASE, ביטלתי את ההגדרה של DEBUG ו TRACE, ביטלתי בדיקת חריגות של INTEGER, ואיפשרתי אופטימיזציות, קיבלתי את אותו הקוד. בסופו של יום - זה מוות קליני. אני מסכים שקוד מכונה וירטואלי לא יכול לעשות שימוש ברגיסטרים של המכונה, בקוד עצמו -- אבל כשה JIT הופך אותו ל NATIVE CODE, למה לא? ובסך הכל, אין פה איזה גאונות, חילוק בשתיים (קבוע) אפשר לעשות עם SHR, וגם עם DIV זה יותר זול מ FDIV, אז למה לעזאזל? סתם כי בא לי לדבר. -תומר
עד אתמול עוד החזקתי מ DOTNET, אמרו, "נכון שזה מכונה וירטואלית, אבל זה מתקמפל לקוד מכונה מקומי אחרי ההרצה הראשונה" וכו', ויש גם אופטימייזרים... רק 15% יותר איטי מקוד מקומי... הקיצר, אני כותב את הקוד הבאה:
dim i as integer i=8 for... i/=2 next
זה טוען מקובץ דברים וכו', לא משנה. השורה i/=2 היא זו החשובה כאן. עקרונית, קומפיילר של C או כל דבר עם אופטימייזר נורמלי, היה עושה:mov eax, shr eax, 1 mov , eax
אבל כאן, לא ולא. בכוונה תחילה שמתי STOP בלולאה, וביקשתי שיציג לי את ה DISASSEMBLY של הקוד שרץ. עבור השורה הזאת בלבד היו שם 9 שורות, חילוק FLOAT וחזרה ל INTEGER, ואפילו קריאה לפונקציה! על כל חילוק הוא שם קריאה לפונקציה! באמת! הרי i הוא INTEGER, החילוק בכל מקרה יתעגל ל INTEGER, אז למה FLOAT? אז נכון שהקופניג של הפורייקט היה DEBUG, אבל גם כשהעברתי אותו ל RELEASE, ביטלתי את ההגדרה של DEBUG ו TRACE, ביטלתי בדיקת חריגות של INTEGER, ואיפשרתי אופטימיזציות, קיבלתי את אותו הקוד. בסופו של יום - זה מוות קליני. אני מסכים שקוד מכונה וירטואלי לא יכול לעשות שימוש ברגיסטרים של המכונה, בקוד עצמו -- אבל כשה JIT הופך אותו ל NATIVE CODE, למה לא? ובסך הכל, אין פה איזה גאונות, חילוק בשתיים (קבוע) אפשר לעשות עם SHR, וגם עם DIV זה יותר זול מ FDIV, אז למה לעזאזל? סתם כי בא לי לדבר. -תומר