C++ vs. C# - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

C++ vs. C#


GWeizman

Recommended Posts

כותרת.

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

שיקולים עיקריים

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

ההתלבטות העיקרית כרגע, כמו שכתוב בכותרת, היא בין C# לC++

מבחינת ידע, למדתי דיי מזמן קצת C (עדיין יש לי את הספר), יודע mIRC Scripting (שרוב האנשים יניחו שזה לא יעזור לי בכלום, אבל היא מכילה את כל היסודות) ברמה טובה, תכנות אתרים יודע PHP ברמה מספיקה לעשות כל מה שצריך וHTML כמובן.

אין לי שום בעיה עם למידה באנגלית במקום בעברית, אפילו להפך, אני מעדיף ללמוד באנגלית

אז מה שאני בעצם צריך זה:

1. לדעת איזה שפה יותר תתאים לי

2. להבין למה השפה הזאת יותר תתאים לי

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

קלות הלימוד לא מפריעה לי, כי זה לא לשום דבר מוגדר כרגע, ככה שהזמן שלי 'בלתי מוגבל'.

תודה מראש,

גיא.

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

C# לדעתי.

Object Oriented Language, זה העתיד :)

אני חמור שכותב בפונט קטן את הטקסט הבא: (לדעתי)

++C תומכת במלואה ב OOP. למעשה, היא מאפשרת יכולות שאף לא נתמכות ב #C, למשל הורשה מרובה ממחלקות. אפשר להתדיין לגבי אם זה טוב או רע, אבל בסופו של דבר, ++C נותנת לך את היכולת הזאת לפחות, ומשאירה את ההחלטה בידים שלך :)

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

כאמור שכל זה בה על חשבון הביצועים הקטסטרופלים שיש לה ביחס לשפות native אחרות.

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

לא מסכים עם HydroIT,

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

קלות כתיבה:

אני מאמין ש C# יותר קלה בכתיבה מ C++ (למרות שאף פעם לא תיכנתתי ב C# רק JAVA קצת, אבל הן דומות).

אפשרויות:

C# אם אני לא טועה היא מהטכנולוגיה של NET של MS => אין תמיכה ב CROSS PLATFROM, לעומת C++ שנתמכת בכל מערכות ההפעלה.

יעליות שפה:

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

כל הנכתב לעיל מתבסס על דעתי האישית והידע שלי ב C# מוגבל לכן יש מצב שאני טועה.

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

בכל מקרה חפרתי מספיק זו דעתי, בהצלחה :)

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

יעליות שפה:

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

הסיבה ששפות שהן managed יותר איטיות מאשר שפות native היא לא בגלל שהן OOP, הרי כמו שאמרת גם ++C היא שפת OOP לכל דבר

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

ובעוד כל זה קורה, ה GC רץ ברקע בשביל לדעת מתי לשחרר זכרון וכו'.. כאמור, למפתח אין שום שליטה על מתי ישוחרר.

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

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

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

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

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

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

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

למעשה, קיים סטנדרט שאושר גם בעבור #C ע"י ה ECMA ו ISO. וקיימים גופי קוד פתוח כגון Project Mono שמימשו קומפיילר פורטבילי משלהם ללינוקס

למעשה גם ב ++C רוב המפתחים ב משתמשים בקומפיילרים של , כמו שרוב המפתחים בלינוקס משתמשים ב gcc

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

שים לב שאם אתה מפתח בC++ את אותה התוכנית עבור 2 מערכות הפעלה שונות, לא בטוח שהיא תפעל זהה בשתיהן. C++ אתה יכול אולי להריץ על מגוון רב של מערכות הפעלה, אך להעביר תוכנה ממערכת הפעלה אחת לשנייה יכול להיות כאב ראש.

C#(וJAVA) יותר יעילות בקטע הזה. אתה כותב את אותו הקוב, ומובטח לך שהוא יתנהג אותו דבר בכל שיכולה להריץ את הקוד הזה.

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

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

המ

רגע, בשביל להריץ משהו שכתוב בC# חייבים .NET? או רק בשביל הכתיבה והקמפול עצמו?

אם אני מבין נכון, C# תיהיה שפה טובה יותר ושימושית יותר להתחיל איתה, אבל ב'עולם האמיתי' עדיף לי לדעת C++?

בנוסף, מה לגבי לעבור מC# לC++? שונות לגמרי, או שיש דמיון?

והאם יש צורך ללמוד C לפני C++, או שהספרים של C++ ילמדו אותי מה שצריך מהבסיס?

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

אם אני מבין נכון, C# תיהיה שפה טובה יותר ושימושית יותר להתחיל איתה, אבל ב'עולם האמיתי' עדיף לי לדעת C++?

אדם ללא ניסיון יגיע לתוצאות "ממשיות" מהר יותר ב #C מאשר ב ++C.

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

יש פרויקטים שעדיף לכתוב ב ++C, ויש אחרים שעדיף ב #C. החוכמה היא לדעת באיזה "כלי" לבחור בעבור המשימות המתאימות.

בנוסף, מה לגבי לעבור מC# לC++? שונות לגמרי, או שיש דמיון?

והאם יש צורך ללמוד C לפני C++, או שהספרים של C++ ילמדו אותי מה שצריך מהבסיס?

מלבד הדימיון בשם, ואולי מעט בסינטקס, שתי השפות שונות לחלוטין בכל הנוגע לקונספט שמגיע איתן. managed code מצד אחד, ו native מהשני

אין צורך ללמוד C ורק אחר כך ++C. תוכל ללמוד ++C ישר ללא בעיה.

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

הסיבה ששפות שהן managed יותר איטיות מאשר שפות native היא לא בגלל שהן OOP, הרי כמו שאמרת גם ++C היא שפת OOP לכל דבר

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

ובעוד כל זה קורה, ה GC רץ ברקע בשביל לדעת מתי לשחרר זכרון וכו'.. כאמור, למפתח אין שום שליטה על מתי ישוחרר.

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

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

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

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

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

ומה אתה חושב שקורה ב ++C? גם היא מאפשרת פונקציות וירטואליות ולכן גם היא משתמשת ב vtable'ים. כאן אין הבדל.

ההבדל בביצועים נובע מזה שתוכנית managed code צריכה לרוץ בתוך VM. שבמקרה של דוט נט, זהו ה CLR.

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

><

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

spiritus asper

אני יודע שבסי++ גם נוצר vtable.

שוב טעות בגלל שהגבתי לא נכון מלכתחילה.

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

ארכיון

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

×
  • צור חדש...