עבור לתוכן

מה ההבדל בין C# לC/++C?

Featured Replies

פורסם

זה יותר מסובך מזה.

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

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

אם ניקח דוגמא עם שתי שפות ספציפיות:

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

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

בגדול כל הזמן מנסים לחשוב על שפות שהן גם קלות וגם מהירות. לפעמים מטעמי שיווק, ולפעמים כי חסר משהו בשפות הקיימות. אם נסתכל על שפות מודרניות יחסית אז יש את C#, Python, Ruby, D, Boo ועוד כאלה שבטח פיספסתי. כולם טוענות כל מיני טענות לגבי ביצועים, קלות לימוד ושימוש וכו'.

פורסם

השאלה הכי נטחנת בפורום , שיעשו מזה כבר סטיקי

פורסם

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

פורסם

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

CSharp הופיעה בשנת 2000 , על איזה עשרות שנים אתה מדבר ומה זה אין תשובה??? על מה אתה מדבר , בטח שיש תשובה.

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

ולעניין של הדיון , לשני השפות יש יעודים שונים.

אני אתחיל קודם מההבדלים המהותיים.

Csharp היא שפה ששומרת על type-safety בעוד שC++ לא.

CShap היא שפה מונחית עצמים טהורה , C++ לא.

בCSsharp ו.NET יש CLASS LIBRARY עצום , בC++ יש כמה ספריות בל לא מתקרבות בגודלן לזו של CSHARP

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

נגזר מהנקודה הקודמת :לרב C++ תפיק אפליקציה מהירה יותר מCSHARP (חשוב באמת רק באפליקציות RT).

בCSHARP הכל הרבה יותר אינטואיטיבי , בC++ האינטואיציה באה עם הניסיון.

CSHARP מושתת על VIRTUAL MACHINE , C++ לא.

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

CSHARP אינה תומכת בירושה מרובה , רק ממשקים (וטוב שכך) , C++ כן.

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

C# תומכת בREFLECTIONS - סיפלוספלוס לא.

C# 2.0 תומכת בNULLABLE VALUE TYPES ,סיפלוספלוס לא.

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

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

ולגבי איזה שפה יותר טובה , זה פשוט תלוי במה רוצים לעשות.

אם רוצים לפתח את המנוע של DOOM 4 אז צריך להיות ממש דביל בשביל לבחור בC# שכן עם C++ יהיה אפשר להשיג מנוע הרבה יותר יעיל (בגלל השליטה בזכרון וגם בגלל שאין את הCLR).

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

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

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

פורסם

CSharp הופיעה בשנת 2000 , על איזה עשרות שנים אתה מדבר ומה זה אין תשובה??? על מה אתה מדבר , בטח שיש תשובה.

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

מן הסתם הוא לא התכוון ספציפית ל C# אלא לוויכוח (העקרוני) לגבי שפות התכנות השונות. אמנת c# היא חדשה יחסית אבל java למשל שדומה ל C# מהרבה בחינות וותיקה יותר.

פורסם

Yossi1981 אתה באמת חושב ש Zelig לא יודע ש c# די חדשה ?

פורסם

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

CSharp הופיעה בשנת 2000 , על איזה עשרות שנים אתה מדבר ומה זה אין תשובה??? על מה אתה מדבר , בטח שיש תשובה.

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

ולעניין של הדיון , לשני השפות יש יעודים שונים.

אני אתחיל קודם מההבדלים המהותיים.

Csharp היא שפה ששומרת על type-safety בעוד שC++ לא.

CShap היא שפה מונחית עצמים טהורה , C++ לא.

בCSsharp ו.NET יש CLASS LIBRARY עצום , בC++ יש כמה ספריות בל לא מתקרבות בגודלן לזו של CSHARP

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

נגזר מהנקודה הקודמת :לרב C++ תפיק אפליקציה מהירה יותר מCSHARP (חשוב באמת רק באפליקציות RT).

בCSHARP הכל הרבה יותר אינטואיטיבי , בC++ האינטואיציה באה עם הניסיון.

CSHARP מושתת על VIRTUAL MACHINE , C++ לא.

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

CSHARP אינה תומכת בירושה מרובה , רק ממשקים (וטוב שכך) , C++ כן.

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

C# תומכת בREFLECTIONS - סיפלוספלוס לא.

C# 2.0 תומכת בNULLABLE VALUE TYPES ,סיפלוספלוס לא.

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

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

ולגבי איזה שפה יותר טובה , זה פשוט תלוי במה רוצים לעשות.

אם רוצים לפתח את המנוע של DOOM 4 אז צריך להיות ממש דביל בשביל לבחור בC# שכן עם C++ יהיה אפשר להשיג מנוע הרבה יותר יעיל (בגלל השליטה בזכרון וגם בגלל שאין את הCLR).

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

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

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

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

* ב-C++ יש static typing, ומה שידוע כ-strong typing. מלבד הטיפוסים הבסיסיים, C++ היא שפה מאוד type safe (כולל ברמת ה-linkage) כל עוד אתה לא מבקש בעצמך להפר את חוקי ההמרות ע"י ביצוע cast. למעשה שימוש נבון ב-strong static types מאפשר כתיבת תוכנה רובוסטית ביותר ב-C++, והוא אחד התכונות האהובות עלי. אין כמו ההרגשה כאשר הקומפיילר תופס באג שהיה עלול לקרות, כי הקפדת על טיפוסים.

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

* ב-#C יש class library עצום כסטנדרט של השפה. הספריה הסטנדרטית של C++ קטנה בהרבה (אם כי מגדילים אותה בקרוב), אולם ניתן למצוא, לקנות או להעתיק מגוון _עצום_ של ספריות C++ פורטביליות, לכל מטרה שתרצה, ולא משנה כמה נידחת. מנקודת הסתכלות כזאת, ל-C++ יש ספריה גדולה מאוד, הרבה יותר מהספריה של #C.

* התקן הישן מאפשר (והחדש מחייב את הקומפיילר לספק אם המתכנת מבקש) ביצוע garbage collection ב-C++. יש מספר מימושים שעושים את זה. כנראה שהשימוש במימושים מסוג זה הוא נדיר. אני מצפה שהוא יגדל בשנים הקרובות (מאחר ש-GC יהפוך לחלק בלתי נפרד מהסטנדרט ומהשפה).

* אין שום דבר יותר או פחות אינטואיאיבי ב-C#, ב-C או ב-python (או כל שפה אחרת). גם אין מחקרים שתומכים בטענה הזו. לדעתי אין כזה דבר אינטואיציה בשפת תכנות, ומה שאינטואיטיבי לך יהיה לא אינטואיטיבי למישהו אחר שרגיל ל-LISP (לדוגמא).

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

ההרגשה שלי כרגע היא שאם יש פרוייקט שמתאים לפתח אותו ב-C# (על WINDOWS, עם FORMS, ביצועים לא חייבים להיות בשמיים) אז זמן הפיתוח יהיה קטן יותר ב-C#, מהתרשמות אישית שלי מול אנשים שעושים את זה.

פורסם

Yossi1981 אתה באמת חושב ש Zelig לא יודע ש c# די חדשה ?

אני חדש בפורום , אני לא יודע מי זה ZELIG ;D ;D

ול- ZELIG קיבלתי את ההערות שלך [br]פורסם בתאריך: 16.06.2007 בשעה 11:12:19


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

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

* ב-C++ יש static typing, ומה שידוע כ-strong typing. מלבד הטיפוסים הבסיסיים, C++ היא שפה מאוד type safe (כולל ברמת ה-linkage) כל עוד אתה לא מבקש בעצמך להפר את חוקי ההמרות ע"י ביצוע cast. למעשה שימוש נבון ב-strong static types מאפשר כתיבת תוכנה רובוסטית ביותר ב-C++, והוא אחד התכונות האהובות עלי. אין כמו ההרגשה כאשר הקומפיילר תופס באג שהיה עלול לקרות, כי הקפדת על טיפוסים.

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

* ב-#C יש class library עצום כסטנדרט של השפה. הספריה הסטנדרטית של C++ קטנה בהרבה (אם כי מגדילים אותה בקרוב), אולם ניתן למצוא, לקנות או להעתיק מגוון _עצום_ של ספריות C++ פורטביליות, לכל מטרה שתרצה, ולא משנה כמה נידחת. מנקודת הסתכלות כזאת, ל-C++ יש ספריה גדולה מאוד, הרבה יותר מהספריה של #C.

* התקן הישן מאפשר (והחדש מחייב את הקומפיילר לספק אם המתכנת מבקש) ביצוע garbage collection ב-C++. יש מספר מימושים שעושים את זה. כנראה שהשימוש במימושים מסוג זה הוא נדיר. אני מצפה שהוא יגדל בשנים הקרובות (מאחר ש-GC יהפוך לחלק בלתי נפרד מהסטנדרט ומהשפה).

* אין שום דבר יותר או פחות אינטואיאיבי ב-C#, ב-C או ב-python (או כל שפה אחרת). גם אין מחקרים שתומכים בטענה הזו. לדעתי אין כזה דבר אינטואיציה בשפת תכנות, ומה שאינטואיטיבי לך יהיה לא אינטואיטיבי למישהו אחר שרגיל ל-LISP (לדוגמא).

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

ההרגשה שלי כרגע היא שאם יש פרוייקט שמתאים לפתח אותו ב-C# (על WINDOWS, עם FORMS, ביצועים לא חייבים להיות בשמיים) אז זמן הפיתוח יהיה קטן יותר ב-C#, מהתרשמות אישית שלי מול אנשים שעושים את זה.

כמה דברים לגבי מה שאמרת:

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

- לגבי הספריה הסטנדרטית , אני לא מבין מה אתה מנסה להגיד??? לכל שפה יש ספריות שאפשר להוריד מהאינטרנט ולהשתמש בהן.

אני מדבר על ספריות סטנדרטיות ולא על ספריות צד שלישי שאפשר להשיג בשפע , מבחינת הספריה הסטנדרטית ל-C# יש הרבה , אבל הרבה יותר מה להציע.

- טעיתי אולי בניסוח שלי לגבי הTYPE SAFETY , אני אגיד ש-C# היא הרבה יותר TYPE-SAFETY מ-C++.

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

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

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

פורסם

אני חדש בפורום , אני לא יודע מי זה ZELIG ;D ;D

ול- ZELIG קיבלתי את ההערות שלך [br]פורסם בתאריך: 16.06.2007 בשעה 11:12:19


כמה דברים לגבי מה שאמרת:

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

- לגבי הספריה הסטנדרטית , אני לא מבין מה אתה מנסה להגיד??? לכל שפה יש ספריות שאפשר להוריד מהאינטרנט ולהשתמש בהן.

אני מדבר על ספריות סטנדרטיות ולא על ספריות צד שלישי שאפשר להשיג בשפע , מבחינת הספריה הסטנדרטית ל-C# יש הרבה , אבל הרבה יותר מה להציע.

- טעיתי אולי בניסוח שלי לגבי הTYPE SAFETY , אני אגיד ש-C# היא הרבה יותר TYPE-SAFETY מ-C++.

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

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

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

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

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

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

הנה מאמר מעניין של מישהו שמלמד שפות תכנות לסטודנטים כבר הרבה שנים (שוווה לקרוא את כל המאמר, הוא לא ארוך): http://www.bitwisemag.com/2/What-s-Wrong-With-Ruby

שים לב לכמה דברים (דווקא לא מרכזיים) במאמר:

* Matthew Huntbuch (כותב המאמר) בבירור מתאר את הדעות שלו, ואת הנסיון שלו, והוא לא מנסה לטעון טענות כוללניות. הוא לא מסווה דעות כאילו הן עובדות, או התרשמויות כאילו הן הוכחות.

* הדוגמא על האינטואיטיביות של Ruby הפתיעה אותי במוזרות של השפה. טוענים שזו שפה אינטואיטיבית, אבל לפי מה שאני רואה, היא ממש לא אינטואיטיבית בשבילי.

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

ארכיון

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

דיונים חדשים