۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

۸ دلیل که توسعه‌دهندگان Go را دوست دارند و ۸ دلیلی که آن‌ها آن را دوست ندارند

مانند همه زبان های بزرگ، Golang طرفداران و منتقدان خود را دارد. به نظر می رسد، برخی از دلایلی که ما Go را دوست داریم، همان دلایلی است که می خواهیم آن را کنار بگذاریم.

مانند همه زبان های بزرگ، Golang طرفداران و منتقدان خود را دارد. به نظر می رسد، برخی از دلایلی که ما Go را دوست داریم، همان دلایلی است که می خواهیم آن را کنار بگذاریم.

در سال ۲۰۰۷، برخی از برنامه نویسان گوگل به گزینه های خود برای نوشتن نرم افزار نگاه کردند و آنچه را که دیدند راضی نشدند. آنها نیاز به مدیریت میلیون‌ها خط کد داشتند که دائماً داده‌ها را برای شبکه جهانی وب ذخیره و ارسال می‌کردند. این کد هزاران یا شاید میلیون‌ها اتصال را در شبکه‌ها در سراسر جهان انجام می‌دهد. مسیرهای داده پر از چالش‌های مربوط به موارد مسابقه و همزمانی بود.

زبان های برنامه نویسی موجود کمک چندانی نکردند. آنها برای بازی‌ها یا مدیریت رایانه‌های رومیزی یا بسیاری از کارهای رایج دیگر از دنیای قبل از مرورگر وب ساخته شده‌اند. لبه‌های ناهموار و حالت‌های خرابی آن‌ها، کدنویس‌ها را در گوگل آنقدر دیوانه کرد که شروع به پرسیدن اینکه آیا ممکن است راه بهتری وجود داشته باشد یا خیر. آیا چیزی وجود داشت که بتواند کارهای I/O را تنها در چند خط با تمام ایمنی و امنیت مورد نیاز Google انجام دهد؟

پاسخ به آن سوال منفی بود. و بنابراین آنها Golang را ایجاد کردند، یک زبان ساده که ظاهراً شبیه به C یا Java است. نسخه‌های عمومی در سال ۲۰۰۹ ظاهر شدند و اولین نسخه ۱.۰ در سال ۲۰۱۲ عرضه شد. امروز، Google به سرمایه‌گذاری در این زبان ادامه می‌دهد و آخرین نسخه پایدار تا این لحظه ۱.۲۲.۵ است.

در داخل Google، زبان Go بلوک‌های بزرگی از زیرساخت را تامین می‌کند، و بسیاری از برنامه نویسان خارج از گوگل نیز آن را پذیرفته اند. زبان اخیراً به ۱۰ برتر شاخص Tiobe صعود کرده است. تا لحظه نگارش این مقاله در جایگاه هشتم قرار دارد.

همه آن ثروت ظالمانه تحسین‌های فراوانی را به همراه داشته است – اما برخی از فلرها و تیرها نیز. در بسیاری از موارد، همین ویژگی‌ها هم تحقیر و هم تحسین را به همراه دارد. چیزی که برخی از توسعه دهندگان در مورد Go دوست دارند، دیگران به همان اندازه از آن متنفرند. 

۸ دلیلی که توسعه‌دهندگان به زبان Go علاقه دارند یا از آن متنفرند

  • یادگیری آسان است
  • موارد دلخواه را پخش نمی کند
  • نحو مبتنی بر C
  • (خیلی) قوانین زیاد
  • بررسی خطاهای اضافی
  • کتابخانه استاندارد
  • اندازه قابل اجرا
  • بابا بزرگ گوگل

یادگیری Go آسان است

طراحان Go عمداً زبانی را ایجاد کردند که یادگیری آن سریع بود، زیرا ویژگی‌های پیچیده یا ویژگی‌های خاص زیادی نداشت. به جای اضافه کردن زنگ و سوت به Go، آنها ترجیح دادند زبان را کم کنند، نزدیک به حداقل حداقل مورد نیاز برای انجام کار خود در Google. این به معنای «نه» گفتن به ایده‌های خوب و تمرکز بر یک چشم‌انداز ایده‌آل از آنچه برنامه‌نویسان باید به آن نیاز داشته باشند، بود.

چرا برخی آن را دوست دارند: یادگیری زبان ساده‌تر برای برنامه‌نویسان جدید و اعضای تیم آسان‌تر است. ویژگی ها یا ساختارهای کمتری برای تسلط وجود دارد و این بدان معناست که برنامه نویسان ماهر می توانند این زبان را در یک روز فرا بگیرند. کارکنان پروژه ها آسان تر است زیرا می توان به سگ های پیر ترفندهای جدید Go را به سرعت آموزش داد. نه تنها این، بلکه خواندن کد اغلب آسان‌تر است، البته فقط به این دلیل که ساختارهای عجیب و غریب یا محرمانه‌ای وجود ندارد که در مکان‌های عجیب و غریب ظاهر شوند.

کد ویژوال استودیو نمودار تغییرات ورودی/خروجی را پیش‌نمایش می‌کند

چرا برخی از آن متنفرند: ساده بودن لزوماً بد نیست، فقط چیزی است که کنار گذاشته شده است. آیا یک جادوگر یک کتاب طلسم خلاصه شده را انتخاب می کند؟ آیا یک کوارتربک کتاب بازی را تنها با چند بازی انتخاب می کند؟ برخی از کدنویسان احساس می کنند که برنامه نویسی با Go مانند برنامه نویسی با یک دست بسته به پشت است. این زبان فاقد تمام زیرکی است که دیگر طراحان زبان به دنیا ارائه کرده‌اند، و این هزینه بالایی است.

Go موارد دلخواه را پخش نمی کند

توسعه‌دهندگان اصلی می‌خواستند یک زبان کوچک ایجاد کنند، و این کار را به قیمت بسیاری از ویژگی‌های مورد علاقه موجود در زبان‌های دیگر انجام دادند. Go یک زبان ساده است. آنچه شما نیاز دارید را انجام می دهد اما از زنگ ها و سوت ها دوری می کند.

چرا برخی آن را دوست دارند: بسیاری از توسعه دهندگان سادگی Go را ستایش می کنند. Go نیازی به کسب یا حفظ تخصص در ده ها ویژگی برای مهارت ندارد. اگر برخی از کدها را بخوانند، ساختارهایی را که قبلاً ندیده‌اند، کشف نخواهند کرد.

چرا برخی از آن متنفرند: همه چند ویژگی و ترفند مورد علاقه دارند، اما احتمال اینکه Go آنها را ارائه نمی‌دهد. گاهی اوقات توسعه دهندگان شکایت دارند که می توانند همان کاری را که می توانند در Go انجام دهند تنها با یک خط COBOL یا جاوا یا زبان مورد علاقه دیگر انجام دهند.

نحو مبتنی بر C

سازندگان Go ریشه های عمیقی در دنیای یونیکس دارند و این نشان می دهد. سینتکس برای هر کسی که از زبان C یا هر یک از زبان‌هایی مانند جاوا یا سی شارپ که از C قرض گرفته‌اند، کاملاً آشنا است. براکت‌های فرفری Go و تایپ کردن برای این گروه راحت خواهد بود. تیم طراحی برخی از لبه‌های ناهموار را از C سنتی حذف کرد و برخی از جزئیات را ساده‌تر کرد تا مدرن‌تر به نظر برسد، اما در بیشتر موارد، Golang کاملاً مطابق با سنتی است که با C شروع شد.

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

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

Go قوانین (خیلی) زیادی دارد

از ابتدا، سازندگان Go می خواستند نه تنها نحو، بلکه بسیاری از سبک و الگوهای استفاده از زبان را نیز تعریف کنند. برای مثال، آنها یک کتابخانه قالب‌بندی استاندارد تولید کردند تا از جنگ بر سر راه درست تورفتگی کد Go جلوگیری کنند. آنها لیستی از اصطلاحات را تنظیم کرده اند و برنامه نویسان را تشویق کرده اند که از بهترین آنها استفاده کنند. آنها همچنین صراحتاً برخی از عادات را که توسط زبان های دیگر مورد بی مهری قرار می گیرند، مانند متغیرهای استفاده نشده یا وابستگی های چرخه ای، ممنوع کرده اند. فرآیند ساخت Go به گونه‌ای برنامه‌ریزی شده است که وقتی این عناصر را در پایگاه کد کشف کرد، متوقف شود.

سبک های یادگیری ماشین: مقدمه ای بر شبکه های عصبی

چرا برخی آن را دوست دارند: قوانین کاملا اصطلاحی Go تضمین می‌کند که کد آسان‌تر به‌دست می‌آید. تیم‌ها بر سر سبک دعوای کمتری خواهند داشت زیرا گزینه‌ها یا دلایل کمتری برای تغییر سبک شخصی خود وجود دارد.

چرا برخی از آن متنفرند: همه این قوانین و قراردادهای اضافی مانند یک جلیقه مستقیم هستند. چرا یک متغیر استفاده نشده مشکل ساز است؟ اگر کامپایلر بتواند آن را شناسایی کند، کامپایلر می‌تواند آن را بدون اشکال کردن من حذف کند. آیا برای برنامه نویسان اینقدر بد است که در زندگی خود کمی آزادی داشته باشند؟

Go مدیریت خطای اضافی دارد

بسیاری از برنامه نویسی مدرن شامل ایجاد مسیرهای اضافی برای کدهایی است که هنگام ظاهر شدن خطاها از آنها استفاده می شود. کد به طور معمول اجرا می شود تا زمانی که مشکلی پیش بیاید. وقتی خطایی رخ می دهد، باید بازیابی شود. ممکن است فقط کمی مکث کند یا کاملاً تسلیم شود. ساختن سیستم‌های خودکار نیاز به درون‌نگری دارد تا بدانیم چه زمانی کار می‌کند یا خراب می‌شود.

Go با تشویق برنامه نویسان به نوشتن دو مسیر در یک تابع، رویکرد جدیدی اتخاذ می کند. کد Good Go هم رویکرد عادی و هم اتفاقاتی که باید در صورت بروز خطا رخ دهد را بیان می کند. برنامه نویسان Go دوست دارند بگویند “خطاها مقادیر منظمی هستند” زیرا بخشی از یک کد هستند. حتی یک نوع سیستم جداگانه برای خطاها وجود دارد که به برنامه نویسان اجازه می دهد اشکال خاص تری از خطاها را ایجاد کنند، سپس نحوه برخورد با آنها را توضیح دهند.

چرا برخی آن را دوست دارند: رویکرد Go تأیید می‌کند که خطاها وجود دارند و برنامه‌نویس را تشویق می‌کند تا برای مدیریت آنها برنامه‌ریزی کند. این برنامه‌نویسان را تشویق می‌کند تا از قبل برنامه‌ریزی کنند و نوعی انعطاف‌پذیری ایجاد کنند که نرم‌افزار بهتری را ایجاد کند.

چرا برخی از آن متنفرند: مدیریت غیرضروری خطا عملکردهای Go را چاق‌تر و درک آن را سخت‌تر می‌کند. اغلب، هر تابع در یک زنجیره عمیق باید شامل کد مشابهی باشد که کمابیش همان کار را با همان خطا انجام می دهد. زبان‌های دیگر مانند جاوا یا پایتون برنامه‌نویسان را تشویق می‌کنند تا خطاها را در زنجیره‌ای به بلوک خاصی «پرتاب» کنند که آنها را «گیر» کند، که می‌تواند منجر به کد پاک‌تر شود.

کتابخانه استاندارد

این فقط نحو Go نیست که به عنوان یک استاندارد ساده اما قدرتمند طراحی شده است که تیم ها را متحد می کند. کتابخانه استاندارد شامل پشتیبانی از بسیاری از وظایف اصلی است که برای برنامه نویسی microservices مبتنی بر وب رایج است. روال های ورودی و خروجی با دستکاری بسته های شبکه در سطح پایین شروع می شود و تمام وظایف افزایش پیچیدگی مانند مدیریت پروتکل HTTPS یا رمزگشایی داده های JSON را انجام می دهد. راه‌اندازی یک وب سرور کامل فقط به چند خط کد نیاز دارد زیرا همه آن‌ها در بخش «net/http» کتابخانه گنجانده شده است.

Ballerina پشتیبانی خدمات RESTful را بازسازی می کند

چرا برخی آن را دوست دارند: هنگامی که بسیاری از ویژگی‌های استاندارد توسط کتابخانه پیش‌فرض مدیریت می‌شوند، خواندن اکثر کدها آسان‌تر است زیرا هیچ‌کس نسخه خود را نمی‌نویسد یا در مورد بسته یا سوم بحث نمی‌کند. کتابخانه مهمانی بهتر است.

چرا برخی از آن متنفرند: شکایت از چنین انبوهی از کدهای خوب کار سختی است، اما افراد بدجنس دوست دارند به این نکته اشاره کنند که رقابت شاخص خوبی برای تقاضا و نوآوری است. این واقعیت که برخی از زبان‌ها از بسته‌های متعددی پشتیبانی می‌کنند که وظیفه یکسانی را انجام می‌دهند، نشان‌دهنده علاقه عمیق و فرهنگ غنی است.

اندازه قابل اجرا

یکی از اهداف تیم Go این بود که اجرای برنامه های Go را آسان کند و آنها این کار را با ترکیب کردن همه چیز در یک فایل اجرایی انجام دادند. همه چیز برای اجرا آماده است زیرا همه روال های کتابخانه Go در ساخت استاندارد گنجانده شده است.

در طول سال‌ها، توسعه‌دهندگانی که فایل‌های اجرایی با حجم ده‌ها یا حتی صدها مگابایت را دوست ندارند، راه‌هایی برای قطعات غیر ضروری را بردارید. تنظیم پرچم های مناسب کمی کار بیشتر است و شامل مراحل اضافی در فرآیند ساخت، اما می توان آن را انجام داد.

چرا برخی آن را دوست دارند: فضای دیسک ارزان است. هنگام نصب نسخه‌های مختلف کتابخانه‌ها، استقرار کد در مکان‌های عجیب می‌تواند یک کابوس باشد. توسعه دهندگان برو مقدار زیادی از زمان ما را با ساختن یک فایل اجرایی صرفه جویی می کنند.

چرا برخی از آن متنفرند: چند نسخه از کتابخانه های Go روی دیسک من وجود دارد؟ اگر ۱۰۰ برنامه داشته باشم یعنی ۱۰۰ نسخه. در برخی موارد، کارایی مورد توجه است. بله، فضای دیسک ارزان‌تر از همیشه است، اما پهنای باند حافظه و حافظه پنهان همچنان مسائل اصلی سرعت اجرا هستند.

بابا بزرگ گوگل

Golang در Google توسعه داده شد و این شرکت بزرگ همچنان یکی از حامیان اصلی آن است و کامپایلر و بسیاری از زنجیره ابزار را ارسال می کند. برخی از پشتیبانی‌های خارج از Google مانند GopherJS وجود دارد، ترانسپایلری که Go را به JavaScript اما در بیشتر موارد، بیشتر تلاش‌های توسعه Go مستقیماً از داخل Google انجام می‌شود.

چرا برخی آن را دوست دارند: امروزه بسیاری از کارها شامل نوشتن کد برای مجموعه‌های سرورها و کلاینت‌ها می‌شود، همان نوعی که بخش بزرگی از حجم کاری Google است. اگر Go برای گوگل خوب است، برای ما که به همین روش کار می کنیم نیز خوب است. اگر مهندسان گوگل چیزی را بسازند که دوست داشته باشند، هر کسی که پروژه های مشابهی داشته باشد به همان اندازه آن را دوست خواهد داشت. 

چرا برخی از آن متنفرند: این به این معنی نیست که مردم فی نفسه گوگل را دوست ندارند، فقط برنامه نویسان به مقامات متمرکز بی اعتماد هستند. مشکلاتی مانند قفل فروشنده و عدم کنترل، مسائل جدی برای هر کسی است که سعی می کند یک پشته فناوری را مدیریت کند. تمام سخاوتمندی Google همچنان برنامه نویسان را نگران می کند، به خصوص زمانی که زبان های دیگر دارای جوامع متن باز و بزرگ هستند.