PDA

View Full Version : سوال: آیا ++C با #C تفاوتی دارد ؟



Keyhan Clever
سه شنبه 22 اردیبهشت 1388, 23:57 عصر
ببخشید کسی میتونه بهم بگه که آیا ++C با #C تفاوتی داره یا نه؟

اگه فرق داره میشه در مورد کارایی های #C توضیح بدین ؟

Sundown
چهارشنبه 23 اردیبهشت 1388, 00:19 صبح
ببخشید کسی میتونه بهم بگه که آیا ++C با #C تفاوتی داره یا نه؟


اختیار دارین. اگر تفاوتی نداشت که مایکروسافت این همه هزینه برای ساختش انجام نمیداد.
تفاوت در شکل کد نویسی و منطق شی گرایی و وراثت و مدیریت حافظه و .... زیاد هست.
من به چند نمونه اشاره میکنم بقیه رو دوستان میگن :

1 : تفاوت اول در کد خروجی است. سی شارپ دات نت بر خلاف سی پلاس پلاس برنامه های خود را به IL زبان میانی مایکروسافت تبدیل میکنه. این کار باعث قابل انتقال بودن خروجی سی شارپ بر روی هر ماشینی که پلتفرم یا سکوی دات نت در آنجا نصب باشه میشه. یعنی مثلا توی ویندوز با سی شارپ برنامه بنویس و خروجی توی یک سیستم عامل یا هر جای دیگه ای که دات نت نصب باشه اجرا کن.
2 : تفاوت دیگه استفاده از کتابخانه قدرتمند و بسیار غنی دات نت است. سی شارپ به علت قرار داشتن بر روی دات نت میتواند از کتابخانه کلاس ها و توابع موجود در این کتابخانه استفاده کند. کاری که کد نویسی و سرعت کار را بسیار بالا میبرد. ( البته این کار و امکان قبلی رو همه زبان های تحت دات نت از جمله c++.net نیز دارند )
3 : از جمله تفاوت های ریز میتوان به موارد زیر اشاره کرد. در سی شارپ بر خلاف سی پلاس پلاس استفاده از متغیری که مقدار دهی نشده امکان پذیر نیست. با این خاصیت خطاهای منطقی ناشی از استفاده از Memory Trash ها دیگه به وجود نیمآد. آرایه ها هم ایمن تر از سی پلاس پلاس هستند و در سی شارپ اجازه دسترسی به مکانی خارج از آرایه داده نمیشود. و سی شارپ دارای زباله روبی حافظه نیز هست. این کار باعث جلوگیری از به هدر رفتن حافظه میشود کاری که در سی پلاس پلاس بر عهده برنامه نویس بود و برنامه نویس باید حافظه را مدیریت میکرد و .....

با عرض پوزش الان وقت ندارم ( فردا امتحان دارم ) سر فرصت حتما بیشتر توضیح میدم.
دوستان اگر ایرادی در سخنان دیدند تذکر دهند و صحیحش رو بنویسند ( تند نوشتم نمیدونم چی شد!:خجالت: )

Keyhan Clever
چهارشنبه 23 اردیبهشت 1388, 00:24 صبح
خوب پس یعنی #C قدرتمند تر از ++C هستش ؟
شکل دستوراتش هم باهم فرق دارن ؟

PC2st
چهارشنبه 23 اردیبهشت 1388, 21:06 عصر
البته در مورد قابل حمل و نقل بودن #C باید گفت که اگر دات نت در سایر سیستم‌عامل‌ها قابل نصب باشد!!

از دیگر تفاوت‌های بین #C و ++C می‌توان به سرعت اجرای برنامه‌های آن اشاره کرد. ++C زبانی خالص و سبک (به لحاظ توجه به اهمیت حفظ performance در ازای افزودن قابلیت‌ها) است. در ++C یک نوع int چیزی بیشتر از آن نیست. اما در #C یک نوع int در واقع خود کلاسی است که از کلاس ValueType (اگه درست یادم مونده باشه) به ارث رسیده که خود نیز از کلاس Object مشتق شده است. که اینکار باعث ایجاد سرباری ناشی از دوبار ارث بری و اعضای داخلی کلاسها و کاهش سرعت در دسترسی به یک نوع داده‌ی int و افزایش نیاز به حافظه بیشتر می‌شود ولی در عوض آن، امکانات بیشتری به شما تعلق می‌گیرد که ممکن است از آن استفاده کنید.

برنامه‌هایی که به زبان ++C نوشته شده‌اند به کد محلی (native) سیستم عامل کامپایل می‌شوند که به همین دلیل از سرعت نسبی بهتری برخوردارند و با اینجال با حفظ استانداردها، برنامه‌هایی قابل حمل و نقل به حساب می‌آیند. یکبار کد می‌زنید و روی هر سیستم‌عاملی که آن را کامپایل کنید، برنامه به راحتی اجرا می‌شود که به همین دلیل به آنها قابل حمل و نقل می‌گویند. به کمک ابزار GNU Autotools فرآیند اینکار بیش از پیش ساده‌تر می‌گردد بخصوص برای کاربری که می‌خواهد یک برنامه ++C یا C را روی سیستم خود کامپایل و نصب کند.

از دیگر تفاوت‌های این دو زبان، میزان قدرت آن‌ها در استفاده از منابع سخت‌افزاری است که نیاز به توضیح ندارد.

برای ++C نیز کتابخانه‌های زیادی نوشته شده است، که برنامه‌نویس بتواند به راحتی از آنها استفاده کند. کتابخانه‌های C نیز در ++C قابل استفاده هستند. اما به اندازه کتابخانه‌های دات نت، یکپارچه و متنوع نیستند.


شکل دستوراتش هم باهم فرق دارن ؟
شکل دستورات #C شبیه به ++C هست اما کاربرد آنها زمین تا آسمان با یکدیگر فرق می‌کند. #C زبانی ساده‌تر از ++C می‌باشد و قابلیت‌هایی چون interface ها یا property ها بطور صریح در ++C وجود ندارد اما می‌توان به لحاظ مفهومی چنین کارهایی در ++C انجام داد (در واقع interface ها و property ها و event ها و غیره، مفاهیم ساده سازی شده‌ی معادلشان در زبان ++C هستند). و سایر تفاوت‌ها که با جستجو در گوگل یا در سایت خواهید یافت.

استاندارد جدیدی برای ++C در راه است که قابلیت‌های خوبی را به آن خواهد افزود (با توجه و اهمیت در حفظ performance زبان) که هم اکنون اکثر آن قابلیت‌ها در GCC 4.4 موجود است.


خوب پس یعنی #C قدرتمند تر از ++C هستش ؟
در چه زمینه‌ای و در کجا؟ و منظور از قدرت در چیست؟

Sundown
پنج شنبه 24 اردیبهشت 1388, 11:29 صبح
خوب پس یعنی #C قدرتمند تر از ++C هستش ؟
اگر منظورت از قدرت نوشتن برنامه های تحت ویندوز با امکانات بالا و سرعت نوشتن دستورات هست که خوب مسلم هست که #C بهتره. دلیلش هم وجود IDE قوی مثل VS2008 و استفاده از هزاران تابع و کلاس آماده که وقت گیر ترین کارها را به سرعت انجام میدن. اما اگر منظور از قدرت نوشتن برنامه های سیستمی و سرعت اجرای دستورات هست که من فکر میکنم هنوز سی پلاس پلاس جلوتره.



البته در مورد قابل حمل و نقل بودن #C باید گفت که اگر دات نت در سایر سیستم‌عامل‌ها قابل نصب باشد!!
صد در صد همین طور هست. البته با توجه به گستردگی دات نت سایر سیستم عامل ها هم مجبور به ساخت یه دات نت ( یا حداقل شبیه ساز اون ) برای سیستم عامل شدند.مونو برای لینوکس ساخته شده و برای مک هم یکی ساختن ( لینک خبر ) (http://www.itwriting.com/dotnetmac.php)

توی سی پلاس پلاس خروجی کد اجرایی مخصوص به سیستم عاملی هست که برنامه روی اون کامپایل شده اما توی سی شارپ خروجی یک کد شبیه به اسمبلی هست که این کد باید در هنگام اجرا دوباره ترجمه و به زبان ماشین تفسیر بشه. همین باعث شده که برای اجرای برنامه های سی شارپ به یک ماشین مجازی به نام CLR نیاز باشه.ساده بگم برای اجرای برامه های دات نت باید و باید یک فریم ورک 40 یا 50 مگابایتی نصب باشه. تا هر قسمت از کد رو به هنگام اجرا به زبان ماشین تفسیر کنه.همه این کارها به خاطر این هست که خروجی رو بتونی هر جا که دات نت نصب باشه اجرا کنی.

در سی شارپ همون طور که گفتم کد IL در هنگام اجرا باید تفسیر بشه. شاید بعضی ها فکر کنند که این کار باعث کندی اجرای برنامه های دات نت میشه اما در دات نت ( و به طبع سی شارپ ) هر تکه کد در هنگام اجرا فقط یک مرتبه کامپایل میشه و در دفعات بعد از همون کد کامپایل شده ی قبلی استفاده میشه.ولی با این حال هنوز من فکر میکنم سرعت اجرای برنامه های سی پلاس پلاس از سی شلرپ بیشتر هست.

PC2st
پنج شنبه 24 اردیبهشت 1388, 15:44 عصر
صد در صد همین طور هست. البته با توجه به گستردگی دات نت سایر سیستم عامل ها هم مجبور به ساخت یه دات نت ( یا حداقل شبیه ساز اون ) برای سیستم عامل شدند.مونو برای لینوکس ساخته شده و برای مک هم یکی ساختن ( لینک خبر ) (http://www.itwriting.com/dotnetmac.php)
در کل حق با شماست، NET. می‌توانست مولتی‌پلت‌فرم باشد ولی اجرای برنامه‌های دات نت بر روی سایر پلت‌فرم‌ها اصولا از طرف microsoft حمایت نمیشه و تمام این راه‌کارها خودجوش است که البته به همین دلیل نیز به نسبت پلت‌فرم ویندوز همواره عقب‌تر هستند بطوریکه الان دات نت نسخه ۴ در راه است ولی در سایر پلت‌فرم‌ها تا چه نسخه‌ای قابل استفاده است؟! در مونو هنوز دات نت ۳ در دست توسعه است. (http://en.wikipedia.org/wiki/Mono_%28software%29) و آیا مونو به اندازه دات نت در ویندوز، کامل و موثر هست؟ (من خودم تابحال ازش استفاده نکرده‌ا). در مقابل، جاوا از این قابلیت خود استفاده کرده و می‌توان java را مولتی‌پلت‌فرم نامید.

پس به همین دلیل، حداقل در حال حاضر، نمیتوان #C را مولتی‌پلت‌فرم به حساب آورد.

emadfa
جمعه 25 اردیبهشت 1388, 14:34 عصر
سلام دوست عزیز

در برنامه نویسی CLR به وسیله .Net قدرت برابری دارند. به همین دلیل C# توصیه می شه چون هم ساده تره و هم برآمده لز دل .Net هست اما برای برنامه نویسی سیستمی در سطح پیشرفته و کنترل مستقیم سیستم عامل فقط برنامه نویسی native به وسیله c++.

مقایسه بین سی شارپ و سی پلاس پلاس (http://msdn.microsoft.com/en-us/library/yyaad03b(VS.71).aspx)