<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Ali Salimi C</title><link>https://virgool.ir/feed/@ali.slm.1331</link><description>علاقه مند به دنیای دیجیتال</description><language>fa</language><pubDate>2026-11-12 01:22:03</pubDate><image><url>https://files.virgool.ir/upload/users/616106/avatar/lK7oHq.jpg</url><title>Ali Salimi C</title><link>https://virgool.ir/@ali.slm.1331</link></image><item><title>فیبرنوری آسیاتک  استان کرمانشاه</title><link>https://virgool.ir/@ali.slm.1331/فیبرنوری-استان-کرمانشاه-tchifqbt6tif</link><description>من علی سلیمی هستمامروز که  نوشتن این متن رو شروع کردم  13 فروردین 1403 هستمن سرپرست پروژه فیبر نوری آسیاتک (FTTH) در استان کرمانشاه هستم با وظایفی گوناگون.دوست دارم تجربیاتی که طی این پروژه داشتم به صورت خیلی کوتاه و خلاصه با شما هم در میان بزارم.خیلی خوشحالم که استان کرمانشاه جز یکی از اولین استان های هست که به فیبر نوری  مجهز میشه.فیبرنوری آسیاتک استان کرمانشاهبرای منی که حداکثر از سرعت ADSL حدودا 8 MegaBit استفاده میکنم  دیدن سرعت 1000 MegaBit فیبرنوری خیلی دور از ذهن است. به همین دلیل وجود چنین سرعتی  برای استان محرومی مثل کرمانشاه یک نقطه عطف برای ایجاد مشاغل هایتک میدونم.برای من و قشر جوانی که تا حدودی از دنیای مجازی استفاده میکنیم این قضیه خیلی خوشحال کنندس ولی برای عده ای از مردم با فرهنگ های متفاوت این پروژه زیاد جذاب نبوده و در بیشتر موارد باعث آزرده خاطر شدن اهالی و مردم میشودبه یاد دارم که در روز های سرد زمستان با آب و هوایی سرد و بارانی تیم حفاری مشغول کار بودعده ای از مردم شریف کرمانشاه با فراهم کردن چایی یا چاشت های متفاوت از گروه پذیرایی میگردند و به نحوی از پیشبرد پروژه خوشحال بودند . اما افراد زیادی هم بودند که طور دیگری می اندیشیدند .عدهای از مردم بابت کنده شدن کوچه یا محله شان ناراحت بودند و هنگام عبور از کنار گروه به اصطلاح کامنت های منفی می دادندگروه دیگری بر این باور بودند که دولت به جز خرابکاری کار دیگری نمی کند و این کنده کاری درون محله هیچ وقت ترمیم نمیشود .افرادی هم بودند که از نصب شدن کابینت های مربوطه در محله حراس داشتند و سعی می کردند به نحوی مانع کار ما باشند - حتی در مواردی به خانه هایی که نزدیک کابینت ها بودند اطلاعات غلط در مورد خطرناک بودن کابینت تا فروش نرفتن ملک گفته میشد.طیف وسعی از مردم که شامل پیر و جوان  تا  بی سواد و تحصیل کرده مصرانه معتقد بودند این پروژه ربطی به اینترنت ندارد و فقط برای شنود اهالی و اهداف امنیتی میباشدقسمت دیگری از مردم هم با نصب FAT BOX در نزدیکی خانه شان مشکل داشتند و به سختی مقاومت می کردندفیبرنوری آسیاتک استان کرمانشاهنکته عجیبی که درکش برام سخت هست اینه که هیچ وقت فکر نمیکردم مردم اینقدر نسبت به تکنولوژی های جدید گارد داشته باشند - به یاد دارم در یکی از محله ها شخصی از خانه بیرون آمد و با چهره نگران و مضطرب از من پرسید &#34;دیگه تموم شد هرکاری که در خانه انجام دهیم رسد میشه&#34; بعد از کلی غر زدن در مورد پروژه بالاخره خسته شد . من هم با حوصله از سیر تا پیاز قضیه رو براش توضیح دادم. وقتی فهمید که بازار شایعه پراکنی متاسفانه در کشور خیلی داغ و پرطرفداره از حرف های منفی که زده بود پشیمان شد و گفت &#34;شایعه پدر ما ایرانی ها را در آورده&#34; و در آخر گفت  &#34;یه زمانی هم مردم از لوله کشی آب و برق  حراس داشتند&#34; .  نکته اینجاست که عده زیادی از مردم شایعه هایی که در اینستا و تلگرام میبینند سریع باور کرده  و خلاف همون شایعه هم سریع قبول میکنند - میخوام بگم همه چیز رو سریع باور میکنند هرچی که باشد خوب یا بد - اشتباه یا درست.اصلی ترین مشکل جامعه پذیرفتن کورکورانه شایعه ها است.مشکلات به اینجا ختم نمی شد یکی از کامنت هایی که همیشه در حال شنیدن اون هستیم اینه که  &#34; آقا زحمت شما بی فایدست چون همه این ها در سریع ترین زمان ممکن دزدیده میشوند &#34; . طبق معمول ما به حرف هایی که می شنیدیم توجه نمی کردیم تا اینکه  در یکی از محله ها حدود 14 روز از شروع فعالیت گذشته بود که متوجه شدم تعدادی از میله های محافظ FAT BOX ها به سرقت رفته به سرعت به نقطه گزارش شده رفتم و دیدم بله با دقت و حوصله و  آرامش کامل تعدادی از میله های محافظ داکت به سرقت رفته .دزدیده شدن تجهیزات فیبرنوریاون لحظه از دیدن این صحنه واقعا بریده شدم و احساس کردم تمام این فعالیت ها در آب و هوای سرد و زمستانی  آب در هاون کوبیدن بوده - کاری نمیشه کرد - از گروه خواهش کردم تا دوباره میله های جدیدی آورند و نصب کنند - گزارش سرقت به پلیس داده شد ولی چه میشه کرد &#34;توی انبار کاه سوزن پیدا نمیشه!!&#34;بعضی وقت ها فکر میکنم این پروژه هنوز برای خیلی از مناطق زوده و باید به تاخیر 10 ساله بی افتههنگام حفاری معابر به خصوص کوچه ها چیز های عجیبی دیده میشد از عروسک های سوزن شده تا انواع دعا و طلسم -  طنز ماجرا اینجاست که حین حفاری تعداد زیادی به اصطلاح &#34;دعا&#34; پیدا میشد که به شکل های مختلفی پیچیده شده بود و اهداف شان هم مشخص نبوددعا و طلسمدر این متن کوتاه خیلی از موارد گفته نشد تا  خواننده حوصله ادامه دادن رو داشته باشهبا تمام این اوصاف بازم تجربه جالب و شیرینیه و امیدوارم تمام کشور هرچه سریعتر به اینترنت پرسرعت فیبرنوری تجهیز شه از نوع آسیاتکی😅دنیای امروز و آینده دنیای ارتباطاته امیدوارم همه طعم شیرین اینترنت پرسرعت و (بدون فیلتر) را بچشندبه امید آن روز.علی سلیمی سرپرست پروژه فیبرنوری آسیاتک استان کرمانشاه.</description><category>Ali Salimi C</category><author>Ali Salimi C</author><pubDate>Tue, 02 Apr 2024 01:28:47 +0330</pubDate></item><item><title>بازمتن شدن دات نت راهی به سمت رستگاری</title><link>https://virgool.ir/CodeLovers/بازمتن-شدن-دات-نت-راهی-به-سمت-رستگاری-og46em1ddovh</link><description>آینده از آن کیست؟مدتی بود سخت روی یک پروژه که با جاوا پیاده میشد کار میکردم،  کلی کلاس رو باز نویسی کردم و خیلی خسته شده بودم ، تصمیم گرفتم مدتی از کار دوری کنم تا استراحتی کرده باشم،‌به یاد گذشته سری به وب سایت مایکروسافت زدم (قسمت مستندات #C) متوجه شدم این #C اون #C سابق نیست . با اینکه سیستمم ویندوزی نیست Mono Project رو نصب کردم . سری هم به NET Core. زدم ولی هنوز به صورت چند سکویی از رابط های گرافیکی پشتیبانی نمیکنه. ولی روش نصب  NET Core. خیلی پسندیده بود (یه فایل زیپ که استخراج میشه) ولی نصب پروژه مونو  را نپسندیدم چون مثل چسب به سیستم چسبید(نصب با apt) ولی در نهایت راضی کننده بود تا این لحظه مشکلی باهاش نداشتم.  چندتا گزارش عملکرد از سی شارپ در مقابل جاوا هم دیدم، گویا سی شارپ پیش افتاده (از نظر سرعت اجرا) اگه دات نت با هم فرمون پیش بره احتمالا تا ۵ سال دیگه باید از جاوا خداحافظی کرده و به دات نت سلام گفت، الان دیگه یک جایگزین قویی برای ویژوال استودیو وجود داره intellij rider یا همون (Rider: The Cross-Platform .NET IDE from JetBrains) هم نسبتا حجمش زیاد نیست (حجم فایل زیپ شدش حدودا ۸۰۰ مگابایتی هست ولی بعد از استخراج ۲ گیگی میشه)هم بسیار ابزار هوشمند و پر قدرتیهعکس از محیط Riderتفاوت syntax بین جاوا و سی شارپ رو میشه در تصاویر زیر فهمید ،‌هر دو یه کار انجام میدن ولی سی شارپ جذاب تره انجام میدهنمونه کد جاوانونه کد سی شارپانتخاب شما کدام است؟</description><category>Ali Salimi C</category><author>Ali Salimi C</author><pubDate>Mon, 15 Feb 2021 15:52:23 +0330</pubDate></item><item><title>داستان مهاجرت من از دات نت به جاوا</title><link>https://virgool.ir/CodeLovers/داستان-مهاجرت-من-از-دات-نت-به-جاوا-aoflswzokxil</link><description>java or c#?سال ها پیش که تازه به دانشگاه رفته بودم سعی می شد الفبای اولیه برنامه نویسی با زبان سی تدریس شود تا دانشجویان سریعتر مسئله را درک کنند، پس از گذشت مدتی به شکلی حیرت آسا در تمام کار های عملی و کد های نمونه تاکیید دانشگاه و اساتید به زبان #C تغییر کرد، همه جا بحث در مورد این زبان بود، سعی می شد همه چیز را فقط در این زبان توصیف و پیاده سازی کرد - به حدی اساتید تعصب مند #C شدند که سر بعضی از کلاس ها،  فضایی برای مطرح کردن زبان های دیگر احساس نمیشد طبیعی بود که خواسته یا ناخواسته باید از #C استفاده می کردیم .دوستانم که از دبیرستان سراغ این رشته رفته بودن فقط Visual basic را زبانی برای همه چیز تصور می کردند و علاقه ای برای یادگیری #C از خود نشان نمی دادند ، دانشگاه شبیح میدان جنگی میان دو زبان ویژوال بیسیک و سی شارپ شده بود، کمتر کسی به پشت پرده و پایه این دو زبان توجه میکرد، گویی که کسی نمی خواستند سراغ این واقعیت که پلتفرم و پایه هر دو آن ها Net. است برود.نگاهی به دوران دبیرستان:وقتی که دبیرستانی بودم (رشته ی غیر مرتبط) تا آن زمان به خاطر سرعت پایین اینترنت و مشکلاتش محدود بودم و  شناخت دقیق و روشنی از سیستم عامل های دیگر به خصوص لینوکس نداشتم و تمام دنیای کامپیوتر را در ویندوز خلاصه میدیدم،‌مدتی بعد  مقالاتی در مورد دنیای باز و آزاد لینوکس دیدم ، هیجان زده شدم  و چند روز بعد یک نسخه از Linux Redhat تهیه کردم ، بدون هیچ آشنایی با معماری و روش پارتیشن بندی Linux  آن روی سیستمم نصب کردم ، خیلی طول کشید چون نسبتا حجمش زیاد و سرعت نصب شدنش پایین بود، مدتی بعد که سیستم راه اندازی شد با دیدن Desktop آن بسیار حیرت زده شدم چند دقیقه ای که با آن کار کردم متوجه شدم که پارتیشن هایی که با فرمت NTFS قالب بندی شده پشتیبانی نمیشد، در حالی که تمام زندگیم درون این پارتیشن ها بود میدانستم که در نهایت مجبور به نصب دوباره ویندوز میشوم ولی دوست نداشتم محیط جدید و شگفت انگیز لینوکس را ترک کنم بی آنکه چیزی از آن  کشف کرده باشم ، با کمال تاسف و ناراحتی در پایان ویندوز را دوباره نصب کردم، ولی دیگر درصد تعلق خاطرم به ویندوز از ۱۰۰٪ به ۸۰٪ رسیده بود، می دانستم که نمیتونم تا ابد با ویندوز کنار بیام، هرچی زمان پیش میرفت با مشکلات و ضعف های عجیب ویندوز بیشتر آشنا میشدم (در آن زمان Windows 7 تازه در حال همه گیر شدن بود) با ویروس (البته نوعی کرم) که درون فلش مموری های خزش میکرد خیلی مشکل داشتم، با قسمت Regestry هم خیلی کلنجار میرفتم(شبیح شهری بدون نقشه بود)از مشکل نام گذاری ها غیر استاندارد در ویندوز خیلی حراس داشتم،‌به یاد دارم که یک بد افزار فقط وظیفه اش ساخت پوشه هایی با نام های شبیح به Hash بود و نمیشد آن پوشه هارا حذف و تغییر نام داد و صدها مشکل ریز و درشت دیگر که در آن زمان جز مشکلات روزمره ویندوز شده بود، از استفاده های ۱۰۰٪ از CPU , Disk هم نگم که همه باهاش آشنا هستنبعد از مدتی فارغ از تمام مشکلات دیگر یک قضیه خیلی برام عذاب آور شده بود! پیدا نکردن آدرس و منبع یک برنامه در Task Manager اگر برنامه ای با دسترسی Admin اجرا می شد و برنامه ی کوچکی با اسم svchost در مسیر windows\system32 کپی کرده و آن را در قسمت Startup رجیستری ثبت می کرد فهمیدن ماهیت و پیدا کردن آن بسیار مشکل میشد، به خاطر این قبیل مشکل ها بار ها ویندوز را دوباره نصب می کردم در حالی که بیشتر انرژی و وقتم در همین راه اتلاف میشد.(بگذریم)سلطه زبان #C در دانشگاه:همه جا #C بود همه از Net. تعریف میکردن - عده زیادی با PHP خداحافظی کرده و سراغ ASP.NET رفته بودند - تا اسم از زبان جدیدی برده میشد سیل عظیمی از تعریف و تمجید از  NET. و شرکت Microsoft و سیاست هاش به سمت شخص سرازیر میشد ، مدتی بود که خودم از #C استفاده میکردم و بسیار راضی بودم چون واقعا syntax روان - مشخص و دوست داشتنی داشت ، خیلی راحت میشد یه Windows form را فقط با نوشتن چند خط ساده و واضح بدون داشتن محیط ویژوال نوشت و کامپایل کرد ، از این همه راحتی و سهولت در پیاده سازی بسیار خرسند بودم و علاقه ای به آشنا شدن با زبان دیگری در خودم حس نمیکردم ، باید اعتراف کنم که #C پکیجی بود از هر آنچه که می خواستم همه چیز دم دست بود و میشود به راحتی کارهای بزرگ و باحالی انجام داد، در آن زمان سیستم من نسبتا قوی نبود و توان پردازشی چشمگیری نداشت و حافظه RAM و Disk چندانی هم نداشتم - با ویژوال استدیو ۲۰۱۳ بسیار راحت بودم و کار ها را پیش میبردم.یک روز قصد داشتم یک ربات تلگرامی بنویسم،‌به سراغ یه سری کتابخانه رفتم و با مبحث جدیدی که در ویژوال استودیو ۲۰۱۳ پشتیبانی نمیشد (تا آن زمان) رو به رو شدم await و  async کتابخانه هایی که برای من مناسب بودن اغلب با این ویژگی جدید پیاده سازی شده بودند ولی من امکان استفاده از آن را نداشتم از طرفی هم به خاطر قوی نبودن سیستمم امکان ارتقا ویژوال استودیو برایم مهیا نبود ، حس میکردم به یک بن بست بزرگ خوردم . در نهایت خودم مجبور شدم یه کتابخانه مختصر و ساده بنویسم، از کتابخانه های دیگری برای طراحی رابط کاربری استفاده کردم ، در نهایت کار تمام شد و از کدهایی که نوشته بودم خروجی گرفتم، برنامه را به دانشگاه بودم تا به دوستانم نشان دهم ولی با مشکلات ریز و درشتی رو به رو شدم که حسابی از محیط NET. دلسردم کرد.همخوانی نداشتن نسخه Net. استفاده شده ی من با سیستم میزبانبعضی از کتابخانه ها برای اجرا شدن نیازمند شرایط خاصی بودند که برای مصرف کننده نهایی کمی گیج کننده بودمایکروسافت هر سال زبان  #C را آپدیت میکرد و تنها راه استفاده از آن فقط از طریق بروزرسانی ویژوال استودیو ممکن بودویژوال استودیو بیش از اندازه بزرگ و حجیم شده بود همیشه به این فکر میکردم که آیا واقعا راه دیگری به جز ویژوال استودیو (آن زمان هنوز VS Code وجود نداشت) وجود دارد؟هرچه بیشتر در این زبان عمیق تر میشدم بیشتر به این نتیجه میرسیدم که مایکروسافت سیاست مرموزی برای جذب و نگه داشتن افراد به محیط ویندوز و محصولاتش در بیش گرفتهآن روز ها نصف انرژیم را صرف مشکلات ویندوز . ویروس ها و کند شدن ناگهان و نصف دیگر را برای کنار آمدن با ویژگی هایی که در ویژوال استدیو من نبود تلف میکردماز کامپایل کردن سورس برای سیستم های ۳۲ بیتی و ۶۴ بیتی هم میگذرم.هر بار که هنگام کد نوشتن کار جدیدی را پیاده سازی میکردم حس میکردم زبان های که در Net. اجرا میشوند یک زبان واقعی که دسترسی به سخت افزار را برای برنامه نویس فراهم میکند نیستند، Net. مثل ریل قطاری است که برای جابجایی فقط باید در امتداد آن حرکت کردبزرگ ترین مشکل این بود که دات نت رفته رفته پشتیبانیش از سیستم عامل های قدیمی مایکروسافت را در حال لغو کردن بود، مثلا در ویندوز XP که آن زمان کاملا منقرض نشده بود فقط تا دات نت ۴ پشتیبانی میشد . خلاصه حس میکردم از قافله ای که مایکروسافت رهبریش میکند به سرعت در حال عقب ماندن هستمورود به جاوا، محقق شدن یک رويا:مشکلاتی که حس کرده بودم را با یکی از اساتید در میان گذاشتم او زبان JAVA را به من پیشنهاد کردمن علاقه ای به یادگیری زبان جدیدی نداشتم ولی به دلیل کنجکاوی سراغش رفتم.مدتی سعی میکردم تمام برنامه هایی که می نوشتم فقط با JAVA باشد، در این راه موفق شدم که به اندازه ی نیاز جاوا را درک کنممدت زیادی نگذشته بود که فهمیدم زمانی که با #C سپری میکردم به بطالت گذشته، در جاوا ویژگی های منحصر به فردی دیدم که بسیار با نیاز های من مطابقت داشت.مهم ترین آن ها این شعار بود یک بار بنویس، یک بار کامپایل کن، همه جا استفاده کن٬   این شعار به معنای واقعی کلمه امکان پذیر شده بود زیرا کدی که در جاوا کامپایل می شود(به بایت کد) در هر سه سیستم عامل (لینوکس - ویندوز - مک) بدون هیچ تغییری و فارغ از ۳۲ یا ۶۴ بیتی بودن میزبان اجرا می شد و به درستی کار میکرد، در زمان نوشتن کد هم می شد چک کرد که این سورس روی چه پلتفرمی در حال اجرا است و متناسب با آن اقدام کرد، سه نوع مدل برای استفاده از رابط های گرافیکی  کتابخانه استاندارد داشت(AWT, SWING,FX)، با جاوا می شود کارهای زیادی کرد مثل دسترسی داشتن به کتابخانه های تولید صدا - ذخیره صدا - تولید و پخش آنی صدا ، و کارهایی بسیار زیادی که در حوصله این متن نمیگنجد.چون از #C استفاده نمیکردم دلیلی برای ماندن و استفاده کردن از ویندوز نمی دیدم، از دوران دبیرستان تا این مرحله از زندگی خدمات و سرعت اینترنت برای من بهبود قابل توجهی یافته بود، بدون معطلی یک نسخه از اوبونتو را دانلود و بلافاصله نصب کردم، نسبت به Redhat ی که در گذشته دیده بودم اوبونتو بسیار پیشرفت کرده بود و اصلا قابل مقایسه با ردهت نبود(برای من به عنوان سیستم Desktop) بعد از مدت کوتاهی ابزارهای مورد نیاز برای برنامه نویسی جاوا  را فراهم کردم، در لینوکس همه چیز طعم دیگری دارد، حتی پخش یک موزیک تکراری!، این محیط جذاب و شگفت انگیز درهای جدیدی را برایم باز کردند، با java همه کار میشه انجام داد(با کمی تفاوت) بعد از مدتی خود را در توسعه برنامه های اندرویدی دیدم، مدت نسبتا طولانی(از نظر خودم) با java کار کردم تقریبا می توانم بگویم هر نوع برنامه ای که به ذهنم ميرسد مینوشتم و به دوستانم میدادم. از برنامه های سمت سرور یا سایت های کوچک تا web api تا بازی های کوچک اندرویدی و……جاوا برای کار کردن با هر قسمت از سیستم عامل یک کتابخانه یا Api تهیه کرده از کارهای پیش پا افتاده مانند تکان دادن موس و فرستادن رویداد فشردن صفحه کلید تا  مدیریت Thread ها و استفاده از روش سمافور و کلی چیز باحال که گفتنشان در اینجا نمی گنجدولی جاوا هم مانند #C روی یک ماشین مجازی اجرا می شد، با اینکه به نسبت، جاوا سرعت زیادی در اجرا شدن داشت ولی بعضی وقت ها که سعی در طراحی یک شی گرافیکی داشتم سرعت کم جاوا در پردازه های بصری، خود را نشان میداد. موضوع دیگری که کمی وقت گیر به نظر می رسید این بود که اگر در هر خط کدی که به یک سیمیکولون(نقطه ویرگول ; )ختم میشود را در نظر بگیریم طولش کمی زیاد به نظر میرسد و کلی برای نوشتن یک کلاس (class) وقت و انرژی مصرف میشود. به مثال زیر توجه کنید تا درک بهتری به دست آوریدjava example codeاین قطعه کد که به زبان جاوا نوشته شده.  یک فایل متنی را خوانده و در نهایت نام های کاربری را به صورت یک آرایه از رشته ها بازگشت میدهدبا جاوا یک سری کار ها را نمیشود به راحتی انجام داد بزرگ ترین آن ها این بود که نمیشود به صورت مستقیم از Api های یک سیستم عامل یا کتابخانه های که به زبان C  پیاده سازی شده اند استفاده کرد البته راه هایی برای انجام دادن این کار ها وجود دارد مانند JIN - JNA ولی کمی روش کار را پیچیده میکند.  نمی خواهم بگویم که جاوا زبان خوبی نیست ولی احساس میکنم به کمی ساده سازی نیازمند است در برخی قسمت ها حس میشود که اصطلاحا لقمه را از پشت سر به دهان میگذارد که این روش مناسبی نیست، زبان جاوا خیلی درگیر شی گرایی شده و این باعث میشود توسعه دهنده برای کارهای ساده به پیاده سازی کلاس ها بپردازد، زبان های که با ماشین مجازی اجرا می شوند مثل چاقوی دو لبه عمل میکنند اجرا شدن در بستر ماشین مجازی یک مزیت قوی و مثبت برای چند سکویی بودنش است در حالی که میشود آن را به نوعی نقطه ضعف منفی دانست که قدرت و سرعت و دسترسی به سخت افزار را کاهش میدهدبه همین دلیل نیاز شدیدی را در خودم برای پیدا کردن و یاد گرفتن زبانی که کاستی های جاوا و  دات نت را نداشته باشد حس میکنم.سخن پایانی:هرکسی بسته به نوع ، وسعت کار و نیازش از زبان های مختلف استفاده میکند.استفاده کردن یا نکردن از زبان خاصی به معنی خوب یا بد ، قوی یا ضعیف بودن توسعه دهنده نیست.هرکسی سلیقه ای دارد ولی راه پیشرفت زمانی باز می شود که بی دلیل روی زبان یا تکنولوژی خاصی تعصب نداشته باشیمهر زبانی مشکلات خاص خودش را دارد - پدید آمدن زبان های جدیدی گواهی بر وجود مشکلات استتا زمانی که وقت و انرژی دارید زبان های جدید را امتحان کنید، زیرا همیشه ابزار های جدید با خود ایده های جدیدی را به ارمغان می آوردند.ali_slm1995@yahoo.com</description><category>Ali Salimi C</category><author>Ali Salimi C</author><pubDate>Fri, 05 Feb 2021 19:53:08 +0330</pubDate></item><item><title>زبان برنامه نویسی D</title><link>https://virgool.ir/CodeLovers/زبان-برنامه-نویسی-d-akthjkaegd2l</link><description>محیط توسعه خوب مسئله این است!!من به زبان های برنامه نویسی علاقه دارم و به عنوان تفریح و سرگرمی، رایج ترین ها را امتحان میکنم و به شدت متکی به قابلیت auto-complete محیط توسعه هستمچند روزی هست که زبان برنامه نویسی D برام جالب شده سراغ سایتشان رفتم تا محیط های توسعه پیشنهادی شان را امتحان کنم چند تای اول لیست که معروف بودن را دانلود و تست کردم ولی متاسفانه  auto-complete هیچ کدام از آنها کار نکرد(البته در محیط لینوکس همیشه کمبود یه سری ابزار ها حس میشه) من ماندم و یک تو ذوغی تلخ ، برام عجیب بود که چرا یه سری زبان ها به شدت نادیده گرفته میشوند و اسمی از آن ها شنیده نمیشود و ابزار توسعه پایدار و مفیدی برایشان طراحی نشده(حداقل تا جایی که من گشتم)D Language Iconزبان برنامه‌نویسی D، یک زبان شی گرا، امری و چندالگویی سیستمی است که توسط  Walter Bright از Digital Mars طراحی و در سال ۲۰۰۱ منتشر شد. Bright توسط  Andrei Alexandrescu در سال ۲۰۰۶ به تلاش توسعه و طراحی پیوست. با اینکه D  مهندسی دوباره‌ای از سی پلاس پلاس است، کاملاً یک زبان جدا محسوب می‌شود؛  زیرا بسیاری از ویژگی‌های هسته سی پلاس پلاس را نگه داشته و بسیاری را دور  ریخته‌است. در طراحی زبان دی همچنین از زبان‌هایی مانند پایتون، روبی، سی  شارپ، ایفل و جاوا نیز الهام گرفته شده‌است. هدف طراحی زبان D ترکیب کارایی  و امنیت زبان‌های کامپایلری، با قدرت زبان‌های پویای مدرن است. کد یک  برنامه در زبان D شبیه به زبان سی پلاس پلاس است، اما کوتاه‌تر می‌باشد.زبان D چیست؟دی یک زبان برنامه نویسی سطح بالای سیستمی برای کارهای عمومی است، اما توانایی نوشتن کد با کارایی بالا را به طور مستقیم با API سیستم عامل و با سخت افزار حفظ می کند. دی به خوبی برای نوشتن برنامه های خطی در مقیاس متوسط ​​تا بزرگ با تعداد زیادی از برنامه نویسان مناسب است. دی به راحتی قابل یادگیری است ، قابلیت های بسیاری برای کمک به برنامه نویس فراهم می کند و به خوبی برای فناوری بهینه سازی کامپایلر تهاجمی مناسب است.دی یک زبان اسکریپتی یا یک زبان تفسیری یا ماشین مجازی نیست، ​ فلسفه غالبی وجود ندارد. این یک زبان عملی برای برنامه نویسان عملی است که باید کار را به سرعت ، با اطمینان انجام دهند و کدهای قابل فهم و قابل نگهداری را پشت سر بگذارند.دی اوج تجربه چندین دهه در اجرای کامپایلرها برای بسیاری از زبانهای مختلف و تلاش برای ساخت پروژه های بزرگ با استفاده از این زبانها است. دی از زبانهای دیگر (به ویژه ++ C) الهام می گیرد و آن را به تجربه و عملی بودن در دنیای واقعی تعدیل می کند.hello world example -- D Languageچرا Dچه کسی به زبان برنامه نویسی دیگری نیاز دارد؟صنعت نرم افزار به طور مداوم با سرعتی سرسام آور در حال پیشرفت است. ایده های جدید ظاهر، و ایده های قدیمی اعتبارسنجی یا کنار گذاشته می شوند. نیاز های برنامه نویسان همیشه در حال تغییر کردن است. حافظه و قدرت محاسباتی موجود با توجه به ترتیب و همچنین مقیاس برنامه های در حال توسعه افزایش یافته است.کامپایلرها دیگر خیلی محدود به منابع محاسباتی نیستند و بنابراین می توانند کارهای بیشتری برای برنامه نویس انجام دهند. ویژگی های زبانی بسیار قدرتمندتر عملی شده اند. بازسازی این ویژگی ها به زبانهای موجود دشوار است و وقتی تعداد کافی از آنها وجود داشته باشد ، یک زبان جدید توجیه می شود.اهداف اصلی طراحی Dهمه چیز در طراحی زبان یک معامله است. در نظر داشتن برخی اصول به تصمیم گیری صحیح کمک می کند.−نوشتن کد سریع و موثر را به روشی مستقیم فعال کنید.−نوشتن کدی را که از کامپایلر به کامپایلر ، ماشین به ماشین و سیستم عامل به سیستم عامل قابل حمل است ، آسان تر کنید. رفتارهای تعریف نشده و پیاده سازی شده را به همان اندازه عملی از بین ببرید.−ساختارهای نحوی و معنایی ارائه دهید که اشتباهات رایج را از بین ببرد یا حداقل آنها را کاهش دهد. نیاز به جستجوگر کد استاتیک شخص ثالث را کاهش داده یا حتی از بین ببرید.−از برنامه نویسی امن حافظه پشتیبانی کنید.-از برنامه نویسی چند پارادایمی پشتیبانی کنید ، یعنی در حداقل الگوی پشتیبانی برنامه نویسی ، ساختاری ، شی گرا ، عمومی و حتی کاربردی.−انجام کارها را به روش صحیح آسان تر از روش نادرست قرار دهید.−یک منحنی یادگیری کوتاه برای برنامه نویسان داشته باشید که با برنامه نویسی در C++ ، C یا Java راحت باشند.−در صورت لزوم دسترسی به سطح پایین به سخت افزار را فراهم کنید. وسیله ای برای برنامه نویس پیشرفته فراهم کنید تا در صورت لزوم از بررسی خارج شود.−با رابط باینری برنامه C محلی سازگار باشد.−در جایی که کد D همان کد C است ، از آن بخواهید که رفتار یکسانی داشته باشد یا خطایی از خود بروز دهد.−یک دستور زبان بدون زمینه داشته باشید. تجزیه و تحلیل موفقیت آمیز نیازی به تجزیه و تحلیل معنایی ندارد.−به راحتی از نوشتن برنامه های بین المللی پشتیبانی کنید - Unicode در همه جا.−برنامه نویسی قرارداد و روش آزمایش واحد را در آن بگنجانید.−بتوانید برنامه های سبک و مستقل ایجاد کنید.−هزینه های ایجاد اسناد را کاهش دهید.−معناشناسی کافی را برای پیشرفت فناوری بهینه سازی کامپایلر فراهم کنید.−پاسخگوی نیازهای برنامه نویسان تحلیل عددی باشید.−بدیهی است که گاهی اوقات این اهداف با هم تضاد دارند. وضوح به نفع قابلیت استفاده خواهد بود.زبان Dدر حال انتقال به Dنمای کلی D مانند C و++ C است. این امر یادگیری و انتقال کد به D. را آسان تر می کند. انتقال از C / C ++ به D باید طبیعی باشد. برنامه نویس مجبور نیست روش کاملاً جدیدی را برای انجام کارها بیاموزد.استفاده از D به معنای محدود شدن برنامه نویس به زمان اجرا vm (ماشین مجازی) مانند Java vm یا Smalltalk vm نخواهد بود. D vm وجود ندارد ، این یک کامپایلر ساده است که پرونده های شی قابل پیوند را تولید می کند. D دقیقاً مانند C به سیستم عامل متصل می شود. ابزارهای معمول مانند make درست در توسعه D مناسب هستند.D Language Exampleدی برای چه کسی است؟−برنامه نویسان که به طور معمول از ابزارهای مشابه تجزیه و تحلیل کد برای از بین بردن اشکالات قبل از تدوین کد استفاده می کنند.−افرادی که با حداکثر سطح هشدارها عمل کامپایل انجام میدهند و به کامپایلر دستور می دهند هشدارها را به عنوان خطا تلقی کند.−مدیران برنامه نویسی که مجبور می شوند برای جلوگیری از اشکالات رایج به دستورالعمل های سبک برنامه نویسی اعتماد کنند.−پروژه هایی که نیاز به آزمایش و تأیید داخلی دارند.−تیم هایی که برنامه هایی با یک میلیون خط کد در آن می نویسند.−برنامه نویسان که فکر می کنند این زبان باید ویژگی های کافی برای جلوگیری از ضرورت مستمر دستکاری مستقیم اشاره گرها را فراهم کند.−برنامه نویسان که نیمی از برنامه خود را به زبان اسکریپت نویسی می کنند و نیمی دیگر را برای تسریع در گلوگاه ها به زبانهای محلی می نویسند. D دارای ویژگی های بهره وری است که استفاده از چنین رویکردهای ترکیبی را غیر ضروری می کند.−تجزیه و تحلیل واژگانی D و تجزیه کننده کاملاً از یکدیگر و از تحلیلگر معنایی مستقل هستند. این بدان معنی است که نوشتن ابزار ساده برای دستکاری کامل منبع D بدون نیاز به ساخت کامپایلر کامل آسان است. این همچنین بدان معنی است که کد منبع می تواند به صورت توکن برای کاربردهای تخصصی منتقل شود.نمونه ای از زبان Dویژگی های اصلی D−برنامه نویسی شی گرا:ماهیت شی گرا D از کلاس ها ناشی می شود. مدل وراثت ، وراثتی منفرد است که با رابط ها تقویت می شود. Object کلاس در ریشه سلسله مراتب وراثت قرار دارد ، بنابراین همه کلاسها مجموعه ای مشترک از عملکردها را پیاده سازی می کنند. کلاسها با مرجع نمونه سازی می شوند ، بنابراین کد پیچیده ای برای تمیز کردن پس از استثنائات مورد نیاز نیست.−اضافه بار اپراتور یا همون Operator Overloadingکلاسهایی ساخته می شود که با اپراتورهای موجود کار می کنند تا سیستم نوع را برای پشتیبانی از انواع جدید گسترش دهند. به عنوان مثال ایجاد یک کلاس bignumber و سپس بارگذاری بیش از حد عملگرهای + ، - ، * و / برای استفاده از نحو جبری معمولی با آنها.برنامه نویسی عملکردی یا Functional Programmingبرنامه نویسی کاربردی از نظر کپسول سازی ، برنامه نویسی همزمان ، ایمنی حافظه و ترکیب موارد زیادی برای ارائه دارد. پشتیبانی D از برنامه نویسی به سبک عملکردی شامل موارد زیر است:-عملکردهای خالص−انواع و ساختارهای داده غیرقابل تغییر−عملکرد و بسته شدن لامبدا−بهره وری یا Productivityماژول هاپرونده های منبع مکاتبات یک به یک با ماژول ها دارند.اعلامیه در مقابل تعریف [Declaration vs Definition]توابع و کلاسها یکبار تعریف می شوند. در صورت مراجعه به جلو نیازی به اظهارنامه نیست. یک ماژول می تواند وارد شود و کلیه اظهارات عمومی آن در دسترس واردکننده قرار می گیرد.الگوها [Templates]الگوهای D ضمن ارائه قدرت تخصص جزئی ، روشی تمیز برای پشتیبانی از برنامه نویسی عمومی ارائه می دهند. کلاسهای الگو و توابع الگو همراه با آرگومانهای الگوی متغیر و مجموعه های در دسترس موجود استکارکرد[Functions] از عملکردهای معمولی از جمله توابع جهانی ، توابع بیش از حد ، مشخص کردن توابع ، توابع عضو ، توابع مجازی ، نشانگرهای عملکرد و غیره پشتیبانی مورد انتظار را دارد. علاوه بر این:توابع تو در توتوابع را می توان در توابع دیگر قرار داد. این برای فاکتورگیری کد ، محل و تکنیک های بسته شدن عملکرد بسیار مفید است.prime numbersFunction Literalsتوابع ناشناس را می توان مستقیماً در یک عبارت جاسازی کرد.بسته شدن پویاتوابع تو در تو و توابع عضو کلاس را می توان با بسته شدن (که به آنها نماینده نیز می گویند) ارجاع داد ، و این امر باعث می شود برنامه نویسی عمومی بسیار آسان تر شود و نوع آن ایمن باشد.پارامترهای In ، Out و Refنه تنها مشخص کردن این امر به مستندسازی بیشتر توابع کمک می کند ، بلکه ضرورت اشاره گرها را بدون از بین بردن چیزی از بین می برد و امکان کمک به کامپایلرهای بیشتر در یافتن مشکلات کدگذاری را فراهم می کند.این امکان را برای D فراهم می کند تا به طور مستقیم با طیف گسترده ای از API های خارجی رابطه داشته باشد. دیگر نیازی به راه حل هایی مانند &#34;زبانهای تعریف رابط&#34; نیست.مدیریت منابعمدیریت خودکار حافظهتخصیص حافظه D به طور کامل زباله جمع آوری شده است. با جمع آوری زباله ، برنامه نویسی بسیار ساده تر می شود. جمع آوری زباله نیاز به کد رهگیری حافظه خسته کننده و مستعد خطا را از بین می برد. این نه تنها به معنی زمان توسعه بسیار سریعتر و هزینه های تعمیر و نگهداری پایین تر است ، بلکه برنامه حاصل اغلب سریعتر اجرا می شود.مدیریت حافظه صریحعلی رغم اینکه D دارای جمع آوری زباله است ، عملیات جدید و حذف می تواند برای کلاسهای خاص نادیده گرفته شود تا بتوان از یک تخصیص دهنده سفارشی استفاده کرد.RAII یک تکنیک مدرن توسعه نرم افزار برای مدیریت و تخصیص منابع است. D از RAII به روشی کنترل شده و قابل پیش بینی و مستقل از چرخه جمع آوری زباله پشتیبانی می کند.کارایی [Performance]سنگدانه های سبک [Lightweight Aggregates]از سازه های ساده به سبک C پشتیبانی می کند ، هم برای سازگاری با ساختارهای داده C و هم برای اینکه وقتی قدرت کامل کلاس ها بیش از حد باشد ، مفید هستند.Inline Assemblerدرایورهای دستگاه ، برنامه های سیستم با کارایی بالا ، سیستم های جاسازی شده و کد تخصصی برای انجام کار ،گاهی باید به زبان اسمبلی فرو بروند. در حالی که برای پیاده سازی مونتاژ درون خطی نیازی به پیاده سازی های D نیست ، این زبان تعریف شده و بخشی از آن است. بسیاری از نیازهای کد اسمبلی را می توان با آن برطرف کرد و نیاز به مونتاژ جداگانه یا DLL را برطرف کرد.بسیاری از پیاده سازی های D نیز توابع ذاتی را به طور مشابه با پشتیبانی C برای دستکاری پورت I / O ، دسترسی مستقیم به عملیات ویژه شناور و غیره پشتیبانی می کنند.قابلیت اطمینانیک زبان مدرن باید تمام تلاش خود را انجام دهد تا به برنامه نویس کمک کند اشکالات کد را از بین ببرد. کمک می تواند به اشکال مختلف باشد. از سهولت استفاده از تکنیک های قوی تر ، تا گردآوری پرچم گذاری کد کاملاً نادرست ، تا بررسی زمان اجرا.مدیریت استثنااز مدل برتر try-catch-نهایت استفاده می شود تا فقط try-catch. نیازی به ایجاد اشیا ساختگی نیست فقط برای اینکه تخریب گر بتواند سرانجام معناشناسی را پیاده سازی کند.هماهنگ سازی [Synchronization]برنامه نویسی چند رشته ای بیشتر و بیشتر جریان اصلی پیدا می کند ، و D برای ساخت برنامه های چند رشته ای اولیه را فراهم می کند. همگام سازی را می توان در هر دو روش یا سطح شی انجام داد.پشتیبانی از تکنیک های قویآرایه های پویا به جای اشاره گرهامتغیرهای مرجع به جای اشاره گرهااشیا point مرجع به جای اشاره گرهاجمع آوری زباله به جای مدیریت حافظه صریحبدوی داخلی برای همگام سازی نخهیچ ماکروی وجود ندارد تا ناخواسته کد را اسلم کنیدتوابع درون خطی به جای ماکرونیاز به اشاره گر به شدت کاهش می یابداندازه نوع انتگرال صریح استدیگر عدم اطمینان در مورد امضای کاراکترهابدون نیاز به کپی کردن اعلامیه ها در پرونده های منبع و هدر.پشتیبانی تجزیه صریح برای افزودن کد اشکال زدایی.چک کردن زمان کامپایلبررسی نوع قوی ترخالی نیست برای بدن حلقهتکالیف نتایج بولی نمی دهنددر حال استفاده از API های منسوخبررسی زمان اجرااصطلاحات () را ادعا کنیدبررسی مرزهای آرایهحالت تعریف نشده به استثنای سوئیچبه استثنای حافظهدر ، خارج و کلاس پشتیبانی از برنامه نویسی بی اعتبارسازگاریقوانین تقدم و ارزیابی اپراتور عملگرهای C و قوانین تقدم ، ترتیب قوانین ارزیابی و قوانین ارتقا promotion را حفظ می کند. با این کار از اشکالات ظریفی که ممکن است ناشی از عادت به شیوه C انجام کارها باشد ، جلوگیری می شود ، زیرا به دلیل معناشناسی مختلف فرد در یافتن اشکالات با مشکل زیادی روبرو می شود.دسترسی مستقیم به C API ها نه تنها دارای انواع داده های متناسب با انواع C است ، بلکه دسترسی مستقیم به توابع C را نیز فراهم می کند. برای کپی یکایک اعضای جمع ، نیازی به نوشتن توابع لفافی ، swizzlers پارامتر و کد نیست.پشتیبانی از انواع داده های Cایجاد امکان رابط با هر API C یا کد موجود کتابخانه C. این پشتیبانی شامل ستون ها ، اتحادیه ها ، فهرست ها ، اشاره گرها و همه انواع C99 است. D شامل توانایی تنظیم تراز بندی اعضای ساختار برای اطمینان از سازگاری با قالبهای داده اعمال شده از خارج است.مدیریت استثنای سیستم عاملمکانیزم کنترل استثنا  D به روشی که سیستم عامل اصلی در موارد استثنا انجام می دهد متصل می شود. کدی را در قالب پرونده استاندارد شی object تولید می کند ، و امکان استفاده از مونتاژگرهای استاندارد ، پیوند دهنده ها ، اشکال زدایی ، پروفایلرها ، کمپرسورهای exe و سایر تجزیه و تحلیل ها را فراهم می کند ، همچنین می تواند به کدهای نوشته شده به زبان های دیگر پیوند دهد.</description><category>Ali Salimi C</category><author>Ali Salimi C</author><pubDate>Thu, 04 Feb 2021 02:42:11 +0330</pubDate></item></channel></rss>