C++ or Python

 

CppVsPython

زبان های c++ و Python دو زبان قدرتمند و رایج هستند ! اما شاید انتخاب یک زبان را برای فعالیت های خود کار ساده ای نباشد، ما در اینجا کمی از تفاوت های آن دو را میگوییم شاید شما را در این راه کمک کند :

در مدیریت حافظه C++ جمع آوری زباله ( حذف کردن حافظه هایی که دیگر مورد استفاده قرار نمیگیرند ) وجود ندارد ! همچنین این زبان شما را به استفاده از اشاره گر ها برای دسترسی به حافظه تشویق میکند. زبان c++ به سازماندهی بیشتری برای نحوه ذخیره سازی اطلاعات نیاز دارد که در عین حال کنترل مطلوبی را به شما میدهد که در اغلب موارد لازم نیست.

نوع ها در در زبان c++ به صراحت بیان میشوند، توسط نام محدود و در هنگام کامپایل شدن بررسی میشوند اما در پایتون آن ها با مقدار هایشان محدود و در زمان اجرا بررسی میشوند منظور این است که نوع داده ای در زبان پایتون ساده تر است ! بی خطری و سادگی و عدم اعلان نوع متغییر ها به مردم کمک میکند تا سریعتر حرکت کنند. البته به همین دلیل است که کامپایلر نمیتواند error های منطقی را که توسط کامپایلر c++ قابل شناسایی هستند شناسایی کند! زبان باید در هنگام اجرا متوجه شود نوع این مقدار چیست … این کار باعث کند شدن سرعت اجرای برنامه های Python میشود . البته زبان c++ ذاتا زبان سریعتری است !

برای مثال کتاب خانه های Boost Units به مهندسان و دانشمندان اجازه میدهد تا کد هایشان به گونه ای نوشته شوند تا کامپایر در زمان کامپایل بتواند از نظر آماری برسی کند که محاسبات منطقا به شکل پایدار از واحد ها استفاده میکنند، بدون هیچ گونه سربار اجرایی، که این در Python غیر ممکن است .

از نظر پیچیدگی زبان میتوان گفت c++ به نسبت پیچیده تر از Python است که توجه شما به گفته ای از سایت رسمی Python جلب میکنم :

Python code is typically 3-5 times shorter than equivalent Java code, it is often 5-10 times shorter than equivalent C++ code! Anecdotal evidence suggests that one Python programmer can finish in two months what two C++ programmers can’t complete in a year.

به طور معمول کد در python سه تا پنج برابر کوتاه تر از معادل همان کد در Java هست و حتی ۵-۱۰ برابر کوتاهتر از معادل آن در c++ ! شواهد نشان میدهد که برنامه نویس python میتواند برنامه ای را در دو ماه تمام کند چیزی که ۲ برنامه نویس C++ نمیتوانند در یک سال به انجام برسانند !

برنامه در c++ به شکل صریح تفصیر میشوند ( کامپایل میشوند ) اما در python اینگونه نیست ( در اکثر حالات ) این معمول است که برنامه نویسان python در محیط مترجم کد به برنامه نویسی مشغول میشوند که البته این برای تست و اشکال زدایی سریع عالی است ! کاری که برنامه نویسان c++انجام نمیدهد ( با وجود gdb) .

زبان پایتون به سختی و با ضعف از برنامه های چند وظیفه ای ( multithreading ) پشتیبانی میکند، معماری این زبان به عملگر های ویژه ای برای کاملا بی خطا و صحیح بودن نیاز دارد ( برای مثال برای تغییرات در لیست ) که این منجر به استفاده از محدودیت کلی برای جلوگیری از اجرای دو پردازش در یک زمان در کد های python شده است.

البته زبان c++ ایمن بودن پردازش های همروند را بر عهده ی خوده توسعه دهنده گذاشته که این باعث برنامه نویسی های همروند کارا در این زبان شده.

c++ امکانات خیلی بیشتری برای مدیریت حافظه به توسعه دهنده میدهد، برای مثال ظرف های ژنریک که به توسعه دهده جازه میدهد تا از نوع های داده ای تعریف شده توسط کاربر در ساختمان داده خود استفاده کنند که البته موجب اندکی سربار حافظه شده در مقابل تکنیک ارجا که در python ممکن است، استفاده از تخصیص دهنده حافطه ی کاستوم شده توسط توسعه دهنده و تخصیص حافطه در منطقه ی خاصی از حافظه که منجر به امکان حذف چندین آبجکت با استفاده از یک دستور شده اشاره کرد .

و در آخر زبان c++ زبانی آزاد در نوع دهی است ! این به این معنی است که شما میتوانید یک بخش از حافظه را برای ذخیره سازی نوع خاصی مشخص کنید و سپس با روشی مکارانه آن را عوض کنید تا نوع دیگری را در خود ذخیره کند ! این کار خطرناک است و منجر به حالتی در برنامه شده که دیگر رفتار آن قابل پیشبینی نخواهد بود ! اما اگر بدانید در حال چه کاری هستید میتوانید از این پیاده سازی استفاده کنید تا کد های محلی در زمان اجرا تولید کنید یا به شکل دینامیک ماژول کد ها را بارگذاری کنید ، به شکل مستقیم ساختار فایل را تغییر دهید بدون استخراج جداگانه فیلد های آن چیزی که شما باید در Python انجام دهید، و مقدار زیادی از کاربرد های دیگر .

 

منابع :

programmers.stackexchange.com

stackoverflow.com

python.org

آپدیت : برای کسب اطلاعات بیشتر این پست را هم مطالعه کنید : کارهایی که با پایتون نمی توانیم بکنیم.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

۲۱ دیدگاه

  • سلام دوستان من ی مدت شروع به برنامه نویسی پایتون کردم که چندیی دوستان پیشنهاد دادند با c کنم ،
    حالا به چه دلیل؟
    چون من مهندسی برق میخونم و شما در کامنتای بالا فقط برای رشته کامپیوتر و نت میخونید
    سوال من اینه
    برای یک مهندس برق کودوم زبان بهتر و کاربردی تره؟

    • حامد آهنگری

      سلام. به نظر من، یک دانشجوی مهندسی برق به یکی یا چندتا از حداقل زبان های مجموعه زیر نیاز پیدا می کنه :
      وریلاگ، وی اچ دی ال، اسمبلی، سی و سی پلاس پلاس.

      موفق باشی

  • سلام همیشه رو سی پلاس پلاس حساس بودم دوستان دانشجو رشته ی نرم افزار یا علاقه مندان پایه برنانه نویسیتون رو با سی پلاس پلاس شروع کنید تا مبحث شی گرا بقران تازه میفهمید چه قدر این زبان خوبه! وقتی. بتونید این دو رویه برنامه نویسی رو تو سی پلاس پلاس درک بکنید میتونید زبان جاوا رو در تاه ترین زمان ممکن اشنا بشید و بعد بازار اندروید(البته میتونید با سی پلاس هم کد اندروید بزنید) یه مطلب اشتباه تو این مقاله بود تفسیر و کامپایل بود ،زبان سی و سی پلاس پلاس و جاوا و سی شارپ کامپایلر استاتیک دارند یعنی همه چیز باید مشخص بشه اما کد بیت شده بعد کامپایلر در جاوا روی ماشین مجازیش نتفسیر میشه رو سی پ پ توسط رایانه با توجه ب سیستم‌شما اجرا میشه تو سی شارپ توسط فریم ورک دات نت. برنامه شما اجرا میشه اما در زبان های اسکریپتی ،کامپایل داینامیک هست و در همان لحظه کامپایلر بزنامه اجرا میشه ک بنظرم اصلا با روح برنامه نویسی تضاد داره (در این کامپایلر شما اصلا لازم نیست نوع متغییر رو مشخص کنید ٬در مبحث شی گراییم لنگ میزنه) از البته کارایی ک دارند اینه هروقت لازم بشه اجرا میشن همین جاوا اسکریپت خودمون! کلا هر زبانی را بهر کاری ساختن جاوا ساده شده ی سی پلاس پلاس هست سی شارپ یه چیزی بین این دو ،اصل کار سی پ پ رو میشه تو بازیایی هایی مثل codمیشه پیدا کرد کارایی غیر لازمشم میشه تلگرام دکستاپ رو گفت.. البته با استفاده از qt،حالا با پایتونم میشه تلگرامو نوشت! اما اصل کارش تو شبکه و سوکت و ایناست ،تکنولوژی های جاوا هم ک صحبت نکنیم…… یه چیزیم بگم سی پ پ با سی فرق داره شاید سی پ پ ۹۹با سی خیلیی اهت داشته باشه ولی الان سی پ پ ۱۷داره میاد این زمین تا اسمون فرق دارند…..
    یه نکته هم بگم در مورد مستندات مستندات پایتون تو سایت خودش پیدا میشه هم چیزی برای سی پ پ نیس البته سی پ پ. سایت های زیادی براش در مورد مستنداتش هست ،اخرین عرضمم‌بگم (ادمین حلالت نمیکنم تایید نکنی lol)اینه ک هر زبان دو بخش داره یکی الگوریتم هایه از پیش نوشته شده است یکی ساختمان داده هست ک هر دو برای سادگی کار برنامه نویس هست

  • سلام و ممنون از اطلاعات خوبی که در اختیارمون گذاشتین
    من یک سوال دارم:
    آیا یادگیری زبان پیتون رو بدون اینکه زبان دیگه ای بلد باشم توصیه می کنید ؟ به نظرتون قبلش دید خاصی نباید از برنامه نویسی داشته باشم؟؟

    • خیر به پیش نیاز خاصی نیاز نداره و به دلیل سادگی اش توی خیلی از جاهای دنیا به عنوان زبان آموزشی استفاده می شه

  • سلام. من نمیدونم چرا همه هنگام طرح سئوال( کدام زبان رو یاد بگیریم؟)میپردازند به مقایسه زبانها؟ قدرت یک زبان برنامه نویسی منوط است به اولا تنوع برنامه هایی که میتوان با آن نوشت از سیستمی تا کاربردی و اپلت و غیره. دوما حجم برنامه نوشته شده و سوما میزان منابعی که برنامه از سیستم مصرف میکند و چهارما توانایی زبان برای دسترسی به توابع سیستم عامل و مهمتر از همه توانایی زبان برای ایجاد نرم افزارهای غول آسا و سورس کدهایی با گاها حتی چندین میلیون خط کد.
    خوب از این نقطه نظر قدرتمندترین زبان برنامه نویسی دنیا اسمبلی است که با آن همه کار میتوان کرد مشروط بر اینکه شما ده سالی وقت صرف کنید تا آن را کاملا یاد بگیرید و در اینصورت میتوانید به خود ببالید که حتی قادرید سیستم بدون سیستم عامل را به واکنش وا دارید.اما اگر در خودتان چنین همتی سراغ ندارید انتخاب درست سی پلاس پلاس است زیرا در مجموع مقایسه پس از اسمبلی قویترین زبان دنیاست. آن را با جاوا مقایسه کنم نرم افزاری نوشته شده با سی پلاس حجمی به مراتب کمتر از همان نرم افزار نوشته شده با جاوا دارد و منابع سیستم را به مراتب کمتر مصرف میکند.یعنی مثلا یک بازی را اگر با سی پلاس بنویسید و حداقل سرعت سی پی یوی پنتیوم تری برای اجرا نیاز داشته باشد اگر با جاوا بنویسید به سیستمی با سی پی یوی پنتیوم فایو نیاز خواهید داشت. سی پلاس از پدر خود سی نیز قویتر است زیرا نوشتن برنامه هایی با حدود چند میلیون خط کد با سی مثل افتادن در چاه ویل است. برای نمونه خود سیستم عامل ویندوز و حتی نرم افزار فتوشاپ با سی پلاس نوشته شده است. اینها را گفتم تا برای انتخاب دنبال قدرت زبان نباشید مخصوصا شمایی که مانند کم هوش یا بدون پشتکارید.زیرا س پلاس برای دادن اختیار کامل به شما ۳ تا ۵ سال زمان از شما میگیرد.خوب حالا چه کنیم.هر زبانی را برای کاری ساخته اند. اگر میخواهید برای اندروید یا سیستمهای پی سی بنویسید جاوا منتظر شماست. اگر برای ویندوز مینویسید سی شارپ .اگر نرم افزار تحت وب مینویسید سی شارپ نت.پایتون زبانی ساده نیست اشتباه نکنید.اولا سینتکس ساده ای دارد و ثانیا بسیاری از عملیات سخت از قبیل آزاد کردن خانه های حافظه یا تخصیص نوع داده را خودکار انجام میدهد پس کسی که پایتون را آسان میداند اصلا برنامه نویس نیست. پایتون زبان بسیار قدرتمندی است اما در ایران هنوز کاربردی آن چنان ندارد. پیشنهاد میکنم اگر میخواهید یک برنامه را در همه پلتفرم ها اجرا کنید بروید به سراغ اچ تی ام ال ۵ و سی اس اس و جی کوئری که بسیار ساده اند.برای اندروید بنویسید و بدون تغییر برای ویندوز پکیج کنید. سؤالی باشد در خدمتم.

  • این مقاله خیلی عالی بود ولی برای دوستانی که مثل من it کار می کنند میگم
    ۱-با هردو زبان می توان وب سرور ها رو تست کذد و گسترش داد به خوبی اما اگر این کار با c++ به خاطر سرعت بالاتر و باگ کم تر انجام منطقی تره
    ۲- استفاده از تکنولوژی cgi توی c++ مثل خود آزاری میمونه در حالی که توی پایتون برعکس
    ۳-با c++ نمی تونید اکسپلویت درست حسابی بنویسید نمی تونید دیفیس کنید ولی توی c++ میشه برای سخت افزار اکسپلویت های نابود کننده بنویسید

  • حسين زمانيان

    با سلام
    من وقتی ١۵ سالم بود تصمیم گرفتم برنامه نویس شم اول html رو یاد گرفتم بعد جاوا اسکریپت رو که بعد از مدت زمان زیادی روش کار کردن فهمیدم کار کردن باخاش برای بنده نسبتا سخته و تصمیم گرفتم به صورت حرفیه یادش نگیرم و ازش فقط به عنوان یه ابزار استفاده کنم
    بعد تصمیم گرفتم برای شروع کار زبان php رو به صورت حرفیه یاد بگیرم شی گرا رو توی این زبان یاد گرفتم الان در حد متوسط به بالا می تونم با زبان php /mysql برنامه بنویسم و تاحالا یک مسنجر و یک وبلاگ و یک فروشگاه و کلی پروژه کوچولو دیگه ساختم (بدون استفاده از کتاب خونه یا هرچیز دیگه ای فقط خود php )الان ١٧ سالمه و الان تصمیم دارم برم سمت برنامه نویسی موبایل می خواستم بدونم به نظر شما نیازه زبان دیگه ای هم برای امادگی مثل php یاد بگیرم یا کافیه و به سراغ یه زبان مخصوص برنامه نویسی موبایل برم اگه حالت دومه چه زبانی رو پیشنهاد می کنید
    (java,objective c, swift,…)

    • فرهاد دلیرانی

      سلام ،
      الان برنامه نویسی بیشتر برنامه های موبایل رو می توان به دو بخش تقسیم کرد ، یک – front end و دو back end
      front end همان اپی که در گوشی اجرا می شود و توی گوشی باهاش کار می کنیم
      back end قسمتی که توی سرور و جایی خارج از موبایل انجام می شود و همین طور ارتباط برقرار کردن با اپ

      الان بیشتر اپ های خوب back end دارند و بخش زیادی از کار اپ در خارج گوشی انجام می شود . مثل بازی کلش آو کلنز که همه عملیات ها در خارج از موبایل ماها انجام می شه ، یا اپ های برنامه ریزی شخصی که اطلاعات کاربر روی سرور ذخیره می شود و … . بیشتر اپ های خوب این بخش رو دارند ، که یکی از بهترین زبان ها برای این بخش PHP که بلدی و مشکلی نیست.

      ولی بخش دیگر که front end است کاملا فرق دارد . در front end باید شما برنامه ای رو بنویسید که روی گوشی هوشمند اجرا شود . می توان با زبان های مختلفی این کار را انجام داد مثل java , ++c , java script , objective-c , swift و …. .
      ولی بهترین کار این است که با زبان اصلی اون سیستم عامل کار کنید تا بتوانید از تمام توانایی های اون ابزار با راحتی بیشتر استفاده کنید.
      برای آندروید بهترین گزینه جاوا است.
      برای آی او اس بهترین چیز آبجکتیو سی و سویفت است . (سویفت زبانی بهتر است چون اپل به تازگی ارایه داده آن را و مسلما از نظر راحتی در استفاده و پشتیبانی از آبجکتیو سی پیشی خواهد گرفت)

      مثلا با سی پلاس پلاس یا سی شارپ هم می توان برای آندروید برنامه نوشت ولی دو مشکل است : یک – از همه ی چیز هایی که سایرین برای این پلتفرم ساخته اند نمی توانید استفاده کنید – دو – جاوا زبانی است که اگر ماشین مجازی اش روی یک دیوایس باشد مستقل از اینکه دیواس چه چیزی است رویش اجرا می شود ولی سی پلاس و … اینگونه نیستند و ممکن است برنامه ی شما روی بعضی از ابزارها اجرا نشود .

      • حسين زمانيان

        خیلی ممنون از توضیحات مفیدتون بهش نیاز داشتم
        ولی می خواستم نظر خودتون هم در غالب یه جمله با در نظر گرفتن بازار کار راحتی برنامه نویسی و مدت زمان پایان پروژه بدونم واقعا از راهنمایتون ممنوم

        • فرهاد دلیرانی

          تو شرایط الان ایران قضیه یکم پیچیدس نمی شه نظر قطعی داد ولی نظر شخصمی من آندرویده، آندروید درآمدش و درخواستش بیشتره و همین طور راحتی برنامه نویسی اش خیلی بیشتره و از خیلی جاها می تونی مشکلاتت را حل کنی و …. . برای آندروید هم بهترین چیز جاواست. جاوا هم یک زبان بسیار قوی و همه کارست که یکی از کاربرد های کوچکش اپ نوشتن برای آندرویده و دها کاربرد دیگر دارد.

  • سلام آقای جمالی.مطلب مفیدی بود.افتخار میکنیم که استاد TA ما شما بودید!

  • سلام

    ممنون از مطالبتون.

    لطفا منابع را با لینک مشخص به مطلب قرار بدین نه دومین سایت که مطلب توش بوده.

    تشکر

  • فرهاد دلیرانی

    به نظرم یک کم کم لطفی شده بود در مورد سی پلاس پلاس ! پایتون یک زبان اسکریپتی و سی پلاس پلاس اینگونه نیست ، که باعث می شه هر کدام کارکرد های متفاوتی داشته باشند ، به نظر من مانند مقایسه ی بنز با فراری است ،که هر کدام برای هدف خاصی طراحی شده و مقایسشون یک خورده سخته . به هر حال مطلب خوبی بود و استفاده کردم.

    • محمد جمالی

      کاملا حق با شماست !
      ولی به عنوان یک راننده غیر حرفه ای زمانی که پول زیادی برای خرید خودرو دارید هم فراری را در لیست دارید هم بنز !

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

نظر خود را بنویسید.

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *