-
مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
اهداف:
با توجه به این که در کشور ما به سختی می توان افراد را از دنیای سایر زبان ها جدا کرد و به گونه ای حداقل در صد اندکی از آنان را تشویق به روی آوردن به این زبان قدرتمند کرد، تصمیم گرفته شد در این مقاله برای اثبات مطالب ، به منظور فنی کردن آن ، در کنار تجربیاتم از سخنان تیم فنی مایکروسافت نیز استفاده و ترجمه ای از بخش های آن را ارائه کنم ، لذا برای اطمینان از صحت مطالب ، حتما مطالب زبان اصلی را نیز مشاهده کنید.
موضوعات :
سوال 1 - چه نوع شیوه های برنامه نویسی برای ++C/C توسط کامپایلری مثل ++Visual C وجود دارد؟ (Native و Managed)
سوال 2 - پس به طور خلاصه ، طبق تعریف مایکروسافت مزایا و اشکالات آن ها چه می باشد ؟
سوال 3- طبق تعریف مایکروسافت ، کجا باید از ++C/C استفاده کنیم ؟ (مهم)
سوال 4 - آیا راهی وجود دارد که برنامه ای با ++C نوشت که قابل اجرا شدن بر روی سایر سیستم عامل ها به صورت Native باشد؟
سوال 5 - پس برنامه نویسیC++ می تواند Cross-platform باشد ، آیا زبان های مبتنی بر .Net نمی توانند؟
سوال 6 – شیوه Native چه انواعی دارد ؟ کدام مورد پیشنهاد می شود؟
سوال 7 – تفاوت بین VC++ 6 و VC++ .Net در چیست ؟
سوال 8 - در نوع managed کدام پیشنهاد می شود : برنامه نویسی .Net توسط ++C و یا #C ؟
سوال 9 - آیا توسعه Native برای ++C/C ادامه دارد یا باید به سمت .Net کوچ کرد؟
با تشکر
-
سوال 1 - چه نوع شیوه های برنامه نویسی برای ++C/C توسط کامپایلری مثل ++Visual C وجود دارد؟
دو نوع : 1- بومی (Native) و 2- مدیریت شده (Managed)
1) در نوع native که قدرتمند ترین نوع برنامه نویسی می باشد (مدیریت نشده) ، برنامه شما به طور مستقیم توسط پردازنده مرکزی (CPU) اجرا می شود و می تواند بر روی نسخه های مختلف سیستم عامل ویندوز اجرا شود (این مورد شامل ویندوز CE و ویندوز mobile برای تلفن های همراه نیز می شود ).
لذا برنامه های native دسترسی مستقیم به سیستم عامل و سخت افزار دارند و این به شما قدرت و کارآیی (Performance) بسیار بالایی می دهد. اما نکته ای که باید توجه کنید این است که قدرت بالا ، به دقت ، مسئولیت پذیری و تمرین بیشتری نیاز دارد تا موارد به درستی انجام شود.
که البته این شیوه محدود به ++Visual C نیست و می توان از سایر کامپایلر ها که SDK ویندوز را داشته باشند نیز همچون DevC++/minGW استفاده کرد.
تذکر مهم : ضمنا حتی یادگیری این شیوه برای افرادی که با سایر زبان ها ، چه دات نت و چه غیر دات نت مثل #Delphi ، C و... کار می کنند ، شدیدا توصیه می شود و در برخی موارد یک ضرورت می باشد. به عنوان نمونه در اکثر شرکت های برنامه نویسی سراسر دنیا افرادی که از دانش برنامه نویسی Native در کنار زبان های مبتنی بر دات نت بهره می برند ، از اولویت و ارجحیت بالاتری برخوردارند.
2) در نوع managed که یک محیط runtime به نام CLR برای شما فراهم می کند ، شما را از این پیچیدگی کار و قرار دادن تحت سیستم عامل و سخت افزار جدا می کند و برنامه نویسی را بسیار سریع تر و آسان تر می کند. اما در هر حال این جدایی ، انعطاف پذیری (flexibility) و به احتمال غریب به یقین کارآیی (Performance) کمتری دارد ، که البته این موارد بستگی به پروژه مورد نظر دارد که آیا کارآیی ، مورد اهمیت می باشد یا خیر.
ضمنا این مورد نیاز به نصب .Net در سیستم مورد نظر دارد.
به عنوان نمونه در بسیاری از سیستم های پایگاه داده ای که تنها نیاز به یک طراحی ساده می باشد و اکثر کارها توسط دیتابیس ها انجام می شود و همین طور نیاز به کارایی اهمین چندانی ندارد ، برنامه نویسی managed از طریق دات نت توصیه می شود ، به خصوص توسط زبان #C به جای نسخه C++/CLI (دات نت ++C ) پیشنهاد می شود.
(در مورد دلایل این موضوع به سوالات 8 و 9 مراجعه کنید)
**********************************************
سوال 2 - پس به طور خلاصه ، طبق تعریف مایکروسافت مزایا و اشکالات آن ها چه می باشد ؟
Native :
مزیت - کارآیی بالا
مزیت - کمترین میزان نیاز به منابع سخت افزاری مانند حافظه Ram و فضای دیسک و ...
نقص - پیچیدگی بیشتر و دارای زمانبری بیشتر برای کارکردن و نوشتن با آن
نقص - وابسته به پلتفرم ویندوز
تذکر: برای اطاعات بیشتر در مورد نقد ، برای نقص آخر به "سوال 4 " مراجعه کنید.
Managed :
مزیت – قابلیت حمل (قابل استفاده در هر سیستم دارای CLR)
مزیت – سهولت در این نوع برنامه نویسی
نقص – احتمال اجرای کند تر
نقص – امکان نیاز بیشتر به منابع سیستمی ، حافظه و فضای دیسک و ...
تذکر: که البته نمونه بارز مورد آخر ویندوز Vista می باشد و این موضوع که در دنیا امری شناخته شده است ، مورد مخالفت بسیاری از دوستداران دات نت است و این در حالی است که این جملات هر ساله توسط مایکروسافت ارائه می شود !
برای اطاعات بیشتر در مورد ضعف های مهم شیوه Managed توسط ++C به "سوال 5 " مراجعه کنید.
**********************************************
سوال 3 - طبق تعریف مایکروسافت کجا باید از C/C++استفاده کنیم ؟ (بحث بسیار مهم)
++C زبان مورد انتخاب برای ساخت نرم افزارهایی با کارآیی بالا است که به طور "مستقیم" به منابع یا تجهیزات و ابزار های ویندوز دسترسی دارند. پس شما با آن می توانید به قابلیت های سطح پایین سیستم دسترسی داشته باشید و البته به خاطر اینکه این زبان به شما قدرت بسیار بالایی می دهد ، لذا در مقایسه با سایر زبان ها مثل visual Basic یا #C شما بایستی از جزییات بیشتری اطلاع داشته باشید.
و به قول نویسندگان مطرح: "C++ Is Not For Children"
دقت به این نکته بسیار ضروری است که جملات فوق در سال 2008 دوباره همچون سال های قبل توسط مایکروسافت تکرار شده است ، در حالی که با وجود این مطالب ، بارها و بارها از سمت برنامه نویسان محصولات مایکروسافت در کشورمان (و مخصوصا توسط برنامه نویسان دات نت کار حرفه ای و با تجربه) جملاتی غیر علمی همچون :
"زبانی از دور خارج شده" و یا "زبانی قدبم و منسوخ" به زبان آورده می شود.
نکته ای که بسیاری از اساتید بزرگ دانشگاه های کشورمان در هنگام تدریس خود ،به آن توجهی نکرده و حتی آن را با نام "C مرحوم" یاد می کنند !
طبق همین قابلیت ها است که مایکروسافت برای توسعه API های جدید صوت خود برای وبندوز Vista می نویسد:
نقل قول:
Because some aspects of audio streaming depend on low latency and precise synchronization, the implementations of the MMDevice, WASAPI, DeviceTopology, and EndpointVolume APIs do not use the Microsoft .NET Framework or managed-execution environment
بنابراین از جمله کاربرد های بدون شک این زبان برنامه هایی می باشد که نیاز به دقت بالا ، تاخیر زمانی کوتاه (Low-latency) و استفاده مستقیم از سخت افزار دارند ، نرم افزار هایی همچون:
نرم افزارهای گرافیگی و طراحی 2 بعدی و 3 بعدی ، محیط ها و موتورهای توسعه بازی های کامپیوتری ، نرم افزارهای صوتی / تصویری ، پیشرفته سیستمی و غیره ... که چیزی فراتر از طراحی واسط کاربر باشد .
**********************************************
سوال 4 – آیا راهی وجود دارد که برنامه ای با ++C نوشت که قابل اجرا شدن بر روی سایر سیستم عامل ها به صورت Native باشد؟
بله ، قابلیتی که بسیاری از برنامه نویسان دات نت در کشورمان از آن بی اطلاع هستند و همان طور که توضیح داده شد ، زبان ++C/C را بدون اطلاع با عناوینی نامناسب و یا "خیلی سخت" خطاب می کنند در حالی که نرم افزارهای تجاری متوسط و بزرگ در سراسر دنیا همچنان با این زبان نوشته می شوند.
این مورد در سال های اخیر با محبوبیت یافتن ابزارهایی مثل Qt ، Wxwidgets و سایر ابزار های برنامه نویسی ++C به طور کاملا تغییر کرده و از سختی و پیچیدگی آن کاسته شده است و به این شکل که این ابزار ، حال به صورت open source و یا تجاری ، این امکان را در قالب یک Framework و چیزی شبیه .Net به شما می دهد تا برنامه های شئی گرایی به صورت native بنویسید که تنها با نوشتن یک کد واحد، برنامه شما توسط سایر کامپایلرها ، قابل کامپایل و اجرا شدن برای سیستم عامل های دیگر همچون Linux و یا Mac OS نیز باشند و به این امکان Cross-platform می گویند.
این ابزار نه تنها توسعه را مانند نمونه های دات نت بسیار ساده تر و سریع تر می کنند ، بلکه دارای Performance بالا نیز هستند ، و این به دلیل آن است که در پیاده سازی آن ها از کدها و API های Native هر سیستم عامل استفاده شده است (یعنی win32 در ویندوز ، Xlib در لینوکس ، Carbon در Mac OS و ...) و شما با داشتن سورس کدهای آن ها می توانید نهایت کنترل را روی پروژه خود داشته باشید.
از نمونه های چشمگیر این موارد ، نرم افزار های پیشرفته 3 بعدی :
Google earth ، Mudbox3D ، RealFlow و ...
*********
و به همین خاطر است که Autodesk در بخش FAQ سال قبل خود می نویسد:
آیا Mudbox3D در آینده سایر سیستم عامل ها را پشتیبانی خواهد کرد؟
و در جواب) بله ، از آنجایی که از ابتدا به صورت Cross-platform طراحی شده است ، این امکان در آینده وجود خواهد داشت
(و البته که این قابلیت چقدر مورد توجه شرکت های غیر ویندوزی خواهد بود.)
تذکر مهم: البته اکثر شرکت هایی متوسط و بزرگ که برنامه نویسان حرفه ای در اختیار دارند ، با وجود حضور چنین ابزارهایی ، ترجیح می دهند که خودشان framework مخصوص خود و در نتیجه نرم افزارشان را با همین کدهای Native هر سیستم عامل به طور جداگانه ، به صورت Cross-platform طراحی کنند .
بله ؛ امکانی که به ظاهر توسط دات نت امکان پذیر است ولی در عمل تا کنون به صورت رسمی تحقق نیافته است.
**********************************************
سوال 5 - پس برنامه نویسی ++C می تواند Cross-platform باشد ، آیا زبان های مبتنی بر .Net نمی توانند؟
همان طور که گفته شد یکی از مزایای .Net قابلیت حمل و قابل اجرا بودن در سایر سیستم عامل ها می باشد ، اما تا کنون در واقعیت این کار رخ نداده است و صادقانه این مورد ، ابزاری است به عنوان یک سیاست مایکروسافتی تا مانند سال های قبل توسط دادگاه های بین المللی مورد اتهام "انحصار طلبی" قرار نگیرد ، چرا که طبق این سیاست به ظاهر انسان دوستانه ، هر شرکت و سیستم عاملی که بخواهد می تواند با پرداخت هزینه و گرفتن لیسانس آن ، دات نت را به طور رسمی در سیستم خود داشته باشد و یا به قولی سیستم عاملش مبتنی بر CLR شود.
اما کدام شرکت قادر به پرداخت هزینه سنگین و چندین میلیارد دلاری آن می باشد ؟
و متاسفانه تا کنون تنها سیستم های مایکروسافتی از آن بهره برده اند:
مانند windows mobile/CE و Xbox360
به همین منظور شرکت هایی همچون Novell با راه اندازی پروژه های open source و البته بدون مجوز از مایکروسافت مانند Mono ، اقدام به پیاده سازی و به قولی شبیه سازی دات نت کنند تا بتوان طبق استاندار های زبان #C ، آن برنامه ها را در سیستم عامل های دیگر نیز کامپایل و اجرا کرد.
از اشکالات بزرگ این پروژه : همواره چند سال از پیاده سازی آخرین نسخه دات نت عقب می باشد و همه قابلیت ها در آن نیز قابل پیاده سازی نیست. ضمنا هیچ تضمینی در حمایت از برنامه شما به صورت تجاری وجود ندارد ، مگر اخیرا با پرداخت 13000 دلار برای پروژه های تجاری ، برای سازمان ها و یا شرکت ها ، پشتیبانی انجام خواهد گرفت و آن هم نسخه های پیاده سازی شده چند سال قبل دات نت !
خوب اگر شما برنامه نویس به روزی نیستید ، پروژه هایی مانند mono گزینه آسان و شاید خوبی برای شما باشد !
**********************************************
سوال 6 – شیوه Native چه انواعی دارد ؟ کدام مورد پیشنهاد می شود؟
MFC و win32 ، که هر دو مختص پلتفرم ویندوز هستند.
در Win32 که قلب ویندوز شناخته می شود و شیوه برنامه نویسی سطح پایین می باشد (پشتیبانی از 16 بیت تا 64 بیت) ، سرعت توسعه نسبت به سایر زبان ها مانند VB و #C کاهش خواهد شد و زمان و انرژی بیشتری صرف خواهد شد، اما در عوض همه چیز در اختیار شما قرار دارد ، از کنترل دقیق حافظه تا کنترل تمامی منابع سیستم و البته با نهایت کارآیی.
اکثر نرم افزار های تجاری شرکت های بزرگ و متوسط سراسر دنیا که در منازل از آن ها استفاده می کنید (و نیازی به نام بردن آن ها نیست )و تقریبا هسته اصلی تمامی بازی ها در نسخه ویندوز آن ها از این API ها به طور مستقیم استفاده می کنند.
ضمنا افرادی که می خواهند Software Development Kit یا همان SDK برای نرم افزار خود ارائه کنند تا افراد بتوانند به وسیله آن افزونه ها و plug-in هایی برای توسعه همان نرم افزار بنویسند، بیشتر از این شیوه استفاده می کنند.
***********
MFC یا همان Microsoft Foundation Class ، یکframework می باشد که API های win32 را در قالب کلاس هایی برای برنامه نویسان C++ ارائه می کند ، تا زمان توسعه را کاهش دهد ، کار با پایگاه داده را آسان تر می کند و با وجودی که تقریبا تمامی قابلیت های سایر زبان ها را در اختیار شما قرار می دهد ، و جدا از اینکه کارآیی در مقایسه با شیوه قبل کمی کاهش می یابد ، تمامی ناحیه های win32 را نیز در بر نخواهد گرفت و لذا نیاز به آشنایی با خود API های ویندوز نیز می باشد .
ضمنا MFC در کشورمان کاربران بیشتری دارد !
نکته: این شیوه برای افرادی که قصد دارند تا خودشان framework جدیدی با قابلیت Cross-platform بسازند ، گزینه مناسبی نیست و به همین منظور، انتخاب درست در این زمینه ، win32 در ویندوز و سپس ترکیب آن با API های native سایر سیستم عامل ها (مثل carbon و Xlib و GTK+ و ...) می باشد تا ایجاد این framework با تلاش هر چند طاقت فرسا ، امکان پذیر شود. کاری که تا کنون توسط تمامی toolkit های Cross-platform و بسیاری از شرکت ها انجام شده است.
این شیوه در سال های اخیر کاربرانش کمتر شده است و در مقابل سایر رقبای شئی گرای خود همچون Qt به آن عنوان برنامه نویسی آشفته یا کثیف (mess) را داده اند.
از جمله محصولات شرکت Nero و همین طور ابزار های همراه آن که در سال های اخیر عرضه شده اند ، همچون کپی CD/DVD ، پخش فیلم ، ویرایش موسیقی و غیره ... از MFC استفاده می کنند.
ذکر یک نکته : ضمنا در کامپایلر های دیگری همچون C++Builder شیوه دیگر برنامه نویسی از طریق ++C وجود دارد که توسط VCL انجام می شود ، کاربرانی که با Delphi آشنایی دارند ، حتما با این component ها نیز آشنا هستند.
این شیوه برنامه نویسی که مبتنی بر component ها است، با ایجاد فرم ها و ساده کردن برنامه نویسی ، توسعه را بسیار سرعت می بخشد و امکانات مختلف مانند تحت وب نیز ارائه می کند و حتی کاربران در برخی از موارد به سرعت کامپایل سریع ترC++Builder نسبت به ++Visual C نیز اشاده کرده اند و اما به نسبت دو شیوه Native فوق منابع کمتر ، ضعف های بیشتر و همین طور کاربران کمتری نسبت به ++Visual C در سراسر دنیا دارد (بنابر آمار های ارائه شده یک سوم برابر) ، اما در هر حال همچون زبان Delphi در کشورمان محبوبیت بسیار بالایی دارد !
اگر در حال حاضر با توجه به شرایط جدید در دنیای برنامه نویسی از من نظر بپرسید ، به شما پیشنهاد می کنم که اگر هدفتان سرعت در توسعه و قدرت است ، به جای VCL بهتر است به دنبال C# بروید.
برای آشنایی با این شیوه بهترین مکان سایت زیر می باشد:
http://www.functionx.com/bcb/index.htm
**********************************************
سوال 7 – تفاوت بین VC++ 6 و VC++ .Net در چیست ؟
پس از ارائه دات نت در سال 2001 نسخه های بعدی ++visual C با نام .Net همراه شدند ، که این فقط یک نام برای این کامپایلر می باشد و از آن سری به بعد شما می توانید به هر دو شیوه native و managed برنامه بنویسید.
**********************************************
سوال 8 - در نوع managed کدام پیشنهاد می شود : برنامه نویسی .Net توسط ++C و یا #C ؟
سوال 9 - آیا توسعه Native برای ++C/C ادامه دارد یا باید به سمت .Net کوچ کرد؟
در برنامه نویسی C++/CLI که به برنامه نویسی دات نت و Managed معروف است ، با توجه به اینکه این زبان ذاتا قادر به بر طرف کردن همه نیاز های دات نت نیست ، با اضافه کردن امکاناتی غیر استاندارد به زبان ++C و به نوعی دگرگون کردن آن ، این امکان فراهم شده است تا بتوان از .Net توسط این زبان استفاده کرد ولی باعث سخت تر شده کار نسبت به سایر زبان ها مانند #C در حوزه دات نت شده است.
لذا طبق گفته های مکرر تیم طراحی ++Visual C ، طبق سیاست جدید مایکروسافت ، تصمیم بر آن گرفته شده که برای راضی نگه داشتن مشتریان ، توسعه بخش Native توسط ++C/C ، به سرعت و همراه با پیشرفت تکنولوژی انجام شود (و با ارائه بیش از 7000 API جدید برای ویندوز vista تمامی شک های احتمالی بر طرف شد و امید پشتیبانی بخش native برای سال های آینده به واقعیت قطعی تبدیل شد و دیگر اجباری در کوچ کردن به دات نت نمی باشد)، که این کار باعث ایجاد تاخیر در توسعه بخش دات نت برای C++/CLI می شود و بیان شده است که:
کاربران انتظار نداشته باشند کاری که قبلا توسط سایر زبان ها انجام پذیرفته است (VB و #C) ، حتما و فورا برای C++/CLI نیز انجام شود .
لذا بیان شده است که طبق این سیاست ، علت اصلی این توسعه بخش دات نت ، فراهم کردن امکان ترکیب کدهای Native با کد های managed توسط CLI می باشد تا به شما امکان و قدرت استفاده از هر دو حوزه داده شود.
http://blogs.msdn.com/somasegar/arch...28/681224.aspx
برخی از نمونه های این ضعف ها در پایین آورده شده است:
1) عدم امکان برنامه نویسی C++/CLI توسط دات نت برای windows mobile/CE می باشد که برای دات نت VB و #C و برای غیر دات نت نیز شیوه قدرتمند Native توسط C/C++ پشتیبانی می شود.
2) تاخیر در ارائه برخی تکنولوژی ها برای آن نسبت به دو زبان VB و #C، از آن جمله عدم پشتیبانی "مستقیم" XAML برای کار با WPF توسط نسخه دات نت ++C در حال حاضر و در عوض حمایت در نسخهNative آن و همین طور تاخیر در تکمیل اسناد و مثال های MSDN برای
C++/CLI .
3) عدم حمایت از LinQ برای C++
4) عدم حمایت از WPF designer برای ++C
و بسیاری موارد دیگر
لذا بهترین انتخاب به پیشنهاد مایکروسافت برای افرادی که می خواهند برنامه های جدید مبتنی بر دات نت بنویسند ، استفاده ازC# ویا VB به جای C++/CLI می باشد.
نکته ای در مورد کاربرد C++/CLI : همین طور برای کاربران C++/CLI، از آنجایی که برنامه های Native می توانند با برنامه نویسی دات نت از طریق CLI ترکیب شوند ، طبق توصیه آنان این افراد بیشترین مزیت را خواهند برد تا در صورتی که امکانی به صورت Native ارائه نشد (از آن جمله نیز WPF یا همان Windows Presentation Foundation) ، بتوانند کد های native خود را با کدهای managed ترکیب کنند و نهایت سود را ببرند .
دوستان با مطالعه صفحات زیر می توانند در این زمینه اطلاعات کسب کنند:
-
1 ضمیمه
مراجع:
http://blogs.msdn.com/vcblog بلاگ تخصصی توسعه دهندگان ویژوال C++
http://msdn2.microsoft.com/en-us/beginner/bb964629.aspx
http://blogs.msdn.com/somasegar/arch...28/681224.aspx
http://blogs.msdn.com/texblog/archiv...21/495404.aspx
http://www.codeplex.com/linqextensions
و همین طور بسیاری از مقالات مختلف و کتاب های منتشر شده توسط سازندگان همین تکنولوژی ها و مشاوره قبلی با برخی از برنامه نویسان فعال در این زمینه در خارج از کشور.
دوستانی که دسترسی به اینترنت پر سرعت دارند ،می توانند به لینک زیر در سایت مایکروسافت مراجعه کنند و فیلم اصلی برخی از مطالب به همراه رونوشت های سخنان این فیلم را دریافت کنند:
http://msdn2.microsoft.com/en-us/beginner/bb964629.aspx
برای آن دسته از دوستانی که قادر به دریافت آن نیستند بخش اولیه آن مطالب اینجا آورده شده است (بخش های مهم به صورت bold شده نشان داده شده است) :
نقل قول:
A unique thing about the Visual C++ Express tool is that it can be used to create 2 different types of Windows applications: “managed” .NET Framework applications as well as “native” applications written specifically for the Windows operating system.
Let’s clarify these terms “managed” and “native” code:
-> Native Windows applications can run on 32 or 64-bit computers that are running a version of the Windows Operating system. These types of programs are executed directly by the computer’s CPU (or Central Processing Unit) and so must be written expressly for a specific platform. So when we say “native” code we mean applications that run natively on a particular platform, in this case the Windows operating system. Native programs provide direct access to the operating system and hardware. This gives you a lot of power and performance, but as my Mom always used to say, with power comes responsibility. So when you write native code, you’ll have to be more careful because it’s easy to mess things up - just make sure to follow good programming practices. And like building a house from scratch, you’ll also have to do a lot of the plumbing and framing yourself.
On the other hand, “managed” code provides a runtime environment called the Common Language Runtime or CLR that shields you from this complexity – it provides a pre-built foundation for you, but by abstracting from the underlying hardware and operating system it has less flexibility and – potentially – slower performance. Managed programs such as Windows Forms applications require that the .NET framework be installed on the target system.
Here are some of the benefits and drawbacks of each type of program. Keep in mind that these are generalizations and are not true in every scenario:
Native:
+ Fast performance
+ Smallest footprint
− More complex to write
− Dependent on specific platform
Managed:
+ Portable – runs on any platform with a CLR
+ Easier to write
− Can run slower
− May require more system resources
This means that C++ is the language of choice if you want to build high-performance applications or programs that directly access Windows devices or resources.
Visual C++ allows for a lot of flexibility and freedom when writing programs, so you can tailor your code for a specific hardware platform, and you can reference low-level features of the system.
Because the language gives you so much power, there are more details you should be aware of, as compared to other languages like C# or Visual Basic
و یک screen shot از فیلم:
-
من #C کار میکنم ولی می خوام برنامه نویسی Native رو با ++C یاد بگیرم.
چطور و از کجا شروع کنم؟
منبع؟؟
-
نقل قول:
نوشته شده توسط
razavi_university
من #C کار میکنم ولی می خوام برنامه نویسی Native رو با ++C یاد بگیرم.
چطور و از کجا شروع کنم؟
منبع؟؟
اول باید مشخص شود که هدف شما از این برنامه نویسی Native چی هست و سپس تصمیم بگیرید کدام شیوه را انتخاب کنید. فقط در ویندوز یا همه سیستم عامل ها ....
اگر win32 را یاد بگیرید در آینده برای #C هم به کمک شما خواهد آمد.
و یا مثلا اگر قصد استفاده از پایگاه داده را دارید و یا برنامه نویسی برای همه پلتفرم ها ، تولکیت های Cross-platform ذکر شده بهترین انتخاب هستند .(البته امیدوارم فقط قصد کار با پایگاه داده را نداشته باشید)
کتاب ها در این تاپیک بیان شده است:
https://barnamenevis.org/showthread.php?t=86565
بهترین مراجع اینترنتی برای شروع:
(بخش win32 و MFC سایت های زیر)
http://www.functionx.com/
http://winprog.org/tutorial
-
لینک زیر شامل لیستی از نرم افزارهای ساخته شده توسط ++C می باشد که توسط Bjarne Stroustrup ارئه شده است و آخرین ویرایش آن نیز (درحال کنونی) مارس 2008 می باشد، البته این لیست شامل نرم افزار های تحت C نمی باشد:
http://www.research.att.com/~bs/applications.html
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
کاربرانی که می خواهند برنامه native با MFC بنویسند و در کنار آن بتوانند از قابلیت های .NET و Windows Form استفاده کنند بدون اینکه کل پروژه به managed تغییر پیدا کنند، می توانند از مطالب این تاپیک استفاده کنند:
ترکیب برنامه نویسی Native با NET. بدون تغییر کل پروژه به CLR
دقت کنید که کل پروژه شما و فایل اجرایی شما بدون تغییر به همان صورت Native باقی می ماند و توسط ILdisassembler قابل خواندن نمی باشد و فقط قسمت ها و پنجره هایی که خود را به Form های .NET متصل می کنند به CLR تبدیل و کامپایل می شوند.
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
امروز داشتم مقالات رسمی بلاگ ها تیم فنی مایکروسافت را برای پیشرفت های ++C در VS2010 مطالعه می کردم که به توضیحات زیر در برابر نظرات کاربران برخورد کردم که دقیقا در ادامه تاکیدهای حرف های قبلی مایکروسافت در ادامه مطالب این تاپیک می باشد.
(دقت داشته باشید که بسیاری از امکانات ویرایش جدید استاندارد ++C با نام مستعار C++0x و کتابخانه های جدید برای windows 7 در VC++2010 ارائه خواهد شد.)
نویسنده مقاله: Soma, Vice President for the Microsoft Developer Division
پاسخ دهنده نظرات: Tarek Madkour - VC++ Team
1- چرا مایکروسافت هنوز MFC را توسعه می دهد؟
نقل قول:
> MFC, why is that hack still being developed
Because a large number of world-famous applications are using it and updating it means that those millions of dollars of investments in those applications can continue to pay off. Our customers have been loud enough in asking for updates there. We are certainly looking at where we should head long-term in terms of a UI and application framework. The answer may not be MFC in the long-term. But until a clear new framework is identified along with a clear transition path, we will continue to evolve MFC for the foreseeable future.
2- آیا ما در ++C بالاخره عضویت کامل در بخش NET. پیدا می کنیم یا خیر ؟
نقل قول:
> Do we get full membership in .NET or not?
No, we don't. We are focusing our C++ investments on what the majority of C++ developers have been telling us for years: native code. In addition, we invest in native/managed interop through C++/CLI to enable developers to expose native C++ assets to the managed world and vice versa. We believe that pure .NET development is done best using a .NET focused language such as C# or VB. C++ will remain as the best way to write native code and a good way for interop between both worlds.
لینک مقاله
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نقل قول:
) تاخیر در ارائه برخی تکنولوژی ها برای آن نسبت به دو زبان VB و #C، از آن جمله عدم پشتیبانی "مستقیم" XAML برای کار با WPF توسط نسخه دات نت ++C در حال حاضر و در عوض حمایت در نسخهNative آن
آیا منظور شما از جمله "در عوض حمایت در نسخهNative آن" اینه که XAML در نسخه Native آن حمایت میشه؟
اگر جواب مثبته لطفا بیشتر توضیح بدید.
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نقل قول:
نوشته شده توسط
C++Lover
آیا منظور شما از جمله "در عوض حمایت در نسخهNative آن" اینه که XAML در نسخه Native آن حمایت میشه؟
اگر جواب مثبته لطفا بیشتر توضیح بدید.
یعنی برای این کار می توان از قابلیت Interoperation و سوئیچ clr/ برای ارتباط با WPF/XAML استفاده کرد که توسط سایر زبان ها مانند #C یا VC.NET نوشته شده باشد و حاوی صفحات XAML باشد.(چون XAML را داخل ++C نمی توان کامپایل کرد) کلا API های WPF از نوع managed هستند.
مثلا در مثال زیر یک ساعت XAML با کمک #C ساخته و به یک dll تبدیل می شود، سپس می توان آن را به داخل دیالوگ برنامه ++native C خود با clr/ اضافه کرد. (اگر از MFC استفاده می کنید می توانید با استفاده از مطالب پست 7 همین تاپیک، به جای کل پروژه فقط بخشی از پروژه را به کمک clr کامپایل کنید):
Create a Win32 Application Hosting WPF Content
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
سلام . با تشکر از مطالب بسیار مفید نیما جان .
میخواستم ببینم نیما جان یا سایر اعضاء راجع به مطالب و سوالات و جوابات بسیار مفید این بخش آیا کتاب یا جزوه یا فایل پی دی افی یا مرجع فارسی زبان خوبی سراغ ندارید که همین مطالب رو مفصل تر و جامع تر مورد بررسی قرار بده تا بتونیم یک زبان خوب رو از اول انتخاب کنیم ( هرچند همه زبانها خوب هستند)
لطفا راهنمایی کنید
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نقل قول:
نوشته شده توسط
iranian_genius
سلام . با تشکر از مطالب بسیار مفید نیما جان .
میخواستم ببینم نیما جان یا سایر اعضاء راجع به مطالب و سوالات و جوابات بسیار مفید این بخش آیا کتاب یا جزوه یا فایل پی دی افی یا مرجع فارسی زبان خوبی سراغ ندارید که همین مطالب رو مفصل تر و جامع تر مورد بررسی قرار بده تا بتونیم یک زبان خوب رو از اول انتخاب کنیم ( هرچند همه زبانها خوب هستند)
لطفا راهنمایی کنید
به طور کامل خیر. این چنین موارد از خواندن ده ها کتاب و صدها مقاله بدست خواهد آمد. مخصوصا که مرجع فارسی بسیار کم هست.
با این حال انواع مختلف کتاب تحت عنوان "طراحی زبان ها" برای این کار وجود دارد که متاسفانه در آن ها فقط به مقایسه و بررسی زبان ها می پردازند اما هرگز به جزییات، تکنولوژی ها، کتابخانه ها و شیوه های مختلف برنامه نویسی با یک زبان نمی پردازند. پس شما ابتدا هدف از برنامه نویسی خود را مشخص کنید، سپس بر روی انتخاب زبان مناسب برای هدف خود تحقیق کنید و در انتها از میان روش های قابل انجام توسط ان زبان یکی را انتخاب کنید.
ضمنا برای اینکه بتوانم مطالب مختلف را در آینده در ادامه همین تاپیک بیان کنم و نظم مطالب تاپیک حفظ شود، لطفا در صورت نیاز به توضیحات بیشتر، سوال های دیگر خود را در یک تاپیک مجزا مطرح کنید.
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
سلام.یعنی شما می گویید نمی شود در زبانهایی مثل #C به صورت native کار کرد.به عنوان مثال یک dll با #C می نویسیم و از تمامی کتابخانه های عمومی که MONO حمایت می کند فقط استفاده می کنیم.سپس آن را به C++ پورت می کنیم.آیا این خود نوعی کد native نیست؟
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نقل قول:
نوشته شده توسط
arashmidos2020
سلام.یعنی شما می گویید نمی شود در زبانهایی مثل #C به صورت native کار کرد.به عنوان مثال یک dll با #C می نویسیم و از تمامی کتابخانه های عمومی که MONO حمایت می کند فقط استفاده می کنیم.سپس آن را به C++ پورت می کنیم.آیا این خود نوعی کد native نیست؟
استاندارد زبان #C با سایر زبان های native متفاوت هست، پروژه های این زبان بر مبنای CLR یا همان Common Language Runtime هست که کدها در نهایت به وسیله یک کامپایلر در هنگام اجرا (Just-in-time compiler) به کد native کامپایل می شوند. ماهیت تکنولوژی این سری از زبان ها همین تبدیل در هنگام اجرا هست.
دقت کنید که با وجودی که از کتابخانه های Mono استفاده می کنید (حتی اگر اکثر آن کتابخانه ها native باشند)، باز هم زبان #C در mono بر اساس استاندارد آن پیاده سازی شده است و بسیاری از تبدیلات پایه ای و اصلی خود را (از جمله کنترل حافظه ، garbage collecting و سایر موارد مشابه) در هنگام اجرا انجام می دهد.
پس صرفا منظور از native بودن این هست که همه چیز از کنترل حافظه تا رسم اشکال از قبل کامپایل شده و برای اجرا آماده و به کدماشین تبدیل شده باشد.
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نقل قول:
نقل قول:
نوشته شده توسط
arashmidos2020 https://barnamenevis.org/images...s/viewpost.gif
سلام.یعنی شما می گویید نمی شود در زبانهایی مثل C# به صورت native کار کرد.به عنوان مثال یک dll با C# می نویسیم و از تمامی کتابخانه های عمومی که MONO حمایت می کند فقط استفاده می کنیم.سپس آن را به C++ پورت می کنیم.آیا این خود نوعی کد native نیست؟
استاندارد زبان C# با سایر زبان های native متفاوت هست، پروژه های این زبان بر مبنای CLR یا همان Common Language Runtime هست که کدها در نهایت به وسیله یک کامپایلر در هنگام اجرا (Just-in-time compiler) به کد native کامپایل می شوند. ماهیت تکنولوژی این سری از زبان ها همین تبدیل در هنگام اجرا هست.
دقت کنید که با وجودی که از کتابخانه های Mono استفاده می کنید (حتی اگر اکثر آن کتابخانه ها native باشند)، باز هم زبان C# در mono بر اساس استاندارد آن پیاده سازی شده است و بسیاری از تبدیلات پایه ای و اصلی خود را (از جمله کنترل حافظه ، garbage collecting و سایر موارد مشابه) در هنگام اجرا انجام می دهد.
پس صرفا منظور از native بودن این هست که همه چیز از کنترل حافظه تا رسم اشکال از قبل کامپایل شده و برای اجرا آماده و به کدماشین تبدیل شده باشد.
ســلام .
آیا اگه همچین برنامه ای با سی++ و native نوشت که در اون از dll های که توسط ویژوال بیسیک و یا C# استفاده شده باشه!
آیا هنگام اجرا باید بازهم dotnt framework برای این برنامه native نصب بشه؟؟
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نقل قول:
نوشته شده توسط
saeed_rezaei
ســلام .
آیا اگه همچین برنامه ای با سی++ و native نوشت که در اون از dll های که توسط ویژوال بیسیک و یا C# استفاده شده باشه!
آیا هنگام اجرا باید بازهم dotnt framework برای این برنامه native نصب بشه؟؟
اگر بخواهید از dll های C# استفاده کنید، در برنامه ++C باید سوییچ clr را فعال کنید تا قابلیت خواندن از کتابخانه ها مبتنی بر clr به برنامه شما افزوده شود، پس بلکه، آنگاه برنامه ++C شما هم نیازمند .Net Framework هست.
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نیما جان من دوست دارم برنامه های سیستم ی بنویسم و مستقیم با منابع کار کنم تا بتونم به برنامه هام سرعت و قدرت بدم خلاف چیزی که سی شارپ برای برنامه نویسان خودش قرار می ده من یک برنامه نویس سی شارپ هستم حالا می خواستم بدونم من می خوام هم سیستمی برنامه بنویسم چی بهم پیشنهاد می دی در واقع از کجا شروع کنم می تونم برنامه را بخش بخش کنم بعد هسته برنامه یا همون کرنل با C++ باشه بعد DLL کنم و در C# بیارم و با WPF فرم یا در واقع شل اونا طراحی کنم ایا اینطوری که کرنل با C باشه به صورت د ال ال همون قدرت بالا را دارم؟این روش نهایت قدرت و طراحی را ترکیب می کنه برا همین می گم.
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
راستی نیما جان یه سوال ببخشید اگه میشه در چند جمله کوتاه کلا نوع Managed, Native,CLR,Win32,MFC,ATL را توضیح و ارتباطشون را بگو مثلا Win32 ایا Native هست و ... و ویژگی هاشونا ممکنه کوتاه تو مقاله مفصل گفتی اما می خوام کوتاه و خلاصه بدونم یه چیزای را قاطی کردم نمی دونم درست فکر می کنم یا نه اگه ممکن باشه و این لطف بزرگ را بکنی بسیار ممنون میشم راستی این ATL چیه ؟!
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
اقا شرمنده من پشت سر هم سوال می کنم من این QT را نصب کردم Designer خیلی خوفی داره منابع آموزشی میشه معرفی کنید ترجیحا فیلم باشه بعدش کامپایل و کد نویسی توش به چه شکلیه !!!
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نقل قول:
نوشته شده توسط
Unknownlive
کرنل با C++ باشه بعد DLL کنم و در C# بیارم و با WPF فرم یا در واقع شل اونا طراحی کنم ایا اینطوری که کرنل با C باشه به صورت د ال ال همون قدرت بالا را دارم؟این روش نهایت قدرت و طراحی را ترکیب می کنه برا همین می گم.
اگر خیلی کدهای شما در همه پیچیده شود و همه قسمت ها با هم ترکیب شوند، آن وقت این احتمال وجود دارد که برنامه شما از حالت معمول نیز کند تر شود.
اما اگر برنامه را درست طراحی کنید و فقط بخش هایی با .Net باشد، مثلا پنجره ای از C# فراخوانی کنید که کارخاصی انجام دهد، در این صورت خود بخش Native شما کارآیی خود را کامل حفظ می کند.
نقل قول:
راستی این ATL چیه ؟!
در این لینک توضیح داده شده است (کلیک کنید)
win32 ، MFC و Qt ار نوع native هستند.
در مورد سایر کلمات هم که همین تاپیک برای همین کار هست دیگه، توضیح در توضیح!
باز در فروم جستجو کنید 100 ها مرتبه هر کدام جداگانه توضیح داده شده است.
نقل قول:
من این QT را نصب کردم Designer خیلی خوفی داره منابع آموزشی میشه معرفی کنید ترجیحا فیلم باشه بعدش کامپایل و کد نویسی توش به چه شکلیه !!!
باید document های همراه Qt را مطالعه کنید.
ضمنا کتاب رسمی خود Qt هم هست.
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
ممنون میشم اگر مزیت های و معایب C++ managed را نسبت به C# و VB.Net بیان کنید.(مخصوصا در مورد کارایی برنامه)
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
والله ما که هیچی از Native یا managed نفهمیدیم.:متفکر::لبخند::کف::خ جالت:
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نقل قول:
نوشته شده توسط
محسن=0
والله ما که هیچی از Native یا managed نفهمیدیم.:متفکر::لبخند::کف::خ جالت:
تفاوت میان کد های مدیریت شده (Managed Code) و کدهای مدیریت نشده (Unmanaged Code)
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
سلام به داداشای گلم خسته نباشید من دارم با ویزوال ستودیو 2013 C++ برنامه نویسی یا میگیرم الان به برنامه نویسی من چی میگن؟ چه شاخه ای هستش؟ Native یا managed ؟ اینا چین؟؟
ممنون میشم جواب بدید
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نقل قول:
نوشته شده توسط
R4MS4M.R4M2
سلام به داداشای گلم خسته نباشید من دارم با ویزوال ستودیو 2013 C++ برنامه نویسی یا میگیرم الان به برنامه نویسی من چی میگن؟ چه شاخه ای هستش؟ Native یا managed ؟ اینا چین؟؟
ممنون میشم جواب بدید
سلام ؛
اگه تازه شروع کردین اونم با VS پیشنهاد میکنم اصلا سراغ Managed نرید که کلا مایکروسافت با این CLI برنامه نویسی C++ رو به گند کشیده.
در حالت Managed شما نمیتونید به صورت Native کد نویسی کنید و هر خروجی هم بگیرید روی پلتفرم ویندوز اجرا خواهد شد.
در حالت Native شما هر دستوری رو هر جوری که دوست دارین میتونید بنویسید بدون وابستگی به دات نت یا غیره... برای مثال هر نوع شبیه سازی و هر نوع پروسه های سنگینی رو لازم باشه بنویسید در این حالت بدون وابستگی و دخالت سیستم عامل خواهید توانست انجامش بدین.
در نهایت اینطوری خلاصه کنم که اگر میخواهید با C++ برنامه نویسی کنید به فکر گزینه Native باشید هرچند سخته ولی ارزشش رو داره و شیرین بودن زبان C++ به همین روش Native هست.
در صورتی که با روش Managed کار میکنید گزینه مورد نظر زبان C# هست نه C++ چون این یک سیاستی از طرف مایکروسافته که برداشته C++ رو با فریم ورک دات نت هماهنگ کرده و کد نویسی در این حالت اصلا فرقی با C# یا دیگر زبان های تحت دات نت نخواهد داشت.
اینو از ته دل گفتم که به روز من نیفتی برادر من یه زمانی با دات نت به به چه چه میکردم میگفتم C++ کد مینویسم بعدا دیدم چه کلاهی سرم رفته.
موفق باشید.
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
من بلاخره نفهمیدم برنامه نویسی win32 با C++ به صورت پایه ای از کدوم منبع باید یاد بگیرم؟ اصلا منبع گیر نیاوردم. جان هرکس که دوست دارید به من یم منبع پایه win32 معرفی کنید.
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
نقل قول:
نوشته شده توسط
saeed550
من بلاخره نفهمیدم برنامه نویسی win32 با C++ به صورت پایه ای از کدوم منبع باید یاد بگیرم؟ اصلا منبع گیر نیاوردم. جان هرکس که دوست دارید به من یم منبع پایه win32 معرفی کنید.
این یکی سوالم رو هم لطفا جواب بدین : ایا با روش برنامه نویسی win32 به وسیله توابع ای پی ای میتوان برنامه های تحت وب هم نوشت؟ من منظورم برنامه های سبک و کم حجم تحت وب هستند.
-
نقل قول: مقاله: برنامه نویسی ++C/C از نوع Native یا managed ؟
معذرت از مدیران محترم چون اشتباه فرستادم در اینجا ارسال کردم
مدیران عزیز این پست رو پاک کنند ممنون سوالمو اینجا پرسیدم :
https://barnamenevis.org/showthread....88-win32/page3