PDA

View Full Version : کدوم زبان برنامه نویسی ؟



vasilopita
یک شنبه 17 مهر 1390, 15:13 عصر
سلام. امیدورام مدیران این بخش این تاپیک رو پاک نکنن.
امروز تو دانشگاه سر کلاس طراحی و پیاده سازی استادمون که دکتر هم هستش یه چیزی گفت که مجبور شدم واسه اینکه بهش ثابت کنم حرفش اشتباهه و جو کلاس رو درست کنم بیام اینجا و این پست رو بذارم.
امروز استاد گفت که سی ++ تحت داسه و بدرد ساخت برنامه های ویندوزی نمی خوره. (تا اینجاش رو مشکلی نداشتم چون می دونم واسه windows application بهتره بری سراغ # c البته ایشون به نظر از ویژوال سی ++ کاملا بی خبر بودن) ولی بعد وقتی گفت "مثلا تو سی پلاس پلاس باید بیای واسه یه پنجره ساختن 100 خط کد بنویسی ولی تو سی شارپ راحت میشه با 3ٰ،4 خط یه پنجره ایجاد کرد و این نشون می ده که سی پلاس پلاس بدرد نمی خوره و اون کسی که وقتش رو گذاشته رو سی ++ میاد می بینه که راه و اشتباه رفته و وقتش رو تلف کرده"دیگه نتونستم تحمل کنم. بعد تصمیم گرفتم بیام یه سری مطلب در این رابطه جمع آوری کنم.
دوستان خودم این و می دونم که سی ++ تو native حرف اول رو می زنه و c# تو windows application ولی استاد ازم خواسته که با رفرنس براش بگم که چرا سی ++ هنوز حرف اول رو میزنه و ...

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

m.soleimani
یک شنبه 17 مهر 1390, 16:52 عصر
دوست عزیز خوب بنده خدا حقیقت رو گفته ولی نگفته که اون دو سه خطی که شما توی سی‌شارپ می‌نویسی چندهزار خط کد رو مورد استفاده قرار می‌ده تا یه پنجره زیبا با این همه امکانات رو در اختیار شما قرار بده؛ که البته در مقابل چند 100 خط کد سی‌++ خیلی هم جلوه می‌کنه ولی در کل شاید منظورش بازار کار یا یه چیزی توی این حدودها بوده. توی سی++ یا به پول می‌رسی یا هیچی اگر خیلی خوره باشی پول چندبرابر چون تعداد برنامه نویسای خبره و کار بلدش نسبت به بقیه زبون‌ها کمتره و اگر هم خوره نباشی که همه تقریبن توی دوران دانشجویی باهاش آشنا می‌شن کلی هم ازش لذت می‌برن ولی بعد میرن سراغ استفاده از زبون‌های آسون‌تر. و آماده خوری.

در کل شما خودشه ناراحت نکن تحملت رو برای چی از دست می‌دی !!
تعصب کار رو از قبل هم خراب‌تر خواهد کرد ازش می‌پرسیدی برنامه نویسی فقط به نوشتن برنامه حساب‌داری ختم می‌شه «اون هم فقط داخل ویندوز » یا این‌که باهاش سیستم عامل هم تولید می‌شه زبان‌های تازه نوشته می‌شه یا از این قبیل پرسش‌ها. سریع تغییر مسیر می‌داد که بله از اون نظرها سی++ هرگز نخواهد مرد کار هم به این‌جا نمی‌کشید که بزارتت سر کار که برو دلیل و مدرک جمع کن شما هم بیوفتی به دردسر شاد و پیروز باشید./

پی‌نوشت : یه موردی که یادم رفت در موردش بگم این بود که از ایشون بپرسین خود ویندوز با چه زبونی نوشته شده که از این به بعد برای برنامه نویسی ویندوز از همون زبون استفاده کنیم.

vasilopita
یک شنبه 17 مهر 1390, 17:21 عصر
دوست عزیز ممنون که پاسخ دادیت. بله اتفاقا ایشون هم به این اشاره کردن که خود ویندوز رو هم با سی ++ نوشتن ولی بعدش خودش دوباره گفت"برای ساخت ویندوز 500 برنامه نویس حرفه ای 3 سال کار کردن، حالا شما می خوای بری خودت تنها ویندوز بسازی؟!" . یعنی برنامه نویسای سی ++ فقط می رن طرف ساخت یه سیستم عامل ؟ من یه مطلب می خوندم تو همین سایت که می گفت اونور آب win32 حرف اول رو میزنه. پس همه ی اونها می خوان ویندوز بسازن ؟ بعد اینکه اگه اون 2 ، 3 خط سی شارپ و اون پنجره خیلی جلوه می کنه پس ما واسه چی داریم سی ++ کار می کنیم‌؟؟؟

m.soleimani
یک شنبه 17 مهر 1390, 17:42 عصر
مگه شما قراره برای خودت ویندوز بسازی ! یا اینو بهش گفتی که این پاسخ رو بهت داده.
ایشون مطمئن هستن دقیقن 500 نفر بودن؛ ببین هر زبانی برای کار مشخصی ساخته می‌شه و قرار هست نیازهایی رو برطرف کنه که قبلن نبودن یا به اون صورت نبودن نه برای کلاس گذاشتن و به رخ هم کشیدن چون گویا بر خلاف این‌جا اون طرف‌ها خبری از وقت اضافی برای تلف کردن نیست پس چرخ رو دوبار اختراع نمی‌کنن.
زبان سی++ بیشتر برای کارهای نزدیک به سطح سیستم که استفاده از اسمبلی براش توجیهی نداره و سرعت توش مهم هست استفاده می‌شه یا برای نوشتن بازی که خیلی از زبون‌های دیگه حتی امکان حضور توی این زمینه‌ها رو ندارن چیزی که سی++ رو بالا نشون می‌ده این هست که به غیر از این جور کارها می‌شه ازش برای تقریبن هر کار دیگه‌ای استفاده کرد و البته مشکلاتی هم با بعضی از کارها داره مثل برنامه‌های تحت وب یا ...

بگذریم شما سی++ رو یاد می‌گیری چون هم برنامه نویسی شی‌گرا رو می‌تونی باهاش انجام بدی هم ماژولار رو و اگر با سبک نوشتن برنامه توی سی++ مشکل نداشته باشی تقریبن با خیلی از زبون‌های دیگه به راحتی می‌تونی کار کنی چون خودش مادر خیلی از این زبان‌ها هست مثل جاوا, سی‌شارپ و پی‌اچ‌پی و این که در زمان یادگیریش زبان مادرش رو هم که زبان سی باشه یاد خواهی گرفت پس شما با یه تیر چندتا نشون رو خواهی زد پس تمام سعیت رو بکن که تا فرصت هست و هنوز وارد بازار کار و مشکلات زندگی نشدی از زندگی دانشجویی نهایت استفاده رو ببری و حسابی بهش مسلط بشی.
شاد و پیروز باشید./

mehdi.mousavi
یک شنبه 17 مهر 1390, 19:19 عصر
سلام.
من نمی خوام در مورد استاد شما قضاوت کرده باشم، چون شاید دلیلی برای حرفی که زده داشته باشه که من از اون بی اطلاع باشم (فرضا همه این حرفها حقه ای باشه که ذهن افرادی مثل شما رو درگیر پیدا کردن حقائق کنه و ...). اما ازتون استدعا دارم، هر کسی رو استاد خطاب نکنید. هر فردی، لائق این عنوان نیست و نباید اونو "علی الخصوص" در مورد کلیه مدرسانی که در دانشگاه ها تدریس می کنن، بکار برد.

عبارت "فلان زبان حرف اول رو میزنه" عبارت علمی صحیحی نیست. هر کدوم از زبان های برنامه نویسی، برای رفع مشکلات در حوزه خاصی پدید اومده. اینکه "C++ تحت DOS هستش و به درد ساخت برنامه های ویندوزی نمیخوره"، سخن Bold ای هستش. در همون سالهایی که DOS در بورس بود و کارت های گرافیکی Trident بازار ایران رو پر کرده بودند، با C++ می شد Framework های Windowing تکان دهنده ای درست کرد، میشد Cursor رو بگونه ای Capture کرد که روی صفحه نقطه به نقطه حرکت کنه (جای اینکه بصورت کاراکتری حرکت کنه) و میشد اصوات رو از طریق Speaker سیستم (منظورم همون بلندگوی مزخرفی هستش که روزگاری تنها خروجی صدای یک سیستم محسوب میشد نه Speaker های امروزی) بصورت قابل قبولی Play کرد (که اولین بار در برنامه های Peter Norton این امکان نهفته شد) و ... وقتی کسی در مورد DOS اینطوری حرف میزنه، متاسفانه این برداشت میشه که این شخص به DOS مسلط بوده و ... خیر، اینطور نیست! همون افراد، امروزه اسباب بازی های جدیدی در اختیارشون هست و همین حرف ها رو هنگام ظهور سیستم عامل جدیدی در دهه های آتی به زبون میارن. آیا این افراد امروزه بر ویندوز تسلط دارن؟ آیا می تونن تفاوت Cooperative OS ها و Preemptive OS ها رو بگن؟ آیا میتونن Protected Mode و Real Mode رو از دید CPU براتون توضیح بدن؟ یا برنامه نویسی رو در ایجاد یک پنجره با چند خط کد میدونن؟

C++ زبانی نیست که بشه بی پروا در موردش اظهار نظر کرد. بهترین کتاب (در حال حاضر) در زمینه طراحی این زبان و پاسخ به بسیاری از چون و چرا ها، کتاب The Design and Evolution of C++ (http://www2.research.att.com/%7Ebs/dne.html) نوشته دکتر Bjarne Stroustrup (http://www2.research.att.com/%7Ebs/homepage.html) طراح این زبان هستش که دیدگاه خوبی نسبت به این زبان به خواننده میده... در سال 1986، دکتر Bjarne Stroustrup کتابی می نویسه تحت عنوان The C Programming Language که اونو بدین شکل آغاز می کنه: "C++ زبانی همه منظوره است که برنامه نویسی را برای برنامه نویسان جدی، لذت بخش تر می کند" اما این عبارت توسط منتقدان ادبی دو بار حذف میشه. دکتر Bjarne Stroustrup در نهایت عنوان میکنه که "C++ در اصل برای این طراحی شده که طراح و دوستانش مجبور نباشن به assembly، C یا دیگر زبان های high-level امروزی برنامه نویسی کنن. هدف اصلی این زبان، ساده تر نوشتن برنامه های خوب و خوشایندی بیشتر تک تک برنامه نویسان هستش". (بخشی از کتاب فوق الذکر)

ملاک برتری یک زبان برنامه نویسی به دیگری، ایجاد تعداد پنجره های بیشتر توسط کد کمتر نیست! در C++، شما می تونید از Framework هایی مانند MFC یا Qt برای این منظور استفاده کنید. توسط چنین Framework هایی نیز می تونید کمترین تعداد خط کد رو برای ایجاد یک پنجره بنویسید. شما می تونید توسط C++، هر کاری که تصور کنید انجام بدید (البته در برخی مواقع، به سختی). شما می تونید یک Web Site توسط C++ ایجاد کنید، یا فلان سیستم بانکی رو از راه دور مدیریت کنید. محدودیتی وجود نداره! برتری یک زبان به زبان دیگه، در یک سناریو روشن میشه: "می خوام Web App ای برای فلان کار ظرف دو هفته برام بسازید که ...". خوب، اینجا، من میرم (فرضا) از PHP استفاده می کنم. PHP خودش با زبان C نوشته شده و ابزارهای مورد نیاز منو برای ایجاد یک Web App در اختیارم قرار میده. پس نیازی نیست تا "به سختی" خودم یک Web App رو از ابتدا توسط C ایجاد کنم. درسته شدنیه، اما یک نفر قبلا اینکارو کرده. پس نیازی نیست دوباره از نو شروع کنم...

موفق باشید.

vasilopita
دوشنبه 18 مهر 1390, 13:39 عصر
ممنون که اینقدر لطف دارید و پاسخ گو هستید. فقط یه سوال دیگه و دیگه قول می دم این پست و بیشتر از این کش ندم. اولا که اگه امکان داره بگید win32 در واقع همون کار کردن با توابع api هستش ؟ و اینکه وقتی تو ویژوال سی ++ می زنیم console application دو بخش داره یکی console و یکی دیگه windows application. اینا چه فرقی با هم دارن. بعد اینکه اگه ممکنه یه مقدار در رابطه با ATL , CLR و بقیشون توضیح بدید و سوال آخر اگه بخوام در رابطه با انواع شیوه های برنامه نوسی یه تحقیق کنم کجا رو بهم پیشنهاد می دید. یعنی مثلا ما برنامه نویسی native داریم و چیزای دیگه . اونا رو از کجا پیدا کنم؟ سوالام خیلی زیاد شدن. ببخشید.
ممنونم ...

mehdi.mousavi
دوشنبه 18 مهر 1390, 15:02 عصر
ممنون که اینقدر لطف دارید و پاسخ گو هستید. فقط یه سوال دیگه و دیگه قول می دم این پست و بیشتر از این کش ندم. اولا که اگه امکان داره بگید win32 در واقع همون کار کردن با توابع api هستش ؟ و اینکه وقتی تو ویژوال سی ++ می زنیم console application دو بخش داره یکی console و یکی دیگه windows application. اینا چه فرقی با هم دارن. بعد اینکه اگه ممکنه یه مقدار در رابطه با ATL , CLR و بقیشون توضیح بدید و سوال آخر اگه بخوام در رابطه با انواع شیوه های برنامه نوسی یه تحقیق کنم کجا رو بهم پیشنهاد می دید. یعنی مثلا ما برنامه نویسی native داریم و چیزای دیگه . اونا رو از کجا پیدا کنم؟ سوالام خیلی زیاد شدن. ببخشید.
ممنونم ...


سلام.

پاسخ سوال اول:
داستان با Win16 شروع شد، مجموعه توابعی که امکان توسعه برنامه ها رو بر بستر Windows در محیطی 16 بیتی فراهم می کرد. به مرور زمان و با پیشرفت تکنولوژی، مجموعه توابع Win32 جایگزین توابعی قبلی شدن، و CPU های جدید، امکان آدرس دهی 32 بیتی رو فراهم کردن. نسخه 64 بیتی سیستم عامل ویندوز، میتونه تا 16 ترابایت RAM رو Support کنه، در حالیکه نسخه های 32 بیتی حداکثر 4 گیگابات رو می تونن آدرس دهی کنن. در ILP32 Data Model داده های integer، long و pointer ها 32 بیتی هستن، در حالیکه در Win64 (یا دقیقتر، LLP64 Data Model) اشاره گر ها برای آدرس دهی 64 بیتی extend شده اند.

Win16، Win32 و Win64 در نهایت همگی با هم ترکیب شده اند و امروزه اونها رو به اسم Windows API ها می شناسیم، مگر اینکه بخواهیم بطور خاص به مجموعه API هایی که در یک ویندوز خاص (مثلا Windows 3.1) بود، اشاره کنیم.

Windows API ها به چند بخش زیر تقسیم میشن که هر بخش وظیفه خاصی رو به عهده داره:



Base Services
Common Control Library
GDI
Netwrok Services
User Interface
Windows Shell

توضیحات بیشتر در مورد هر یک رو می تونید در MSDN یا این لینک (http://en.wikipedia.org/wiki/Windows_API) مطالعه نمایید.

پاسخ سوال دوم:
برنامه های Console ای، برنامه هایی هستن که Windowing رو Support نمیکنن و در حقیقت محدود به محیطی Text-Based هستند. این برنامه های Message Queue ندارن و به سادگی قابل نوشتن هستند. برای مثال دستور xcopy نمونه ای از این برنامه هاست. اما Windows Application ها، در حقیقت برای برنامه هایی مناسبه که نیاز به داشتن یک GUI دارن، یا قراره بصورت سرویسی در پشت پرده کار کنن. این جور برنامه ها عموما نیازی به باز کردن پنجره Console ندارن.

پاسخ سوال سوم:
CLR یا Common Language Runtime پیاده سازی مایکروسافت از CLI (یا همون Common Language Infrastructure) هستش، Virtual Machine ای که مدیریت و اجرای برنامه های .NET رو بر عهده داره.

پاسخ سوال چهارم:
ATL یا Active Template Library (http://msdn.microsoft.com/en-us/library/599w5e7x%28v=vs.71%29.aspx) مجموعه ابزارهای برنامه نویسی هستش که طراحی و توسعه برنامه های COM-Based رو خوشایند میکنه. :)

در نهایت، مدیریت حافظه به دو شکل میسره: "مدیریت شده"، به این معنا که سیستم حافظه مصرفی، مورد نیاز و ... رو مدیریت می کنه و برنامه نویس درگیر اختصاص فضا یا آزاد سازی فضای مورد نیازش نمیشه (که بهش میگیم Managed) و "بومی" یا "غیر مدیریت شده" به این معنا که توسعه دهنده وظیفه مدیریت حافظه رو به دوش داره. به دومی میگیم Native یا Unmanaged.

موفق باشید.