אסמבלי VS שפות אחרות - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

אסמבלי VS שפות אחרות


HingedEmu2

Recommended Posts

לא הייתי בטוח איפה לפתוח, מקווה שיענו לי.

נגיד ואני בונה תוכנה בשפה כמו C# או JAVA, שעושה דבר כזה:

-M=0

-לולאה על X מאחד עד מיליון ובתוכה:

---תנאי "האם X מתחלק ב2":

------אם כן, M+=X

-החזר M.

ואז אני אריץ את התוכנה בJAVA או C# ואבדוק זמני הרצה... ממה שהבנתי אמור לקחת +- אותו זמן.

השאלה שלי היא מה קורה באסמבלי מבחינת מהירות הרצה? כמה אחוזים יורדים מהריצה?

יש איזשהו אתר שמשווה בין כל השפות מהבחינה הזו?

תודה לעוזרים :)

קישור לתוכן
שתף באתרים אחרים

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

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

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

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

אז אין כל-כך משמעות לשאלה שלך.

קישור לתוכן
שתף באתרים אחרים

אוקי...

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

אשמח אם תאירו את מוחי :)

קישור לתוכן
שתף באתרים אחרים

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

C# (במימוש הפופלארי שלה) למשל היא חלק ממערכת רחבה יותר שנקראת .NET. כל שפה שנתמכת ב .NET (למשל גם VB.NET) מקומפלת בסופו של דבר למשהו שנקרא CLI.

את C# כדאי להשוות לשפות כמו C, C++ וכו'.

CLI היא שפת ה LOW LEVEL של .NET כמו שב JAVA יש את ה JAVA BYTE CODE. שפות אלו עדיין רמה די גבוהה מעל אסמבליי, כי באמבסליי יש לך פקודות די בסיסיות של המעבד, בקושי יש התייחסות שם לטיפוסים, בטח שלא לטיפוסים מורכבים (בעוד שבשפות בסיס של CLI יש לך דברים כמו אובייקטים וכו').

בסוף יש קוד שלוקח את ה BYTE CODE הזה (שהוא גם קוד גנרי שלא מכיל תיאור מוכוון לדגם מעבד ספציפי) ומריץ אותו על מעבד ספציפי (אזי מתרגם אותו לאסמבלי מסויים).

במרבית השפות יש גם שלב של bootstrap מלא עצמאי. זאת אומרת שהגיעו לשלב מסויים שהשפה עצמה (בלי אסמבלר בכלל או עם קצת) יכולה לקמפל את הקומייפלר באופן עצמאי.

קישור לתוכן
שתף באתרים אחרים

אוקי, אם ננסה להתייחס לשאלה שלך לפי השאלה הראשונה שלך, אזי אם היית כותב קוד שקול ב JAVA/C#/ASM היית מקבל +- אותם ביצועים. אבל מכיוון שהשפות JAVA/C# (ולצורך העניין אחרות) נותנות לך עושר יותר גדול לעבוד איתו (אובייקטים, ירושה, משתנים לוקאלים, ניהול זכרון), לכל פונקצינליות שאתה מוסיף (שאין לך ישירות ב ASM) אתה משלם. גודל התשלום תלוי בגודל הפעולה ועל איזה מבנה נתונים אתה מריץ אותה.

אם יש לך ויזואל, אתה יכול לכתוב קוד פשוט ב C# למשל ולראות את האמסבלי שנוצר.

קישור לתוכן
שתף באתרים אחרים

בעיות הביצועים בשפה כמו גאווה היא ברמה הרבה יותר גבוהה מקוד מכונה.(אגב אסמבלי זה לא קוד מכונה זה רמה קצת מעל).

בעקרון לא צריך להיות שום הבדל ברמת הביצועים בין JAVA ל C# ול C++.

ההבדל הוא שבJAVA ו C# יש לך עוד שכבה של שירות כמו הGARBAGE COLLECTOR.

הGC בJAVA הוא די חרא ולמען האמת JAVA לא כל כך טוב למשחקים למשל.(אני יודע שMINECRAFT נכתב בJAVA וכו).

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

אבל גם עם כל זה לפעמים עדיף להשתמש בJAVA מאשר בשפות אחרות כי זה פשוט יותר נוח והיתרונות עולות על החסרונות.

אבל... למה זה בכלל משנה לך?

אתה לא נראה ברמה שאתה יכול בכלל לדאוג לאפלקציה עם הרבה דרישות בביצועים.

קישור לתוכן
שתף באתרים אחרים

Java ו#C הן יותר עיליות מ++C, ושתיהן שפות מנוהלות, וככאלה יש להן תקורה יותר גבוהה מ++C. בהחלט יכול להיות הבדל בביצועים לטובת ++C במצבים רבים.

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

קישור לתוכן
שתף באתרים אחרים

מה שניסיתי לאמר זה שברגע שאתה מכניס דרישות ביצועים לשפה כמו JAVA כל היתרון שלה של ניהול כמעט ונעלם.

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

קישור לתוכן
שתף באתרים אחרים

C++ היא לא שפה מסובכת במיוחד פשוט לוקח יותר זמן ללמוד ולהבין איך להשתמש בה
אני נוטה לא להסכים. :) ++C היא מאוד מסובכת, לפחות אם מנסים להשתמש בכולה או מנסים לתכנת בה כמו בשפה מנוהלת. עם זאת, מי שמגביל את עצמו מראש לחלק היותר שפוי של ++C (זה שאפשר לקרוא לו C with classes או בצורה יותר מדויקת C with structs with functions), כנראה יסתדר לא רע.
קישור לתוכן
שתף באתרים אחרים

ברור שאתה לא חייב להשתמש בכל הפיצ'רים של C++, אני לא הייתי נכנס לכל הטירוף של TEMPLATES מתקדם ב C++.

C++ זו שפה מולטי דיספלנרית, שזה אומר שיש יותר מדרך אחת וגישה אחת לתכנת איתה ולהשתמש בה.

קישור לתוכן
שתף באתרים אחרים

לפחות יצאה פה בדיחה טובה: "

C++ היא לא שפה מסובכת במיוחד פשוט לוקח יותר זמן ללמוד ולהבין איך להשתמש בה.

"

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

גם בעיה מרכזית בשפה זו היא עבודת צוות (לעומת שפות כמו C# ו JAVA שבהם יש פחות עושר של השפה ולכן פחות דרכים לירות לאחרים ברגל).

קישור לתוכן
שתף באתרים אחרים

כן בשביל לשלוט ב C++ אתה צריך יותר ידע באיך המחשב עובד ואיך מערכות הפעלה מתפקדות. בJAVA ו C# אתה יכול להתייחס לכל מה שקורה מתחת בתור קסם, אבל אם תצטרך לכתוב דברים מורכבים הפער בידע שלך ימנע ממך מלכתוב משהוא טוב.

C לא יותר מוגן מ C++.

גם ל C++ יש הגנות בצורה של בדיקת טיפוסים וכו. ב C אין לך אפילו בדיקות טיפוסים כמו ב C++ ואם תרצה לעשות CLASS ב C תצטרך להשתמש ב VOID * ופוינטרים לפונקציות שהם ממש לא בטוחות בהשוואה לקלאסים של C++.

קיצר, הבנו אתה חכם, אין לי מה להתווכח איתך.

קישור לתוכן
שתף באתרים אחרים

אני נוטה לא להסכים. :) ++C היא מאוד מסובכת, לפחות אם מנסים להשתמש בכולה או מנסים לתכנת בה כמו בשפה מנוהלת. עם זאת, מי שמגביל את עצמו מראש לחלק היותר שפוי של ++C (זה שאפשר לקרוא לו C with classes או בצורה יותר מדויקת C with structs with functions), כנראה יסתדר לא רע.

C++ אמנם שפה לא פשוטה, אבל "C with classes" זו מחלה המשלבת את המגרעות של C והמגרעות של ++C.

החל בC++11 נפרדו דרכיהן של שתי השפות.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...