زبان قدرتمندی به نام Go
به عنوان یک برنامهنویس، هر از چندگاهی در حیطه کاریتان با اسمی مواجه میشوید که بیش از پیش به گوشتان میخورد. یک ابزار جدید که خیلی از شرکتهای بزرگ شروع به استفاده از آن کردهاند، هر روز برنامهها و سرویسهای جدیدی با آن ساخته میشود و یا خیلی از سایتها درباره آن مطلب منتشر میکنند.
بنابراین حس کنجکاویتان تحریک میشود و همینطور که اطلاعاتتان درباره آن ابزار بالاتر میرود، از خود سوال میکنید که آیا من هم میتوانم در پروژههای آتی خود از آن استفاده کنم؟ در این مقاله میخواهیم کمی شما را در رسیدن به جواب این سؤال کمک کنیم. این بار میخواهیم راجع به زبان برنامهنویسی Go حرف بزنیم، زبانی که حداقل طی یه سال گذشته سایه سنگی ناش بر دنیای برنامهنویسی کاملا قابل حس است.
زبانی از طرف برنامهنویسان، برای برنامهنویسان
تاریخ برنامهنویسی اثبات کرده زبانهایی که از طرف برنامهنویسان طراحی شدهاند، برنامهنویسانی که روی پروژهها و سیستمهای واقعی مشغول کار بودند؛ بسیار کاربردیتر و محبوبتر از زبانهایی هستند که از طرف محققین رایانهای و با نگرشی ایدهآلگرا به وجود آمدند. چه کسانی Go را خلق کردند؟ کن تامسون، راب پایک و رابرت گریسمر. بدون وارد شدن به جزییات، بد نیست نگاهی به ویژگیها و خدمات قبلی این افراد داشته باشیم:
خلق یونیکس، زبان سی، سیستم Plan9، کدینگ معروف UTF-8، توسعه عبارات باقاعده، مشارکت در طراحی Java HotSpot، مشارکت در طراحی V8 (کروم و Node.js)، یک جایزه تورینگ (معادل نوبل در علوم رایانهای)، یک مدال ملی فناوری ایالات متحده.
شرکتهایی مثل گوکل، یوتیوب، توئیتر، دراپباکس، موزیلا، کنونیکال، Bitly، Redhat، CloudFlare وTumblr (این لیست بسیار بلند است…) و دهها سرویس دیگر از Go استفاده کردهاند و طبق گفته خودشان، همگی تجربه کاملا مثبتی داشتهاند. بعضی از آنها Go را در جایی استفاده کردند که فقط سی و سیپلاسپلاس توان سرویسدهی آن قسمت را داشتهاند، و بعضی دیگر هم Go را به جای زبانهای سطح بالاتری مانند پیاچپی و روبی و پایتون به کار بردهاند. امکان ندارد بتوانید زبان دیگری جز Go را نام ببرید که در چنین مدت کوتاهی توانسته باشد تا این حد مورد توجه قرار گیرد!
کاهش هزینهها با صرفهجویی در منابع
برعکس برنامهنویسان تازهکار، برنامهنویسان با تجربه به خوبی میدانند که «سرعت» غالبا آخرین گزینه در انتخاب یک زبان است! زبان Go در نسخه فعلی، جزو سریع ترین زبانهای برنامهنویسی دنیاست و با یک شیب تند به سوی سریع تر شدن در نسخههای آتی در حرکت است. اگر از زبانهایی مثل پیاچپی و روبی و پایتون استفاده میکنید، پس از مهاجرت به Go، میتوانید انتظار ۲۰ تا ۵۰ برابر شدن سرعت را داشته باشید!
برنامههای نوشته شده در Go از نظر میزان مصرف منابع سختافزاری بسیار به برنامههای سی نزدیک میباشند. ممکن است در جایی ببینید که یک پروسه جاوا حدودا یک گیگابایت از رم را مصرف کرده اما یک پروسه Go با همان وظایف هنوز به پنج مگابایت هم نرسیده! این یک اتفاق کاملا طبیعی است. بنابراین شاید نتوانید برنامه وب جاوای خود را در سرور ۵۱۲ مگابایتی ارزانقیمتتان میزبانی کنید، اما اگر با Go آن را بنویسید، احتمالا میتوانید پنج تا ده نمونه از همان برنامه را بدون مشکل و به طور همزمان در این سرور داشته باشید! این قضیه برای ما ایرانیها که قیمت گزافی برای سرورها پرداخت میکنیم بسیار حیاتی است.
سرویس iron.io بعد از سوییچ کردن از روبی به Go، توانست ۳۰ سروری که مسئول میزبانی خدماتش بودند را به تنها ۲ سرور کاهش دهد! در سناریویی جالبتر، در گوگل سرویس dl.google.com از سیپلا سپلاس به Go سوییچ کرد و حاصل کار نصف شدن کدها، سرعت برابر، مصرف حافظه بهینهتر! وکاهش زمان لود اولیه سرویس (استارتاپ تایم) از ۱۲ ساعت به چند ثانیه بود!!
درصد پایین خطا و سهولت در چرخه توسعه زبان Go از انواع دادههای استاتیک بهره میبرد. بنابراین جدای از بهینهتر بودن سرعت، میزان زیادی از باگهایی که ممکن است در زبانهای دینامیک رخ دهند در Go وجود نخواهند داشت. Go یک زبان کامپایلری است. البته مانند «بعضی» از زبانها به کدهای واسط یا چیزهایی مانند آن تبدیل نمیشود! خروجی کامپایل، بدون نیاز به VM ، JIT و امثال آن، به کدهای سخت، سرد، و بیرحم زبان ماشین تبدیل میشوند! و البته که برنامه شما قابلیت اجرا شدن روی تمام سیستمعاملهای معروف و بسترهای سختافزاری محبوب را خواهد داشت. خروجی کامپایل هم فقط یک فایل اجرایی ساده خواهد بود که به هیچ پیشنیاز و ابزار جانبی دیگری نیاز ندارد. نمیدانید که بعد از مدتها سروکله زدن با بسته منیجرها و نصب ابزارهای مختلف در زبانهای دیگر، این ویژگی Go چقدر لذت بخش است! عبارت «این فایل را روی سرور کپی کن و اجرایش نما» غالبا تنها فرمی از مستندات است که یک برنامه Go برای نصب شدن به آن نیاز دارد!
ساده و آسان
برعکس تصور خیلیها، سادگی و سهولت دو ویژگی کاملا متمایز هستند! زبانهایی هستند که سادهاند، اما استفاده از آنها آسان نیست (مانند سی)، زبانهایی هم هستند که آسانند، اما اصلاً ساده نیستند (مانند جاوااسکریپت). Go هم ساده است و هم آسان! از نظر ساختاری طراحی سادهای دارد و یادگیری زبان غالبا بسیار نرم و روان صورت میگیرد. از نظر راب پایک، نقش رابط گرافیکی کاربر (GUI) را برای زبان ایفا میکند. بنابراین میتوانید اطمینان داشته باشید که یک برنامهنویس از خانواده سی، در نهایت ظرف یک هفته بتواند با Go شروع به کار کند. کتابخانه استاندارد زبان هم نقش پررنگی در سهولت زبان ایفا میکند: به یک وبسرور پرقدرت نیاز دارید؟ میخواهید با آرشیوها کار کنید؟ به الگوریتمهای هش نیازمندید؟ کار با تصاویر چطور؟ همه و همه به طور کاربردی در کتابخانه استاندارد وجود دارند تا شما وقتتان را بابت جستجو برای آ نها هدر ندهید.
همروند و موازی (Concurrency & Parallel)
Go ذاتا یک زبان همروند است. زبان همروند زبانی است که طراحی آن به طور مشخص حول محور همروند بودن شکل گرفته است.
در حال حاضر زبانهای همروند معروف کدامند؟ ارلنگ، هسکل وGo . با اینکه سیستم JVM در حال حاضر نمیتواند از نظر همروندی امکاناتی را در سطح سه زبان نام برده شده ارائه دهد، اما نمیتوانیم اسم کلوژور و اسکالا را در لیست بالا قرار ندهیم. با نگاهی به این لیست متوجه میشویم که Go تنها زبان غیر فانکشنال در این لیست است! (بله، میدانیم که اسکالا فقط فانکشنال نیست!). یکی از مهمترین عوامل جذب زبانهای فانکشنال امکانات همروندی آنها بود. اما با ورود Go به بازی، دیگر لازم نیست برای طراحی سیستمهای همروند دست به دامن زبانهای فانکشنال شوید، زبانهایی که سینتکس و مدل برنامهنویسی در آنها ممکن است برای خیلیها خوشایند نباشد.
وقتی برنامههای خود را به صورت همروند توسعه میدهید، علاوه بر اینکه طراحی برنامهتان بهتر و قابل درکتر خواهد شد، میتوانید اطمینان داشته باشید که در صورت وجود امکانات سختافزاری مناسب، برنامه شما بتواند به طور موازی اجرا شده و سرعت بالاتری را نیز برایتان به ارمغان بیاورد.
بهبود در ساختار کدها
خیلیها فکر میکنند بزرگترین نقطه قوت Go امکانات همروندی آن است، در حالی که از نظر خود طراحان زبان، پیادهسازی منحصر به فرد Interface ها یکی از بهترین دستاوردهای آنان است. اینترفیسها در زبانهای دیگری هم حضور دارند، اما هیچکدام مانند Go پیادهسازی نشدهاند. اینترفیسهای Go شیوه duck-typing را طوری به این زبان مترجمی و استاتیک وارد کردهاند که این قابلیت به ستون طراحی API ها در این زبان بدل گشته است.
Go یک زبان رویهای مدرن است. امکاناتی برای شما مهیا است که بتوانید بدون دردسرهای موجود در زبانی مثل سی، با توابع معمولی کدنویسی کنید. بدون پیچیدگیهای موجود در جاوا و سیپلاسپلاس کدهای شیگرا طراحی کنید. و بدون درگیر شدن با سینتکس غریبه زبانهای فانکشنال، به بسیاری از قابلیتهای موجود در این زبانها دسترسی داشته باشید. و البته مانند بعضی از زبانها، هیچ کدام از این مدلها به زور به شما تحمیل نخواهد شد!
یکی از روشهای کاهش مشکلات یک محصول، حذف قسمتهایی است که تجربه ثابت کرده باعث بروز بیشترین مشکلات خواهند شد. در همین راستا خیلی از قابلیتهایی که در زبانهای دیگر مشکلزا بودند و یا به درستی پیادهسازی نشده بودند، کاملا از Go حذف شدهاند. Go معتقد است نبود خیلی از قابلیتها، بهتر از بودشان است!
موارد دیگری هم هستند که شاید خیلی به چشم نیایند، اما در عمل بسیار مهمند. مثلاً در صورت وجود مشکلی در زمان کامپایل، مترجم پیغامهای خطایی را تولید میکند که برنامهنویس را واقعاً متوجه مشکل میکند، نه مانند خیلی از زبانها خطوط درهم و برهمی را چاپ کند که فهمیدن آن خودش کلی از زمان برنامهنویس را هدر میدهد. یا فرضاً مستندات زبان، که واقعا در بین تمام زبانهای برنامهنویسی منحصر به فرد است.
مستندات Go شیوههای پویایی را برای نمایش و تعامل بهتر با خوانندگانش ابداع کردهاند که کمکم در حال ورود به بقیه زبانها نیز میباشد. یا جامعه کاربری Go که به دلیل ذات سیستمی این زبان، علاوه بر برنامهنویسان خوش ذوق سطح بالا، شامل برنامهنویسان محتاط سطح پایین هم میشود و به شما اطمینان میدهد که از این اجتماع، فقط ابزارهایی بیرون خواهد آمد که بتواند نظر هر دو گروه را جلب کرده باشد و دهها مدل از این موارد کوچک که بدون اینکه زیاد متوجه آن باشید در حال بالابردن بهرهوری شما میباشند. در آخر اینکه، شما نیاز ندارید همین حالا تمام سیستمهای خود را به Go منتقل کنید. ضربالمثل معروفی هست که میگوید «اگر درست کار میکند، به آن دست نزن! ». شما هم اگر کدهایی دارید که از آ نها راضی هستید، شاید نیاز نباشد آنها را تغییردهید. اما اگر از امتحان کردن چیزهای جدید نمیترسید، میتوانید در قدم اول قسمتهای کوچکی از کدهایتان را با Go پیادهسازی کنید. مطمئن باشید که تجربهتان حتی در همین قدم کوچک به قدری لذت بخش خواهد بود که خودتان ترغیب به استفاده بیشتر از این زبان خواهید شد.
منبع: نشریه «سلام دنیا»، شماره اول – نوشته امیررضا قادریدرباره فرشید نوتاش حقیقت
همیشه نیازمند یک منبع آموزشی فارسی در حوزه نرمافزارهای آزاد/ متنباز و سیستمعامل گنو/لینوکس بودم. از این رو این رسالت رو برای خودم تعریف کردم تا رسانه «محتوای باز» رو بوجود بیارم.
نوشتههای بیشتر از فرشید نوتاش حقیقتاین سایت از اکیسمت برای کاهش جفنگ استفاده میکند. درباره چگونگی پردازش دادههای دیدگاه خود بیشتر بدانید.


دیدگاهتان را بنویسید