یعنی با C#.Net میتوان ماشین حساب معمولی ویندوزی نوشت؟
سلام مجدد
یکی از دوستان چند وقت قبل از من این سوال عجیب را پرسید، در زیر در مورد برخی قابلیتها و خروجیها توضیح میدهم:
اینکه ما لفظ دات نت (نت بع معنی شبکه است) را داریم به این معنی نیست که دات نت فقط مخصوص اجرا در وب و شرایط خاص و شبکه و... است.
با زبانهای دات نتی از جمله #C میتوان خیلی ساده تر از گذشته و با حفظ قدرت برنامه های ساده دسکتاپی هم نوشت.
ضمن اینکه گسترده فعالیت بسیار بازتر است و با پشتیبانی های مایکروسافت بیشتر هم خواهد شد.
در واقع دات نت توانایی ارائه خروجی های زیر را دارد:
1- برنامه های ویندوزی-دسکتاپی
2- ویندوز سرویسها
3- برنامه های وبی از جمله طراحی سایت اینترنتی
4- وب سرویسها
یعنی این پروزه ها به صورت آماده و با فرمان New Project در دسترس هستند.
ضمن اینکه dll ها و کامپونت های کامپایلی به راحتی میتواند در انواع سخت افزارها و محیطها و ویندوزها (مثلاً بدون توجه به 32 بیتی یا 64 بیتی) اجرا شوند.
البته کارهای جزئی و خاص دیگری هم میتوان انجام داد که باز در رده 4 نوع فوق دسته بندی میشوند.
مثلاً:
- ساخت برنامه های ویندوزی تحت WPF به صورت چیدمان سه بعدی.(دسکتاپ و وب!!!)
(
یعنی داس که تقریباً فاقد گرافیک بود...
بعد ویندوز با TextBox و Button و... آمد که دو بعدی بود...
حالا برنامه های WPF میتوانند کنترلرها را در سه بعد چیدمان کنند.
مصلاً حتی فکر کارهایی هم که WPF میتواند انجام دهد را نمیتوانید داشته باشید!
برای درک انعطاف پذیری آن فرض کنید یک TextBox روی یک کره پهن کنید!!!!
یا یک فیلم را همانطور که بخش میشود در runtime مثل مثل یک صفحه نازک فلزی بتابانید!!!
و...
)
- کدنویسی معمولی و تلفیقی WPF برای Silverlight که محصولی جدید و به نوعی رقیب آینده Flash خواهد بود.
- ساخت و توسعه AddOn ها برای Office2007
- ساخت dll و توابع جدید برای خوراندن به SqlServer و استفاده از توابع به طور مستقیم در دستورات T-SQL خود SqlServer
(
این داخل هسته SqlServer اجرا میشود و خیلی با توابع داخلی برنامه تفاوت دارد و کسی که SQL بلد باشد متوجه میشود اضافه کردن دستی یک تابع جدید به توابع ثابت SQL میتواند تا چه حد مفید باشد
)
- طراحی بازی های رایانه تحت XNA برای ویندوز و کنسول XBox360 مایکروسافت.
- برنامه نویسی برای وسایل قابل حمل (از جمله موبایل) که مجهز به Microsoft WinCE باشند.
- بهره گیری از تکنولوژی LINQ برای انواع محصولات که کنترل بی نظیری روی دیتاهای حجمی دست ساز میدهد (
فوق العاده شبیه تفکر SQL است با ابن تفاوت که دیتاها از خود برنامه و در RAM هستند و دستورات کاپایل میشوند و ماهیتی String ندارند...
یک زمان برنامه نویسان مجبور بودند خودشات فایلها باز کنند و دیتاها را دستی بریزند و رکوردی و ترتیبی بخوانند... الآن با وجود بانکهای اطلاعاتی عملاً هیچ کس این کار را نمیکند...
با توصعه LINQ دیگر برای کار روی داده های حجمی هم کد خاصی نخواهید نوشت و درگیر 1+ و 1- نخواهید شد... مثلاً به راحتی با یک فرمان آرایه ای را مرتب میکند یا ماکسیموم و میانگینش را به دست می آورید و...
)
و...
سرعت و بازدهید #c کمتر است؟
سلام مجدد.
این ایراد و سوال هم خیلی مطرح میشود.
همه میپذیرند که سرعت دات نت کمتر از ++VC است ولی در واقع صد در صد چنین نیست!
دات نت برای ساخت برنامه بزرگ و چند ریسمانه و چند کاربره و شبکه ای روی رایانه های قوی بهینه شده است.
حتماً فکر میکنید رایانه قوی باشد که دیگر کاری ندارد؟
ولی صبر داشته باشید.
مثل سفر کردن با پای پایده و با ماشین و هواپیما میماند.
برای خرید نان از سرکوچه، راننده تا بخواهد ماشین بزرگ خود را روشن و از پارکینگ خارج کند و برود نان بخرد و برگدد و دوباره ماشین را پارک کند، در این شرایط بدون شک فرد پیاده 5 بار میرود نان میخرد و برمیگردد (حالا بیخیال صف نون وایی شوید!)
ولی اگر بخواهیم مصافتی 100 کیلومتری را برویم آنگاه سرعت و بازدهی ماشین مشخص میشود.
اجرای یک برنامه دات نتی هم شبیه همین موردها است.
شما یک برنامه کوچک دات نتی که درست کنید میبینید از نمونه مشابه ++VC خود کندتر بالا می آید، RAM سبیار بسیار بیشتری میگیرد و کندتر بسته میشود.
در واقع برنامه دات نتی که اجرا میشود کلی خدم و حشم هم لود میشود از جمله هسته CLR و امکانات runtime ان مثل "جمع اوری کننده حافظه هرز" و RAM بسیار بزرگتری از کد نیاز گرفته میشود...
در عوض مثلاً در زمان کار کرد برنامه و در مبنای زیاد و تولید و استفاده همزمان و چند ریسمانی هزاران شی و new سازی و نابود سازی با کیفیت بهتری انجام میشود.
به علت RAM بزرگ که در اول گرفته شده، تعامل با سیستم عامل برای هر یک new کوچک کاهش می یابد و ضمن اینکه "جمع ائری کننده حافظه هرز" اشیای قدیمی new شده و قابل استفاده مجدد را تشخیص داده و دوباره به مصرف میرساند و مدام حافظه را defragment میکند تا از تکه تکه شدن RAM جلوگیری شود.
در یک برنامه با حجم کار زیاد مثل یک سایت اینترنتی با هزاران request همزمان و کاربر آنلاین به راحیتی RAMسیستم میتواند تکه تکه شود و در حالی که RAM خالی موجود است ولی تکه تکه های کوچک است، رایانه با کمبود RAM برای درخواست حافظه های بزرگتر مواجه شود.
======
ضمن اینکه در سوی دیگر کدهای دات نت به IL کامپایل میشوند و IL توسط کامپایلر JITمخصوص همان سخت افزار و سیستم عامل مقصد کامپایل نهایی و بهینه ای به Native میشود...
این مطلب سرعت بالا آمدن اولیه برنامه را کند میکند ولی به علت انکه کد Native نهایی با توجه به قابلیتهای سخت افزار و در همان رایانه ساخته شده، بسیار سریع خواهد بود، شمن اینکه برنامه شما و یک Exe و dll مشخص و ثابت شکت به راحتی روی سیستم ها و ویندوزهای 32 و 64 از Intel و AMD اجرا شده و روی هر یک با حداکثر بهینه سازی توسط JIT اجرا میشوند.
=====
مطلب آخر اینکه دات نت شامل دستورات ساده و چندخطی و پیچیده و طولانی است...
دستور خواندن اطلاعات از یک دیتابیس خیلی ساده میتواند (DataAdapter1.Fill(DataTable1 باشد که به سرعت نوشته میشود و کند اجرا میشود!!!
یا میتواند استفاده از DataReader باشد که کد بیشتری میخواهد ولی بسیار سریعتر است.
پس هم روش با سرعت اجرای کند (و احتمالاً سریعتر در کد نویسی) داریم و هم روش پرسرعت در اجرا (و احتمالاً طولانی در کدنویسی) پس کسی مجبور نیست و اگر کسی واقعاً سرعت را میخواهد و حاظر از هزینه زمانی کدنویسی بیشتر آن را بپردازد، مشکلی وجود ندارد و کسی که به راحتی در چهار دکمه تابع Fill را استفاده میکند، جایی برای شکایت از سرعت هم ندارد!!!!
=====
به زودی به سوالات دیگر هم پاسخ خواهم داد.
بابا دات نت چیه برنامه نویس را تنبل میکند و از ذات عمل ادم چیزی نمیفهمد!
سلام
برای این افراد به شدت متاسفم، نمیخواهم بگویم فقط و فقط دات نت و لاغیر!
اصلاً بروید delphi کار کنید یا perl، من چیکاره بیدم!
ولی جمله فوق (در عنوان پست) فقط و فقط از سر نادانی است و افرادی خواهند گفت که عمرشان را در نوشتن برنامه که یک String بگیرد و انرا معکوس چاپ کند تلف میکنند! و نه از برنامه نویسی چیزی نمیدانند که هیچ، در دنیای امروز هم نیستند و در داس خوابشان برده! (با عرض پوزش و عضر خواهی از اساتید گرام)
=====
1)
آیا نوشتن دستورات if و for و switch و while و try و... در هر زبانی میتواند باعث فهم درک عمیق شود و در زبان دیگری عدم فهم و درک عمیق را حاصل کند؟
یعنی مسخره و احمقانه نیست اگر من بگویم، وقتی for را در VB می نویسیم ذات عالم هستی را متوجه میشویم ولی وقتی در java مینویسیم نه!!!
یا وقتی تابع memcpy را در ++VC استفاده میکنیم همه چیز را فهمیده ایم و تنبل هم نمیشویم ولی اگر تابع Marshal.Copy را در دات نت استفاده کنیم چیزی نمیفهمیم و تنبل میشویم!!!
=====
2)
باشد قبول توابع و کلاسس های آماده ادم را تنبل میکند...
خوب از این نوابغ باید پرسید چرا از توابع آمده در زبان برنامه نویسی دلخواهشان استفاده میکنند؟
زبان های vb و java و ++C و... سرشار از توابع و کلاسس ها و حتی ماکروهای آماده هستند...
نه افراط و نه تفریط.
اگر استفاده از کلاسس و توابع و کامپونت آماده صحیح نباشد پس استفاده از MFC و کل تکنتولوژِی COM و ActiveX و ATL و حتی API ها و SqlServer و MySql و Oracle و XML Parser ها و GZip و... و هزاران هزار ابزار آماده و اشتراک کد صحیح نیست.
یعنی اصولاً قانون جامع و معروف عالم برنامه نویسی یعنی "قابلیت استفاده مجدد از کد" کشک میشود.:18:
علم بسیار پیشرفت کرده در تمام جهات، کسی که میخواهد کارخانه خودرو سازی بزنید میتواند باید بفهمد که باید فولادش را از فولاد سازی بخرد و آلوینیوم را هم جدا و پلاستیک و روغن را از شرکتهای نفتی و ماده خام شیشه یعنی سیسلیس را از کارخانه های شیمیایی و سیم و قطعات الکترونیکی را از کارخانجات الکترونیک و پارچه و الیافش را از کارخانه های نساجی و... و... سیمان و آجر ساختمان را از از شرکتهای ساختمانی و... و...
اگر واقعاً کسی میخواهد وابسته به دیگران نباشد و خودش همه چیز را تولید کند باید راه مکینتاش را برود...
خودش سیستم عاملی جدید بسازد (بالاخره حتماً استفاده از امکانات Win و linux هم نوعی تنبلی است دیگر) و اصلاً با اسمبلی شروع کند و از سکتور صفر هارد شروع به کد نویسی کند.
=====
3)
بارها گفته ام باز هم برای مثال میگیم ... (گناه تکراری بودنش پای همانکه مرا مجبور به پست زدن در تاپیک کرد!)
مثلاً
- دات نت کلاسس 11 تقویم مختلف فرهنگ های جهانی را دارد از جمله هجری قمری و هجری شمسی...
- دات نت فضای نامی بزرگ شامل اکثر الگوریتم های مشهور رمز نگاری روز دنیال را دارد مثل Hash و SHA و DES و... و... (مثلاً فقط در مورد SHA نگارش های 1 و 256 و 384 و 512 را دارد.)
- دات نت دو کلاسس Stream ای برای فشرده سازی اطلاعات دارد از جمله GZip
- یک چند هزارتایی کلاسس دیگر هم دارد که حالا ولش کنید!!!
اگر استفاده از این کلاسسها تنبلی است، پس از دوستانی که این نظر را دارند بپرسید:
چند ماه و سال و دهه از عمرشان را میخواهند بگذارند تا تنبلی نکنند و خودشان فقط الگوریتم و فلوچارت چند مورد فوق را تهیه کنند آیا وقتشان به موارد جدیدتر و روزتر دنیا هم خواهد رسید؟
=====
4)
دات نت یک چندهزارتایی کلاسس و متد آماده برای حل مشکلات روز 2008 دارد، کسی اگر گمان میکند استفاده از اینها تنبلی است و باید خودش این کلاسس ها را درست کند، خوب چه مانعی دارد؟ مشکل کجا است؟
یعنی فکر میکنید در delphi میتوانید class تعریف کنید و وراثت بگیرید و اپراتورها را overload کنید ولی در دات نت نمیتوانید؟
در کل کسی مجبور به استفاده از این کلاسسها نیست، هر کس وقت اضافه دارد میتواند خودش کلاسس مورد نظر خودش را کدنویسی کند و استفاده کند و به کسان دیگر هم بدهد/ندهد.
در مجلسی بودم یک بنده خدای بازاری تهران که ماشین شخصی داشت، میگفت:
"... والا باور کنید اتوبوس و مترو خیلی بهتر از ماشین است، ما آروز داریم ماشین نداشتیم ..."
مارومیگی، چشمها بادکرده، سبیلها از بناگوش در رفته، حاج و واج مانده بودیم در این بشر! :18::31:به قول بروبچ شده بودیم علامت سوال! یک چیز تو مایه های این آقاهه :18: یا شاید هم این یکی :blink: و :wac: یا :eh:!
نمیدانم نداشتن ماشین هم آروز میخواهد؟ پس حتماً نداشتن class آماده هم آرزو میخواهد؟
جلل خالق از این بشر که هرچه فکر کنید درک رفتارش غیر ممکن است!
=====
بقیه موارد انشا ا... برای روزهای آینده.
قصد توهین و ناراحت کردن هیچ گروهی را نداشتم و نامهای زبانهای داخل پست هم کاملاً شانسی بود و جمیعاً موفق و پیروز باشید.