PDA

View Full Version : سوال: آیا c# هیبریدی است؟



fateme_abdi
چهارشنبه 21 مهر 1395, 00:16 صبح
سلام تو نت خوندم ک سی شارپ زبان هیبریدیه ولی شی گراس...مگه برنامه نویسی هیبریدی جوری نیست ک هرطور بخوایم بنویسیمش؟
تازه وقتی فقط وابسته به پلتفرمای مایکروسافته چطوری میتونه با زبونای دیگه سازگار بشه؟
راستی خونده بودم باهاش میشه موتور بازی ساز یونیتی ساخت ...میشه ساخت ولی بازی فقط تحت دات نت باید باشه دیگه درسته؟نمیشه برای اندروید ازش استفاده کرد؟

Mani_rf
چهارشنبه 21 مهر 1395, 11:19 صبح
تا جایی که من میدونم #C به خودی خود هیبرید و نیتیو نیست!
همونطوری که خودتون گفتید #C وابسته به فریم ورک دات نت هست و نمیتونه این خاصیت ها رو داشته باشه. از سوی دیگه هدف از #C این نبوده.

ولی
یک پروژه به نام Mono برای #C تعریف شد که تا حدی این قابلیت ها رو به اون اضافه کنه. برای مثال شما با Xamarin که با همین پروژه Mono پیاده سازی شده میتونید برای همه پلتفرم های موبایل برنامه بنویسید اما باید به صورت Mono بنویسید نه به سبک #C. وقتی که از Mono استفاده میکنید دیگه از همه کتابخانه های قدرتمند و کامل دات نت خبری نیست و بیشتر کتابخانه های عمومی مثل System رو در اختیار دارید و برای مثال اگر بخواید با یک فایل کار کنید خبری از System.Io نیست و باید از روشی که برای Mono تعریف شده استفاده کنید.
و اما درباره یونیتی؛ بله شما میتونید کد نویسی یونیتی رو به زبان #C و در محیط ویژوال استودیو انجام بدید و علاوه بر اون دیباگ رو هم به راحتی انجام بدید. یونیتی هم داره از #C به صورت منونو استفاده میکنه و این به این معنیه که شما فقط دارید از سینتکس و قواعد #C استفاده میکنید نه از کتابخانه های اون. با یونیتی چه به زبان جاوا کد بنویسید و چه به زبان #C میتونید خروجی رو تقریبا برای همه سیستم عامل ها از جمله ویندوز، مک، اندروید، لینوکس، تایزن، ps4 , ps3 و... بگیرید.

fateme_abdi
پنج شنبه 22 مهر 1395, 17:47 عصر
تا جایی که من میدونم #C به خودی خود هیبرید و نیتیو نیست!
همونطوری که خودتون گفتید #C وابسته به فریم ورک دات نت هست و نمیتونه این خاصیت ها رو داشته باشه. از سوی دیگه هدف از #C این نبوده.

ولی
یک پروژه به نام Mono برای #C تعریف شد که تا حدی این قابلیت ها رو به اون اضافه کنه. برای مثال شما با Xamarin که با همین پروژه Mono پیاده سازی شده میتونید برای همه پلتفرم های موبایل برنامه بنویسید اما باید به صورت Mono بنویسید نه به سبک #C. وقتی که از Mono استفاده میکنید دیگه از همه کتابخانه های قدرتمند و کامل دات نت خبری نیست و بیشتر کتابخانه های عمومی مثل System رو در اختیار دارید و برای مثال اگر بخواید با یک فایل کار کنید خبری از System.Io نیست و باید از روشی که برای Mono تعریف شده استفاده کنید.
و اما درباره یونیتی؛ بله شما میتونید کد نویسی یونیتی رو به زبان #C و در محیط ویژوال استودیو انجام بدید و علاوه بر اون دیباگ رو هم به راحتی انجام بدید. یونیتی هم داره از #C به صورت منونو استفاده میکنه و این به این معنیه که شما فقط دارید از سینتکس و قواعد #C استفاده میکنید نه از کتابخانه های اون. با یونیتی چه به زبان جاوا کد بنویسید و چه به زبان #C میتونید خروجی رو تقریبا برای همه سیستم عامل ها از جمله ویندوز، مک، اندروید، لینوکس، تایزن، ps4 , ps3 و... بگیرید.


پس با این توصیفات تو ویکی پدیا اشتباه نوشته که جزو ویژگی هاش هیبریدی بودنشه و با وجود این پروژه ی mono بازم نمیشه بهش گفت هیبریدی.خیلی ممنون از پاسخ کامل شما

c0mmander
پنج شنبه 22 مهر 1395, 19:46 عصر
توضیحات Mani_rf (http://barnamenevis.org/member.php?81144-Mani_rf) کاملا کافی بود. اما من فکر میکنم که این سوالات شما بیشتر بخاطر منبع اطلاعاتیتون پیش میاد.

به عنوان مثال این لینک (https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) معرفی سی شارپ از ویکیپدیا هست. هیچ کجا به هیبرید بودن این زبان اشاره ای نشده. بله توسعه پذیر بودن اپلیکشن ها بصورت کراس پلتفرم مطرح هست.

ببیند در مثال xamarin که بر پاییه mono پیاده سازی شده. الان امکان کد نویسی بصورت نیتیو برای برنامه های اندروید و ios کاملا فراهم هست. هیبرید بودن از هداف وجودی سی شارپ نبوده اما با توجه به شرایط موجود ماکروسافت سعی کرده با تغییر سیاست های خودش امکان توسعه در فضای باز رو برای توسعه دهندگان و برنامه نویسان فراهم کنه. این باعث شده که C#‎‎ با استفاده از ابزار ها و کتاب خونه های مخصوص در محیط های دیگه بتونه خروجی داشته باشه. اما دیگه خبری از تمام کتاب خونه های .net نیست بلکه بخش های از .net فقط پیاده سازی شده. عملا این سبک کدنویسی داخل هر پلفرم با توجه به life-cycle برنامه در اون محیط (با توجه به تجربه شخصی خودم بیشتر از میحط توسعه دهندگی و sdk ها و منابع اون محیط) برنامه نویسی رو از دید سی شارپ انجام داد.

fateme_abdi
شنبه 24 مهر 1395, 19:32 عصر
توضیحات Mani_rf (http://barnamenevis.org/member.php?81144-Mani_rf) کاملا کافی بود. اما من فکر میکنم که این سوالات شما بیشتر بخاطر منبع اطلاعاتیتون پیش میاد.

به عنوان مثال این لینک (https://en.wikipedia.org/wiki/C_Sharp_(programming_language)) معرفی سی شارپ از ویکیپدیا هست. هیچ کجا به هیبرید بودن این زبان اشاره ای نشده. بله توسعه پذیر بودن اپلیکشن ها بصورت کراس پلتفرم مطرح هست.

ببیند در مثال xamarin که بر پاییه mono پیاده سازی شده. الان امکان کد نویسی بصورت نیتیو برای برنامه های اندروید و ios کاملا فراهم هست. هیبرید بودن از هداف وجودی سی شارپ نبوده اما با توجه به شرایط موجود ماکروسافت سعی کرده با تغییر سیاست های خودش امکان توسعه در فضای باز رو برای توسعه دهندگان و برنامه نویسان فراهم کنه. این باعث شده که C#‎‎‎‎ با استفاده از ابزار ها و کتاب خونه های مخصوص در محیط های دیگه بتونه خروجی داشته باشه. اما دیگه خبری از تمام کتاب خونه های .net نیست بلکه بخش های از .net فقط پیاده سازی شده. عملا این سبک کدنویسی داخل هر پلفرم با توجه به life-cycle برنامه در اون محیط (با توجه به تجربه شخصی خودم بیشتر از میحط توسعه دهندگی و sdk ها و منابع اون محیط) برنامه نویسی رو از دید سی شارپ انجام داد.



خیلی ممنون از توضیحات کامل شما.من چون دارم برای درس طراحی زبانهای برنامه سازی در مورد سی شارپ از منبع های مختلف تحقیق می کنم و به این لینک برخوردم:http://www.webhostingtalk.ir/showthread.php?t=23138
این سوال برام پیش اومد.راستی اینکه c# نتونه از همه ی بخش های .net استفاده کنه قدرتشو کم نمی کنه؟اینجور که من تا حالا دستگیرم شده میشه گفت اگه کسی بخواد بین c# و جاوا یه زبان انتخاب کنه جاوا بهتره چون هم راحت میشه باهاش اندروید نوشت هم دسکتاپ برای پلت فرمای مختلف

mrprestige
شنبه 24 مهر 1395, 21:17 عصر
سلام وقت بخیر . در خصوص سوالتون فرمودید " #C نتونه از همه بخش های net. استفاده کنه " منظورتون کدوم بخش هاست؟ . و در قسمت دوم فرمایشتون اینکه درسته چون جاوا یه زبان Cross Platform هست که شما حتی میتونید با استفاده از این زبان سیستم های امنتی خانه ها ، روتر ها ، کارت های اعتباری ، دستگاه های خودپرداز و ... کدنویسی کنید نه فقط اندروید . با این همه تفاصیل #C یه چیز دیگس .

Mani_rf
یک شنبه 25 مهر 1395, 15:10 عصر
خیلی ممنون از توضیحات کامل شما.من چون دارم برای درس طراحی زبانهای برنامه سازی در مورد سی شارپ از منبع های مختلف تحقیق می کنم و به این لینک برخوردم:http://www.webhostingtalk.ir/showthread.php?t=23138
این سوال برام پیش اومد.راستی اینکه C#‎‎‎‎ نتونه از همه ی بخش های .net استفاده کنه قدرتشو کم نمی کنه؟اینجور که من تا حالا دستگیرم شده میشه گفت اگه کسی بخواد بین C#‎‎‎‎ و جاوا یه زبان انتخاب کنه جاوا بهتره چون هم راحت میشه باهاش اندروید نوشت هم دسکتاپ برای پلت فرمای مختلف

#C فقط یک سینتکسه که به شما میگه برای رسیدن به چه هدفی کد رو به چه شکلی بنویسید.. قدرت زبانی که تفسیر و اجرا میشه مثل #C به کتابخانه هایی برمیگرده که میشه ازش استفاده کرد، یعنی قبل از شما یک تیم نشسته و یکسری کتابخونه بزرگ و همه چیز تموم نوشته که شما بیشترین کارهای ممکن رو با کمترین کدهای ممکن انجام میدید( و اسمش رو گذاشته Net Framework.) . وقتی که برای ویندوز برنامه مینویسید بجای این که مستقیم API سیستم عامل رو صدا بزنید دارید از کدهایی که تیم مایکروسافت براتون نوشته استفاده میکنید. این وسط #C فقط و فقط زبان واسط شما با کتابخونه هاست و نه چیز دیگه.

سوال: #C بهتر و قوی تر است یا VB.Net؟
جواب: هیچ برتری به هم ندارند.
چرا که هردوی اونها دارن از کتابخونه های مشترک استفاده میکنن و فقط روش کد نویسیشون متفاوته. پس هیچ برتری یا ضعفی فنی وجود نداره. مابقی چیز ها برمیگرده به سلیقه برنامه نویس ها.

سوال: جاوا بهتر وقوی تر است یا #C؟
جواب: کجا؟ روی سیستم عامل ویندوز قطعا #C. روی سیستم عامل لینوکس قطعا جاوا.
بزرگترین برتری زبان های برنامه نویسی ماکروسافت یکپارچه بودن اونهاست. ولی خب خیلی هم انگیزه این رو نداشته که این یکپارچه بودن رو برای سیستم عامل های دیگه توسعه بده.

درسته جاوا روی (همه نه)؛ بیشتر سیستم عامل ها اجرا میشه، ولی برنامه های نوشته شده با جاوا روی ویندوز معمولا عملکردی به خوبی برنامه های .Net روی ویندوز ندارند. دلیل اون هم خیلی مشخصه. وقتی شما یه برنامه جاوا رو روی ویندوز اجرا میکنید اول باید Java VM رو نصب کنید. یعنی برنامه داره روی یک Virtual machine اجرا میشه نه مستقیما روی ویندوز. اگر بیشتر دقت کرده باشید فایل اجرایی یک سری از برنامه های ویندوزی جاوا پسوند .jar دارند و نه .exe . جاوا مفهوم واقعی کراس پلتفرم رو نداره چون خروجی مناسب با ویندوز نمیگیره کاری که تنها ++C انجام میده و برای هر سیستم عاملی متناسب با همون کامپایل میشه. تفاوت sun و microsoft اینجاست که اولی دوست داشته برای ویندزو مبدل ارائه بده و دومی چنین سیاستی نداشته.

شما زمانی که جاوا بلدید میتونید برای اندروید برنامه بنویسید چون اندروید بر پایه و برروی هسته لینوکس نوشته شده. هرچند اگر فکر میکنید که جاوایی که برای نوشتن اندروید و دسکتاپ استفاده میشه یکسانه سخت در اشتباهید! میتونم بگم که تقریبا فقط سینتکس مشابه دارند و نه چیز دیگه.
و در آخر این که شما اگر سینتکس #C رو بلد باشید جاوا یادگرفتن براتون نه سخته نه خیلی زمانبر چون شباهت ساختاری و قوانین به شدت یکسان دارند. والبته برعکس

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

mrprestige
یک شنبه 25 مهر 1395, 18:26 عصر
ضمن تشکر از توضیحات کاملا جامع جناب Mani_rf (http://barnamenevis.org/member.php?81144-Mani_rf) ، بنده اصلا با جاوا کار نکردم ولی ولی توی مقاله ای که داشتم میخوندم به این نتیجه رسیدم اوج قدرت جاوا تو پروژه های Enterprise هستش که تا دات نت بخواد یه Solution واسه پروژه های Enterprise بده مدت ها طول می کشه.تو پروژه هایی که transaction ها زیاد هستش دات نت به هیچ وجه نمی تونه پاسخ گو باشه برای همین از پلت فرم جاوا استفاده می کنن. مثل بانک ها، بیمه ها، سیستم های رزرو بلیط که در ساعت بالای 1000 تا transaction رخ می ده . جاوا تقریباً تمام function های C رو پشتیبانی می کنه چون خودش اساسا با C++ , C نوشته شده. ولی باز به عقیده من سی شارپ برنامه نویسی مبتنی بر کامپوننت رو حمایت کرده و گزینه ای مناسب برای نوشتن برنامه های توزیع شده وب هست . نمی تونیم بگیم ویندوز تنها سیستم عاملی هست که سی شارپ با آن در ارتباط هست بلکه پر استفاده ترین اونهاست . سی شارپ و جاوا هر دو از زبان سی و سی پلاس پلاس الهام گرفته و مشتق شدند .سی شارپ بر پایه .NET گسترش داده شده و یکی از انتخابهای اصلی برای توسعه برنامه های کاربردی .NET هست .به طور خلاصه c# زبانی از نظر مفهومی شبیه C ، از نظر قدرت مانند C++ و یک فیل قوی هیکل همچون جاوا هست . ولی با نظر جناب Mani_rf (http://barnamenevis.org/member.php?81144-Mani_rf) موافقم باید نیازمون در چه چیزی هست به عنوان مثال آیا کدنویسی با #C این نیاز رو برطرف میکنه یا java . ولی در کل به طور خلاصه عرض کنم اصولن یادگیری اولین زبان زمان بیشتری میخواد تا شما با اصول برای اولین بار آشنا شی. شی گرایی رو درک کنی و ...اما زمانی که این مفاهیم خوب جا افتاد و برنامه های بزرگ باهاشون نوشتی تجربه کمکت میاد. اونوقت پرش به یک زبان دیگه میشه یادگیری سینتکسش (که چند ساعت زمان میبره تا بخونیش و نهایتن چند روز زمان می بره تا بهش اخت بشی) بعلاوه یادگیری کتابخانه هاش! که این قسمت اصلیه کاره. کتابخانه های این زبان ها حجیم هستند و بعضی کارها تو هر زبانی قلق خودشو داره (Programming Language Idioms).

fateme_abdi
چهارشنبه 28 مهر 1395, 13:12 عصر
عالی بود ممنون خیلی کمک می کنه این اطلاعات