انجمنهای فارسی اوبونتو
کمک و پشتیبانی => انجمن عمومی => نویسنده: abdollah.m19 در 03 اردیبهشت 1394، 02:02 بظ
-
میدانیم زبان c++ همون زبان c است که یه سری ویژگیهای جدید مثل شی گرایی بهش اضافه شده . یعنی تقریبا همون زبان c است و چیزی از پلاس پلاس کم ندارد خوب حالا چرا برای نوشتن کرنل و برنامه های سیستمی وکلا برنامه های بسیار سطح پایین(اسمبلی) از c++ استفاده نمیشه و بیشتر از c استفاده میشه مثل کرنل یونیکس /لینوکس؟؟
-
یکی از مهمترین دلایلش میتونه این باشه که قبل از یونیکس c وجود نداشت. دنیس ریچی، کرانیگان و دوستان تصمیم به ساخت سیستمعامل یونیکس گرفتن و با مشکل نبود زبان مناسب مواجه شدن. برای همین شروع کردن به نوشتن زبان c تا بتونن با اون یونیکس رو بنویسن. به همین دلیل c زبان مرسوم و محبوب یونیکس و شبهیونیکسها شد
-
دلایل متفاوتی وجود داره(چرا c++ جایگزین c نمیشه؟) ولی چون مستقیما راجع به کرنل گفتی...
به نظرم:
زبان سی پلاس پیچیده تر از سی هست و کامپایلر کدهای پیچیده تری تولید میکنه و این روند توسعه رو دشوار میکنه.
و یک علتش هم overhead کتابخانه های استاندارد c++ که کامپایلر جداگانه پردازش میکنه
-
http://stackoverflow.com/questions/497786/why-would-anybody-use-c-over-c
بهتر نبود این سؤال در بخش برنامهسازی پرسیده میشد؟
-
لینوس توروالدز در جواب یه نفر که میگه بهتر نبود گیت رو با سیپلاس مینوشتی میگه:
*YOU* are full of bullshit.
C++ is a horrible language. It's made more horrible by the fact that a lot
of substandard programmers use it, to the point where it's much much
easier to generate total and utter crap with it. Quite frankly, even if
the choice of C were to do *nothing* but keep the C++ programmers out,
that in itself would be a huge reason to use C.
In other words: the choice of C is the only sane choice. I know Miles
Bader jokingly said "to piss you off", but it's actually true. I've come
to the conclusion that any programmer that would prefer the project to be
in C++ over C is likely a programmer that I really *would* prefer to piss
off, so that he doesn't come and screw up any project I'm involved with.
C++ leads to really really bad design choices. You invariably start using
the "nice" library features of the language like STL and Boost and other
total and utter crap, that may "help" you program, but causes:
- infinite amounts of pain when they don't work (and anybody who tells me
that STL and especially Boost are stable and portable is just so full
of BS that it's not even funny)
- inefficient abstracted programming models where two years down the road
you notice that some abstraction wasn't very efficient, but now all
your code depends on all the nice object models around it, and you
cannot fix it without rewriting your app.
In other words, the only way to do good, efficient, and system-level and
portable C++ ends up to limit yourself to all the things that are
basically available in C. And limiting your project to C means that people
don't screw that up, and also means that you get a lot of programmers that
do actually understand low-level issues and don't screw things up with any
idiotic "object model" crap.
So I'm sorry, but for something like git, where efficiency was a primary
objective, the "advantages" of C++ is just a huge mistake. The fact that
we also piss off people who cannot see that is just a big additional
advantage.
If you want a VCS that is written in C++, go play with Monotone. Really.
They use a "real database". They use "nice object-oriented libraries".
They use "nice C++ abstractions". And quite frankly, as a result of all
these design decisions that sound so appealing to some CS people, the end
result is a horrible and unmaintainable mess.
But I'm sure you'd like it more than git.
Linus
منبع (http://thread.gmane.org/gmane.comp.version-control.git/57643/focus=57918)
-
آره به همون دلایل ذکر شده توسط توروالدز و بقیه ی اساتید بود که چیزی مثل گو ساخته شد.
یعنی نمیشه یبار کن تامپسون و دوستان یجا سخرانی کنن کلی شوخی با سی++ نکنن :D
-
1-زبان C به نوعی زیرمجموعه C++ است و به نوعی تمام C را در خود دارد.پس چرا C قدیمی هنوز از رده خارج نشده؟اصلا c چه برتریها و
مزایایی نسبت به c++ داره؟؟
2-بطور کلی برای نوشتن چه برنامه هایی از C و برای چه برنامه هایی از C++ استفاده میشود؟؟یعنی بهتره
-
یک جواب معقولانه بدین.خود سازنده C++ گفته که C++ نسخه بهتر c است و تا به حال هیچ برنامه ای ندیده که در C بهتر از C++
نوشته شده باشه؟؟
-
هیچ بقّالی هم نمیگه ماست من ترشه! ولی تقریباً همهی بزرگان دنیای رایانه جمیعالقول متّفقن که سیپلاسپلاس زیان زشتیه، پیادهسازیهای بدی داره و ساختارش در حد خود سی قوی نیست.
-
دوستان با تجربه
میشه یک مقایسه مناسب راجع به زبان ها قرار بدن؟
یعنی اینکه کدوم زبان برای کدوم کاربرد کارایی بهتری داره؟
تا الان اونی که برای من مشخصه این هست که:
C برای توسعه کرنل و درایور نویسی کاربرد داره
R برای محاسباتی آماری ریاضی
Python برای NLP و ...
-
نه، پایتون یه زبان همهمنظورهاست. باهاش از اپلیکیشنهای دسکتاپ و موبایل برنامه نوشته میشه (بیشترین کاربردش هم همینجاست) تا بازیهای گرافیکی(civilization)، تا نرمافزارهای سمت سرور(bittorrent)، تا کارهای عددی و آماری(numpy)، تا هوش مصنوعی(scikit)، تا وب(django) و…
-
پس چراالان خود کامپایلر GCC که معروفترین کامپایلر اوپن سورسه و خود استالمن
اولین نسخشو نوشت الان در جدیدترین ورژنش به زبان C++ نوشته شده
-
چرا دوستانی که سخنی از کسی رو نقل میکنند منبع ارائه نمیکنند؟
-
به نظرم c++ بهترین طراحی رو داردبرخلاف نظر دوستان!
-
پس چراالان خود کامپایلر GCC که معروفترین کامپایلر اوپن سورسه و خود استالمن
اولین نسخشو نوشت الان در جدیدترین ورژنش به زبان C++ نوشته شده
GCC کامپایلر نیست، یک مجموعه از کامپایلرهاست که توش هم C داره، هم ++C، هم فورترن و…
چرا دوستانی که سخنی از کسی رو نقل میکنند منبع ارائه نمیکنند؟
استالمن: http://harmful.cat-v.org/software/c++/rms
توروالدز: http://harmful.cat-v.org/software/c++/linus
آدمهای معروف دیگه: http://harmful.cat-v.org/software/c++/coders-at-work
-
میدانیم زبان c++ همون زبان c است که یه سری ویژگیهای جدید مثل شی گرایی بهش اضافه شده . یعنی تقریبا همون زبان c است و چیزی از پلاس پلاس کم ندارد خوب حالا چرا برای نوشتن کرنل و برنامه های سیستمی وکلا برنامه های بسیار سطح پایین(اسمبلی) از c++ استفاده نمیشه و بیشتر از c استفاده میشه مثل کرنل یونیکس /لینوکس؟؟
هر زبانی برای کاری ساخته شده و بسته به سن و عمر یک زبان و کاربردش میتونه محبوبیت بیشتر یا کمتری داشته باشه. شاید یکی از دلایل اینه که اولین استاندارد Cpp حدودا تا سال ۱۹۹۸ زمان برد، درحالیکه پروژهایی مانند گنو، پیش از این کار خودشون رو با زبانی مانند سی شروع کرده بودند؛ یا مثلا، کرنل لینوکس در ۱۹۹۱ اولین نسخه خودش رو ارائه داده بود (ویکیپدیا).
بهنظر من، Cpp زبانی بسیار پیچیدست، یادگیری اون مشکله و برای پروژههای بزرگ مناسبه، مثلا پروژههایی که بیش از ۱۰ برنامهنویس داره؛ در اینجا چاره کار استفاده از زبانهای بینظیری مثل Cpp هست تا به راحتی بتونن گروهی روی یک پروژه کار کنند. بهطور نمونه، هم از سی و هم از سی++ در NASA JPL استفاده میشه؛ در International Space Apps Challenge ناسا که بصورت یک رویداد سالانه اجرا میشه امکان استفاده از فریمورک Qt رو به مشارکتکنندگان دادند که خوب مختص سی++ هست. در محصولات ادوبی یا اتودسک هم بیشتر از زبان سی++ استفاده میکنند - با کتابخانههای متفاوت - اما این پروژهها محدود به یک زبان نیستند.
موضوع اینجاست، وقتی کسی میتونه یک برنامهای رو با زبان سی به راحتی بنویسه - که یادگیری سادهتری نسبت به سی++ داره، در زمان کمتر یک پروژه رو میتونن اجرا کنند که بههمانسان سودآوری بالاتری داره -، چرا باید وقتش رو روی پیادهسازی شیگرا بزاره؟ من خودم با Cpp کار میکنم (کارآموز هستم)، اگر این شناخت و تفاوت زبانها رو پیشتر میدونستم، شاید با سی کار میکردم. وقتی میتونن یک کرنل یا برنامه ایمکس، یا گیت، گیمپ یا پیجین رو با C بنویسن، چرا باید خودشون رو درگیر انجام کارهای اضافه در سی++ کنند؟ اگرچه سی یک زبان سطح سیستم معرفی شده، اما وقتی توانایی انجام کارهای موردنظر رو با این زبان دارند، چرا انجام ندهند و وقتشون رو صرف یادگیری و اجرا با زبان دیگه (نه لزوما سی++) بکنند؟ اما خوب یکی هم اینقدر حرفهای میشه که از روی علاقه میاد یه سیستمعامل رو با سی++ پیاده میکنه (BeOS). کسانی هم هستند که کارهای کوچکی رو مانند Stardict یا چغوک رو با سی++ پیاده میکنند.
به نظر من مهم این نیست که چرا یک زبان رو به یک زبان دیگه ترجیح میدن، مهم اینه که به هدفی که دارن میرسن و به درستی اجراش میکنند.
-
لینک (http://harmful.cat-v.org/software/c++/coders-at-work)ی که آقا دانیال اشاره کردند خیلی جالب بود.
-
GCC کامپایلر نیست، یک مجموعه از کامپایلرهاست که توش هم C داره، هم ++C، هم فورترن و…
دانیال جان به نظرم منطور اون دوستمون پیاده سازی اون کامپایلرا بود.هرچند که نمیدونم آیا همه ی کامپایلرای موجود تو gcc رو با سی پلاس پیاده سازی کردن یا نه.
استالمن: http://harmful.cat-v.org/software/c++/rms
توروالدز: http://harmful.cat-v.org/software/c++/linus
آدمهای معروف دیگه: http://harmful.cat-v.org/software/c++/coders-at-work
دانیال جان خودتم میدونی که این بزرگواران اساسا با شی گرایی مشکل دارن. به نظر شما این قضیه بیشتر به سلیقه ی اون آدما برنمیگرده؟ چون بهرحال هرکدوم از اونا حداقل یه کار بزرگ انجام دادن و چون سلیقه و تکنیکشون چیزی مخالف با شی گرایی بوده احتمالا هیچوقت دیگه باهاش موافق نخواهند بود. مث اینه که شما به مورینیو بگی که شیوه ی بازیتو عوض کن. اونم هزارتا دلیل میاره که چون من ۱۰ ساله با این روش خیلی موفق بودم دلیلی نمیبینم که روشمو عوض کنم
-
این موضوع همیشه بوده بهتره دنبالش نباشید چون هرکسی براساس تجربهٔ خودش نظر میده و دلیلی برای اینکه شما هم از اون روش استفاده کنید من به شخصه نمیبینم پس بهتره با مقایسهٔ زبونها وخت خودمون رو هدر ندیم و بریم سراغ موضوعهای فنیتر که کجا و کی باید از چه زبونی استفاده کنیم. تا اونجایی من اطلاع دارم از زبون سیپیپی بیشتر در برنامهنویسی جامع استفاده میشه و از زبان سی در موارد تخصصیتر و زمانی که سرعت و مجموعه ویژگیهای زبان اهمیت داره. البته شاید از سیپیپی در برنامههای تخصصی هم استفاده بشه ولی گمونم بهاندازهٔ سی فعلاً باهاش کار انجام نشده و هنوز بیشتر شرکتها و حتی افراد سعی میکنن به سی تکیه کنن و سراغ سیپیپی نرن البته من علت اصلی این کار رو نمیدونم پس نمیتونم نظر مطلق بدم. با هرچی حال میکنید از همون استفاده کنید خیلی هم جواب داده و در آینده هم خواهد داد ;D
-
برای پروژه های حساس و مهم به این راحتی هم نیست که توسعه دهنده طبق تجربه یا سلیقه ای یک ابزار رو انتخاب کنه!
c برای پروژه های سطح پایین تر یعنی برای پروژه هایی که به سخت افزار نزدیک تر باشد مناسب تره و c++ برای پروژه های که اهمیت چندانی برای سخت افزار قائل نیستیم مناسب تر است.
علت فنی: کامپایلر برای c++ کد پیچیده تر یا بیشتری تولید میکند به خاطر ویژگی های اضافی که به این زبان اضافه شده و این ویژگی ها برای پروژه های سطح بالا یا در سطح سیستمی مفید خواهد بود چون روند تولید رو بهبود و سرعت می بخشد. اما در سطح سخت افزاری گاهی نیاز داریم با ساختار و کارکرد cpu و کدهای اسمبلی درگیر شویم و در اونجا یک خط کد اضافه مهم خواهد بود برای همین زبان سی بهترین راه حل خواهد بود برای کمترین overhead و .... پس زبان سی میتواند انتخاب مناسبی برای توسعه کرنل باشد و برنامه هایی مثل بازیهای کامپیوتری و برنامه های سیستمی زبان c++ انتخاب بهتری خواهد بود.
هر چند!! با تجربه ها محدودیتی در استفاده از هر کدامیک از این زبانها رو ندارن! یعنی در واقع ممکن است c++ توسعه بدن اما با سینتکس و تفکر ساختار c این کار رو انجام بدن.
-
ببخشید این سوال رو می پرسم
الان اگه کسی بخواد شروع ب یادگیری زبان کنه
از C شروع کنه یا ++C ?
ممنون میشم دلیل هم بیارید برای نظرتون.
-
ببخشید این سوال رو می پرسم
الان اگه کسی بخواد شروع ب یادگیری زیان کنه
از C شروع کنه یا ++C ?
ممنون میشم دلیل هم بیارید برای نظرتون.
در محیطهای آکادمیک از سی شروع میکنن معمولاً، چون در سطخ پایینتری کارها رو انجام میده و کاربر دقیقاً متوجّه میشه چه اتّفاقاتی قراره بیفته.
-
ببخشید این سوال رو می پرسم
الان اگه کسی بخواد شروع ب یادگیری زیان کنه
از C شروع کنه یا ++C ?
ممنون میشم دلیل هم بیارید برای نظرتون.
در محیطهای آکادمیک از سی شروع میکنن معمولاً، چون در سطخ پایینتری کارها رو انجام میده و کاربر دقیقاً متوجّه میشه چه اتّفاقاتی قراره بیفته.
ممنون
خب اگه مستقیم از سی پلاس شروع بشه / ایا چیزی از قلم میافته ؟
ایا ممکنه طرف مجبور بشه بگرده و کد سی رو مرور کنه
و اگه هدف جاوا باشه چی؟ ایا سی پلاس و بعد جاوا
یا سی و بعد جاوا؟
ممنون
-
هیچ کس حق نداره c++ رو به خاطر شی گرایی نقد کنه .تفاوت های c با c++ فقط تو شی گرایی نیست
c++ مجبورتون نمیکنه از شی گرایی استفاده کنین.برعکس جاوا و c#.با این حال برای کسایی که از شی گرایی استفاده میکنن
کامل ترین پشتیبانی رو از شی گرایی داره(در حد جاوا)
میگم ای کاش به جای مقایسه زبان های برنامه نویسی ،به مقایسه سبک های برنامه نویسی می پرداختین
ایا شی گرایی خوبه؟واقعا سرعت رو افزایش میده یا باعث پیچیده شدن پروژه میشه؟یا مثلا سبک های دیگه رو نقد میکردین
-
هر کدوم کاربرد خودش رو داره
برنامه ای که شما میتونی در عرض 3 ماه با c++ پیاده سازی کنی در عرض یک سال هم با سی نمیشه پیاده سازی کرد
در جایی هم برعکس مثلا شما وقتی در سطح خیلی پایین کار میکنی و بیت بیت کد ها مهمه و صفر و یک ها برات مهمه و خودت تو مغزت مثل یک سی پی یو باید کد ها رو برسی کنی سی به دلیل سادگیش کاربردش بیشتره . البته خوب اسمبلی از این نظر خیلی بهتره از سی ولی اون دیگه خیلی خیلی کار رو طولانی میکنه و در پروژه های کوچیک ازش استفاده شده ولی چیز بزرگی مثل کرنل لینوکس رو همون سی مناسبشه و بعدا تغیر دادنش هم ساده تره .
به نظر من به شخص و پروژه مربوط هست زبان و نمیشه گفت کدومش بهتره یا کدوم بدتره