PDA

View Full Version : گفتگو: یادی از Visual C -بعد از این همه سال چه اتفاقی براش افتاد؟



cardano7
پنج شنبه 16 اردیبهشت 1389, 01:53 صبح
سلام
از بچگی عشق C داشتم. اون زمان VC یاد گرفتن واسه من یک رویا بود. واسه همین بود که وقتی Pascal و ++C رو یاد گرفتم زمانی که دوم دبیرستان بودم رفتم سراغ Visual C چون همه ازش تعریف می کردند. اولین زبان Visual ی بود که میدیدم. ما کاربران ++C سر کلاس(البته کلاس آکادمی نه class ها!) VC وقتی Editor و محیط Designer اون رو دیدیم مثل آدم های 1000 سال پیش بودیم که به هزاره ی جدید اومده باشند و ماشین و هواپیما ببینند. اولش جالب بود اما یک باره تو ذوقم خورد. اصلا اون چیزی نبود که ازش بخواد خوشم بیاد. یک زبان بددست بود که نمیگذاشت آب خوش از گلومون پایین بره. اگه رو VC تعصب دارید از دست من ناراحت نشید چون باید بگم که اولا اون زمان سنم کم بود و شاید الان اگه قضاوت می کردم نتیجه فرق می کرد. ثانیا اون زمان حدود سال 2000 بود. خودتون حسابش رو بکنید. عهد بوق بود. VSudio های اون زمان کلا دیزلی بودند. یک دونه فرم که می خواستیم تعریف کنیم بیچاره می شدیم. اون زمان فرم ها با یک مشت روش عجیب قریب توسط Designer تعریف می شدند(VC الان رو نمی دونم). Editor های اون زمان هم که دل آدم رو خون می کردند. خیلی وقت ها درست کار نمی کردند مخصوصا برای اون ماکروها، اون هم ماکروهای دو سه کیلومتری پر از underline وسطشون. چیزهایی که از اون زمان یادمه همون LPTSR هاش هست که آخر هم نفهمیدم با CString ها چه فرقی داره؟ یا اون قواعد نامگذاری هاش که پیشوندهای _m یا C توصیه میشد و خیلی از متغیر ها علامت underline رو در ابتدای خودشون داشتند. مخربهای کلاس که نباید فراموش میشد. و زشت ترین کدهاش:

UpdateData(true/false);
که شاید هم همه ش باید با حرف بزرگ می بود(خداییش از 10 سال پیش حافظه م یاری نمی کنه)
هر وقت هم که اسم از hWnd یا hInstance یا دستگیره ها میومد که باید تنمون می لرزید و خودمون رو برای رویارویی با Error ها آماده می کردیم.
تو کتاب فروشی ها قفسه قفسه کتاب از VB بود ولی یک کتاب VC رو باید با بدبختی گیر می آوردیم. اون هم از چه نویسنده های در پیتی!
MSDN همین الآنش هم خیلی جذاب نیست. اون زمان که دیگه فاجعه بود. ماشالله اینترنت رو هم که اولین بار زمانی دیدم که دانشگاه رفتم.
خودتون دیگه اوضاع اون زمان رو قضاوت کنید.

خلاصه بعد اینکه دوره ی VC رو تموم کردم بوسیدم گذاشتمش کنار و گفتم خدا پدر ++C رو بیامرزه. اون قدیما غرور هم داشتیم و می گفتیم ما VC نویس هستیم و عمرا بریم سراغ VB و این جور بچه بازی ها.
دیگه سالها به جز ++C اون هم به طور محدود برنامه ننوشتم. فکر کردم دیگه برنامه نویسی رو میگذارم کنار.
.net اومد و من نرفتم سراغش
ASP نویسی مد شده بود ولی من دیگه برنامه نویسی برام اهمیت چندانی نداشت.

تا اینکه دو سال پیش توی کتابخونه وقتی یک کتاب VB دیدم یک تحولی در من روی داد و گرفتم خوندمش. دیدم خیلی راحته. دو هفته یی VB رو یاد گرفتم. دیدم .net اومده و چه کارها کرده!
گفتم نه بابا همه چیز پیشرفت کرده و ما فقط عقب موندیم. دیگه مردم از لفظ ActiveX و Component و این جور چیزا استفاده نمی کنند. به اینا میگند کنترل!
Editor ها چقدر تمیز شدند. آدم حذ می کنه!
برنامه ها خیلی سریعتر نوشته میشند.
آدم دیگه انگار از اشاره گرها چندشش میشه! ( یاد <- به خیر)
دیگه انگار از اون همه لشگر کشی کدها خبری نیست. همه چیز تو چند خط خیلی راحت نوشته میشه.
محیطهای VC و VB و غیره(اون قدیما C#‎‎‎‎‎‎‎‎‎ نویسی مال افه اومدن بود) خیلی به هم نزدیک شدند. حداقل کنترل های روی فرم هاشون شبیه هم شده.
از کدهای مشمئز کننده خبری نیست.
ماکروها غیبشون زد.
اسم ها کوتاه و خوشگل شدند.
خلاصه انگار خیلی اتفاق ها روی داده و ما خبر نداریم!:متفکر:
دنیا با چه سرعتی پیشرفت کرده!
چند روز بعد رفتم کتاب C#‎‎‎‎‎‎‎‎‎ رو هم خوندم. دیدم به! C#‎‎‎‎‎‎‎‎‎ انگار همون چیزی هست که می خواستم. ساختارش من رو یاد زبان تکرار نشدنی C میندازه. دستوراتش هم از VB خواناتره. تو همه کاری عالیه.البته قبول دارم آدم وقتی با یک زبان میره جلو کم کم به ایراداتش هم پی می بره. ولی برای اون اول کار عالی به نظر می رسید. خلاصه این شد که دیگه از اون به بعد با C#‎‎‎‎‎‎‎‎‎ کار کردم. خیلی هم باهاش راحت بودم. اما بعد این همه وقت گفتم یک یادی هم از رفیق قدیمی دوران بچگیم یعنی VC بکنم.

الان، این چند مورد برای من جای سوال مونده:

زبان ها دستخوش تحول شدند. VC تو این مدت چه فرقی کرد؟
NET. اومد. آیا VC هم تغییر کرد یا به همون روند قدیمی خودش داره ادامه میده؟
یادمه که همیشه Icon پیشفرض برنامه های VC آرم MFC بود. رابطه ی VC و MFC چطوره؟ اصلا MFC چی هست؟ آیا اون هم مثل FrameWork یک ماشین مجازیه؟(اون دوران چون همیشه اسم MFC رو میشنیدیم هیچ وقت احساس نمی کردیم لازمه که تعریف دقیق MFC رو بدونیم. فقط می دونستیم MFC یک چیز خوبیه! مثل آدمی که فقط رنگ سفید رو دیده باشه دیگه نمی دونه رنگ یعنی چی!)
اون زمان به اشیایی که از پانل روی فرم مینداختند می گفتند Component و اشیایی رو که از خارج به اون پانل اضافه می کردیم همواره اسم ActiveX رو یدک می کشیدند و آخرش هم نفهمیدم که با هم چه فرقی دارند. تو C#‎‎‎‎‎‎‎‎‎ همیشه اسم کنترل را به جای Component می شنویم. آیا این دوتا هم یکی هستند یا با هم فرق دارند. یک جایی شنیدم ActiveX داره منسوخ میشه. دیگه کلا گیج شدم چی به چیه! هیچ جایی هم نیست که اینا رو درست با هم مقایسه کرده باشه. هر جا میری جدا جدا معنی کردند. آدم فقط می فهمه که اینا ابزارهای مفیدی هستند! و مثل همون مثال جهان تک رنگ، در اینجا دو جهان تک رنگ برای شما توسط سایت های آموزشی معرفی میشه.
تو سایت ها مقایسه ی بین C#‎‎‎‎‎‎‎‎‎ و VB زیاد میشه. ولی من تا حالا مقایسه ی بین C#‎‎‎‎‎‎‎‎‎ و VC رو ندیم. ( به جز یک مشت سایت در پیت که تا پول ندی عضوش بشی نمی تونی فروم هاش رو بخونی یا سایت هایی که یا جواب این سوال داده نشده یا اگه اعضای اون اظهار نظر نمی کردند بهتر می بود.)
VC های امروز هم مثل قدیم بد دست هست یا امروزه کار با اون راحت شده؟
VC نسبت به VB و C#‎‎‎‎‎‎‎‎‎ سیاستش داره به چه سمتی میره؟
در مورد مقایسه یی هم که کردم هدفم این نیست که بگم VC بده یا C#‎‎‎‎‎‎‎‎‎ خوبه چون VC قدیمی رو با C#‎‎‎‎‎‎‎‎‎ جدید مقایسه کردم. و قیاس درستی هم نیست. فقط می خوام حقیقت برای من روشن بشه.
خلاصه سرتون رو درد نیارم. اگر جواب این سوال ها رو بدید ممنون میشم.

Nima_NF
پنج شنبه 16 اردیبهشت 1389, 13:41 عصر
زبان ها دستخوش تحول شدند. VC تو این مدت چه فرقی کرد؟
NET. اومد. آیا VC هم تغییر کرد یا به همون روند قدیمی خودش داره ادامه میده؟

مایکروسافت سعی کرد در سال های اول C++ کارها را به سمت .Net ببرد، اما شکست خورد. بعدا سعی کرد قابلیت ترکیب برنامه های کنونی را با C++/CLI فراهم کند.
یعنی برنامه کنونی با MFC هست، بتوانید بخش دیگری از برنامه را با #VB/C بنویسید و یا C++/CLI در MFC ترکیب کنید و از امکانات دات نت بهره ببرید.

در کل مهم و ترین قابلیت های خاص جدید، این موضوع فوق به علاوه یکسری نمای طراحی جدید هست (مانند نمای office 2007 و نمای visual Studio ) .
همین طور پیاده سازی اساندارد جدید C++


رابطه ی VC و MFC چطوره؟ اصلا MFC چی هست؟
VC های امروز هم مثل قدیم بد دست هست یا امروزه کار با اون راحت شده؟
VC نسبت به VB و C#‎‎‎‎‎‎‎‎‎‎ سیاستش داره به چه سمتی میره؟

MFC کسری کتابخانه و کلاس هست که امکانات برنامه نویسی ویندوز (windows API یا قبلا همان win32) را در قالب کلاس های عرضه می کند و در نتیجه برنامه نویسی کمتر و راحت تر می شود.
همچنان برنامه نویسی یه این شیوه، پیچیده، سخت و با عناوین گمراه کننده هست :D



حرف هایی توسط تیم فنی مایکروسافت زده شده است که یا در حال نوشتن framework جدید هستند، یا می خواهد در آینده شروع به نوشتن آن کنند.
در هر حال توسعه کنونی MFC پشتیبانی از هزاران برنامه کنونی اعلام شده است(از nero و آنتی ویروس ها گرفته تا 3dsmax)

windows API یا همان win32 هم که ادامه خواهد یافت تا بستر لازم برای درایور نویسی و نوشتن کتابخانه های کنونی مانند Qt فراهم باشد.


تو سایت ها مقایسه ی بین C#‎‎‎‎‎‎‎‎‎‎ و VB زیاد میشه. ولی من تا حالا مقایسه ی بین C#‎‎‎‎‎‎‎‎‎‎ و VC رو ندیم
البته VC را به C# مقایسه نمی کنند، C++ را با C# مقایسه می کنند : D

از نظر من دو دلیل دارد:
1- افرادی که ++C کار می کنند شرکت ها و افرادی با تجربه هستند که معمولا درجه علمی آن ها آنقدر هست که نیازی ندارند روی این گونه مسائل بحث کنند، سال ها تجربه دارند و می دانند هدفشان چه هست و چرا باید از ++C استفاده کنند.
در حال حاضر اگر پروژه open source باشد، هدف داشتن برنامه بر روی سیستم عامل های آزاد هست، سازندگان تجاری نیز می خواهند بر روی mac و Linux برنام خود را داشته باشند تا مشتریان خود را افزایش دهند، پس #C برای بسیاری از آن ها گزینه اول نیست. (با توسعه Qt ، پروژه های مانند mono هم نتوانست تغییری در روال کار ایجاد کند)

2- امروزه برای توسعه های جدید کمتر به سراغ MFC می روند، مگر اینکه هدف توسعه برنامه بزرگ کنونی باشد (خیلی از برنامه های ویندوزی کنونی).
مخصوصا همین سال اخیر، وقتی Nokia یکدفعه Qt را خریداری کرد و آن را LGPL کرد همه چیز یکدفعه عوض شد و نظرات همه، حتی سازندگان تلفن همراه نیز تغییر کرد!

(Qt یک کتابخانه بسیار قدرتمند برای نوشتن برنامه های GUI برای تمامی سیستم عامل ها و گوشی ها تلفن همراه هست و از ++C استفاده می کند).

Qt در این مدت Plugin های خود برای اضافه کردن نمای طراحی در ++Visual C را عرضه کرد و لذا شرکت های تجاری که همیشه با VC در ویندوز کار می کنند، خوشحال به این سمت رفتند و حتی می توانند برنامه خود را برای تمامی سیستم عامل ها نیز عرضه کنند.

حتی Qt کامپایلر خود را نیز رایگان عرضه کرد.
حتی امکان برنامه نویسی بر روی symbian و Maemo را نیز عرضه کرد.

شوکی که یکدفعه Autodesk را هم تغییر داد و Maya بسیار عظیم را در نسخه 2011 تماما با Qt پیاده سازی کرد !!!

cardano7
پنج شنبه 16 اردیبهشت 1389, 14:29 عصر
ممنون از توضیحات خوبتون


در حال حاضر اگر پروژه open source باشد، هدف داشتن برنامه بر روی سیستم عامل های آزاد هست، سازندگان تجاری نیز می خواهند بر روی mac و Linux برنام خود را داشته باشند تا مشتریان خود را افزایش دهند، پس C#‎‎ برای بسیاری از آن ها گزینه اول نیست. (با توسعه Qt ، پروژه های مانند mono هم نتوانست تغییری در روال کار ایجاد کند)
خوب مگه خود VC به سیستم عامل ویندوز وابسته نیست؟


البته VC را به C#‎‎ مقایسه نمی کنند، C++‎‎ را با C#‎‎ مقایسه می کنند : D
این C++‎‎ ی که میگید منظور C++‎‎ ی است که در چه محیطی ساخته میشه و از چه کتابخانه هایی استفاده می کنه؟
همچنین C#‎ زبانی زیباست(البته به نظر من) آیا برخی از جنبه های زیبای C#‎ را نمیشد به VC اضافه کرد بدون آنکه کارایی آن پایین بیاید؟


MFC کسری کتابخانه و کلاس هست که امکانات برنامه نویسی ویندوز (windows API یا قبلا همان win32) را در قالب کلاس های عرضه می کند و در نتیجه برنامه نویسی کمتر و راحت تر می شود.
همچنان برنامه نویسی یه این شیوه، پیچیده، سخت و با عناوین گمراه کننده هست :D

پس با این حساب کدهای VC به کد ماشین ترجمه میشه و نه کد IL ؟


شوکی که یکدفعه Autodesk را هم تغییر داد و Maya بسیار عظیم را در نسخه 2011 تماما با Qt پیاده سازی کرد !!!
منظور شما اینه که اگه وقتمون را برای ساخت برنامه های رایج(غیر سیستمی) روی QT بگذاریم به صرفه تر هست تا روی VC . و تعداد کاربران VC داره کمتر میشه.
درست برداشت کردم؟


باز هم ممنون از اینکه برای جواب به این سوالات وقت گذاشتید.

Nima_NF
پنج شنبه 16 اردیبهشت 1389, 18:24 عصر
خوب مگه خود VC به سیستم عامل ویندوز وابسته نیست؟Visual C++‎‎ فقط یک کامپایلر هست، این کامپایلر قابلیت کامپایل زبان های C و C++‎‎ را دارد.
این کتابخانه مورد استفاده شما هست که شما را محدود به سیستم عامل می کند.
مثلا اگر MFC را انتخاب کنید، به خاطر ماهیت این کتابخانه، به هیچ عنوان حتی با تغییر کدهایتان را نمی توانید به سایر پلتفرم ها ببرید.

اگر منظور شما این هست که کامپایلر VC فقط در ویندوز اجرا می شود، جواب بله هست.
اما اگر از کتابخانه هایی مانند Qt استفاده کنید، شما با امکانات خوب VC برنامه را می نویسید برای نسخه ویندوز کامپایل می کنید. سپس به راحتی همان کدهای نوشته شده را به linux می برید، با تغییرات بسیار اندکی، توسط کامپایلر gcc کامپایل می کنید.



این C++‎‎‎‎‎ ی که میگید منظور C++‎‎‎‎‎ ی است که در چه محیطی ساخته میشه و از چه کتابخانه هایی استفاده می کنه؟
همچنین C#‎‎‎‎ زبانی زیباست(البته به نظر من) آیا برخی از جنبه های زیبای C#‎‎‎‎ را نمیشد به VC اضافه کرد بدون آنکه کارایی آن پایین بیاید؟منظور C++‎‎ standard هست، که در همه سیستم عامل ها و سخت افزارهای یکی هست.

استاندارد جدید ++C که تقریبا منتشر شده است، امکانات جدیدی عرضه می کند مانند لامبدا و غیره که در C#‎‎ هم هست.
کار با رشته و ها و غیره هم که توسط STL هست سال هاست به C++‎‎ به شکل استاندارد اضافه شده است.

در هر صورت همه می دانیم زبان ها جدید به خاطر همین تغییرات می آیند، به همین خاطر C#‎‎ آمد، اما حیف که با وجود استاندارد بودن تقریبا یک محصول تماما مایکروسافتی شده است.

حالا دقیق نمی دانم منظورتان از "برخی از جنبه های زیبای C#‎‎‎‎ " چه امکاناتی هست، امکانات خود زبان ؟ چون اگر منظورتان قابلیت های کتابخانه دات نت هست که بحث فرق می کند و ربطی به خود زبان C#‎‎ ندارد، بلکه همان بحث کتابخانه های هست.


پس با این حساب کدهای VC به کد ماشین ترجمه میشه و نه کد IL ؟بله، دقیقا.
کلا همه برنامه نویسی های native به همین شکل هست.


منظور شما اینه که اگه وقتمون را برای ساخت برنامه های رایج(غیر سیستمی) روی QT بگذاریم به صرفه تر هست تا روی VC . و تعداد کاربران VC داره کمتر میشه.
درست برداشت کردم؟باز هم تکرار می کنم، VC یک کامپایلر هست، نباید آن را با سایر زبان ها یا سایر کتابخانه ها مقایسه کنید. اشتباه هست با C#‎‎ یا Qt مقایسه کنید.

اگر قرار هست مقایسه ای کنید، باید MFC (که تنها با ++VC عرضه می شود) را به Qt مقایسه کنید.
یا باید C++‎‎ را با C#‎‎ مقایسه کنید.

Qt در ویندوز از کتابخانه win32 استفاده می کند و حتی امکاناتی بیشتر از کتابخانه دات نت هم عرضه می کند.

در کل بله، منظورم این هست که حداقل از امسال اگر بر روی Qt وقت بگذارید بهتر از MFC هست (نگویید VC).
دقت کنید در ویندوز برنامه شما می تواند هم برای Qt و هم برای MFC با همان ++VC کامپایل شود.