Golang یا Rust؟ کدومشون بهتره؟!

golang25 اسفند 1398
مقایسه Golang و Rust

اگه شمام برنامه نویس حرفه ای باشین حتما حداقل یک بار بر سر دو راهی هایی مثل این گیر افتادین! امروز در قلاب قراره دوتا زبان برنامه نویسی جدید و رو بورس رو باهم مقایسه کنیم. خب حقیقتش اینه که این دو زبان، یعنی Golang و Rust، هردوشون مزایایی دارن که دنیای برنامه نویسی رو حسابی تحت تاثیر قرار دادن. اگه میخواین با ویژگی های این دو زبان آشنا بشین، تا انتهای این مقاله با من همراه باشین😊

طی چند دهه ی اخیر، این زبان های برنامه نویسی به ضرورتی اجتناب ناپذیر در توسعه ی سازمان ها تبدیل شدن. ناگفته نماند که Rust در Mozilla ساخته شد در حالی که Golang رو Google ایجاد کرد.

هردوی این زبان های برنامه نویسی دارای ویژگی هایی هستند که برای توسعه نرم افزارهای پیشرفته لازم و ضروری هست. از جمله این ویژگی ها میشه به امنیت حافظه، ابزارهای یکپارچه، مدل توسعه منبع باز (open source) و انجمن های قوی برای کاربران حرفه ای امروزی اشاره کرد.

اگر چه Rust و Golang تشابهات بسیاری دارن، اما تفاوت های چشم گیری با همدیگه دارند. برای رفع نیازهای متفاوتی ایجاد شدن و هرکدوم در نوشتن نوع خاصی از برنامه ها کارایی دارن.

مقایسه کردن Rust و Golang به این معنی نیست که بگیم کدومشون در حالت کلی میتونن عملکرد بهتری داشته باشن بلکه به دنبال این هستیم که بفهمیم برای انجام یک تسک برنامه نویسی مشخص که بهمون داده شده کدومشون میتونه مناسب تر باشه و نتیجه بهتری بهمون بده.

بنابراین باید دنبال این باشیم که تفاوت های اساسی Golang و Rust رو درک کنیم و متوجه بشیم که مسئولیت هرکدومشون چیه و برای انجام چه کارهایی میتونن مناسب تر باشن. اما برای تصمیم گیری در مورد اینکه بین این دو واقعا کدوم میتونه راهکار بهتری برای رفع نیازهای ما باشه باید به دانش عمیقی در مورد هریک از اون ها دست پیدا کنیم.

در ادامه قراره حقایق ناشناخته ای در مورد Rust و Golang رو باهاتون به اشتراک بذارم، پس با قلاب همراه باشین:

معرفی Golang

Golang یا به اختصار Go، برای نخستین بار در سال 2007 توسط شرکت Google معرفی شد. در ابتدا این زبان به عنوان راهکاری برای حل برخی مسائلی که سازمان ها در تهیه زیرساخت های نرم افزاری داشتند، مطرح شد.

قبل از اینکه Golang به دنیا بیاد، برنامه نویس ها برای حل مسائل خاصی مثل خوشه های محاسباتی و مدل های برنامه نویسی وب مجبور بودن لقمه رو دور سر خودشون بچرخونن چون در واقع یک راهکار فیکس و مشخص برای حل اون ها وجود نداشت. Golang دقیقا برای بالا بردن بهره وری در چنین محیط هایی ساخته شده.

جدا از جنبه های کاملا شناخته شده ی Golang مثل زباله روبی (Garbage Collection)، هم زمانی داخلی (build in concurrency) و توجه ویژه به طراحی Golangt، این زبان دارای ویژگی های منحصر به فرد و خاص دیگه ای هم هست: مدیریت وابستگی ها، استحکام و همبستگی در مرزهای مختلف بین مولفه های نرم افزاری و سازگاری با معماری های نرم افزاری در سیستم های پیشرفته.

در حال حاضر، در مقایسه با سایر زبان های برنامه نویسی سمت سرور، Golang هم از لحاظ ترافیک استفاده و هم از لحاظ محبوبیت بالاترین موقعیت رو در بازار به خودش اختصاص داده. شکل زیر رو ببینید:

مقایسه محبوبیت و ترافیک زبان های برنامه نویسی

همونطور که توی شکل بالا می بینید، Golang در حال حاضر محبوب ترین زبان بین برنامه نویس های دنیا هست. هم چنین بر اساس آخرین تحقیقات انجام شده، 73% از برنامه هایی که سرویس های APIو RPC نوشتند و 63% از برنامه هایی که کارشون توسعه ی برنامه های کاربردی CLI بوده از Golang استفاده کردن!

مهم تر از همه امتیاز ترویج Golang، 68% هست که نشون میده به طرز شگفت آوری در حال محبوب تر شدن هست. 90% کاربرهای این زبان در سال 2018 گفتن که مشتاقانه Golang رو به دیگران توصیه میکنن!

خب حالا که آمار و ارقام محبوبیت Golang رو اعلام کردیم برگردیم سر اصل موضوع: Golang در سال 2009 سرانجام به عنوان یک پروژه ی منبع باز،برای استفاده در اختیار عموم قرار گرفت. جالبه که بدونین زبان های معروفی مثل Alef، Hoare’s CSP، Pike’s Newsqueak و … آبا و اجداد Golang محسوب می شن!

در فوریه سال 2019 نسخه 1.12 از Golang وارد بازار شده. از جمله برخی از مهم ترین ویژگی های نسخه ی جدی میشه به این موارد اشاره کرد: پشتیبانی بهتر از مولفه بندی، سازگاری بیشتر با iOS و MacOS و موارد از این قبیل.

مزایای اصلی استفاده از Golang

  • بهترین ویژگی Golang، قطعا سرعت باور نکردنی اون هست! این زبان بسیار پرسرعت بوده و از نوع  statically-typed هست که قابل کامپایل به کدهای ماشینه. در حقیقت Golang از بسیاری از زبان های برنامه نویسی مانند پایتون، جاوا اسکریپت، جاوا، C# و … سریع تر هست.
  • سادگی کدها از دیگر وجه های تمایز Golang حساب میشه
  • Golang به عنوان یک زبان مختصر و مفید اما کارامد شناخته شده
  • Golang تمرکز خیلی زیادی بر جریان فرآیند کدنویسی داره. در مستندات Golang گفته شده که این زبان رو به صورت اوپن سورس معرفی کردن تا برنامه نویس ها رو به تولید کدهای بیشتر تشویق کنن بهره وری اون ها رو بالاتر ببرن.
  • رویکرد حل مسئله در Golang به گونه ای هست که تاکید زیادی بر بهره وری برنامه نویس در مراحل مختلف چرخه توسعه نرم افزار داره.
  • انعطاف پذیری از دیگر نقاط قوت Golang محسوب میشه
  • این زبان در عین سادکی، کاملا امن هم هست؛ به هیچوجه با دسترسی های محافظت نشده به حافظه کنار نمی آد!
  • Golang هم چینن میتونه در نوشتن تسک ها و میکروسرویس ها برای “DevOps” ها عالی عمل کنه.
  • این زبان قابلیت همکاری بسیار خوبی با C و بسیاری از دیگر زبان های برنامه نویسی داره.
  • شایعه شده که یکی از اهداف Golang اینه که جای C و C++ رو بگیره!
  • Golang دارای محیط توسعه س یکپارچه (IDE) هست.
  • آخرین و کم اهمیت ترین ویژگی هم این هست که هندل کردن این زبان کار بسیار ساده ای هست.

معایب Golang

اگرچه Golang قدردانی و تقدیر برنامه نویس های زیادی از سراسر دنیا رو در بر داشته، اما یک سری اشکالات هم داره. به تعدادی از مهم ترین این ایرادها در ادامه اشاره شده:

  • یک زبان سیستمی نیست.
  • Golang به منظور رسیدن به هدف سادگی خودش، برخی از جنبه های کارایی را فدا کرده
  • این زبان اجازه همکاری با cgo را میده در حالی که این راه پیش بینی شده ای برای برنامه نویسان golang نیست.
  • تا حد زیادی، فقدان Generic ها در Golang احساس میشه
  • تغییر ناپذیری (immutability ) و ثبات کافی در این زبان وجود نداره
  • Golang دارای ویژگی زباله روبی هست که این موضوع بر کارایی کلی اون تاثیر منفی میذاره

نگاه کلی به Rust

Rust در سال 2010 ساخته شد. این زبان معمولا به عنوان افزونه ای برای Meta language ها تلقی میشه. Rust توسط Mozilla ساخته شد. موتور مرورگر Servo که با حمایت مالی Mozilla ساخته شده است، با کمک Rust توسعه داده شده.

برخی از مهم ترین اهداف پروژه Servo که با مالکیت و تعهد به Rust ایجاد شده، شامل امنیت بهتر، بهبود موازی سازی، کارایی بهتر و افزایش مولفه بندی (Modularity) هست.

بررسی هایی که روی بازار انجام شده نشون میده که 74.5% از کاربرهایی که از زبان Rust استفاده کردند چنان شیفته و طرفدارش شدن که به تمام زبان های برنامه نویسی دیگه ترجیحش میدن. این موضوع در نمودار زیر نشون داده شده:

نتیجه نظرسنجی از کاربران Rust

در سال 2018 تعداد کاربران Rust کاملا روبه افزایش گزارش شد و نشون داد تقریبا یک چهارم از کاربرانش حداقل برای مدت دو سال از این زبان استفاده می کنن. پروژه های کله گنده ای هم با سرمایه گذاری های نجومی ایجاد شدن که در اون ها از Rust استفاده شده، در واقع این پروژه ها سعی دارند Rust رو به ترند برنامه نویسی مدرن تبدیل کنن!

هم چنین گزارش شده که سرمایه گذاری های متوسط (در حد پروژه هایی با 10 هزار خط کد) و سرمایه گذاری های کلان (پروژه هایی با بیش از 100 هزار خط کد) روی Rust انجام شده که از 8.9% در سال 2016 به 23% در سال 2018 رشد صعودی داشته. این رشد خیلی چشم گیری به حساب می آد!

نسخه 1.0 از زبان Rust در سال 2015 معرفی شد و نسخه 1.33 در سال 2019 ساخته شد. Rust انجمن پشتیبانی بسیار قوی ای داره. برخی از پروژه های این انجمن عبارت اند از: Redox، که سیستم عامل هست و Iron.

بزرگ ترین مزایای استفاده از Rust

  • Rust سرعت راه اندازی فوق العاده ای داره به گونه ای که در برخی موارد خیلی موفق تر از Golang عمل میکنه.
  • هرکجا که لازمه تسک ها با کارایی بالا، امنیت زیاد و به صورت هم زمان اجرا بشن قطعا Rust حرف اول و آخرو میزنه!
  • Rust در مدیریت پیچیدگی کد بسیار قوی عمل میکنه چون دارای ویژگی های کنترل سیستم ای مانند novel embeddings، الگوها (pattern)ی بسیار غنی و قوی، افزونه های نحوی (Syntax Extensions) غنی و قدرتمند و مواردی مشابه این ها.
  • Rust یکی از پر طرفدارترین زبان های برنامه نویسی محسوب میشه که ضمن داشتن هزاران کاربر، هزاران طرفدار داره که جز اون حاضر به کدنویسی با هیچ زبان دیگه ای نیستن!
  • Rust قابلیت تعامل با بسیاری زبان های برنامه نویسی از جمله FFI، C و تعدادی دیگه رو دارا هست.
  • هزینه انتراع (abstraction) در این زبان تقریبا صفر هست!
  • این زبان انجمن پشتیبانی گسترده ای داره.
  • Rust با فرم های مختلفی از trailها پشتیبانی قوی ای زا genericها انجام میده
  • یکی از بهترین چیزها در مورد Rust اینه که دسترسی حفاظت نشده به حافظه رو تحمل نمیکنه!
  • این زبان در مورد زمان اجرا یک رفتار بسیار قابل پیش بینی داره. معنیش اینه که نه زباله روبی وجود داره و نه هزینه ی انتزاعی.
  • این زبان امنیت خیلی بالایی در برابر تهدیدهای سطح پایینی مثل اشاره گرهای Null و شرایط رقابتی داره.
  • Rust کنترل تقریبا کاملی بر سخت افزار (شامل ویژگی های پردازنده و چیدمان حافظه) داره.
  • استفاده از Rust منجر به صرفه جویی زیادی در زمان دیباگ کردن، کراش کردن و تست کردن میشه.

معایب Rust

اگرچه Rust هزاران مزیت و ویژگی مثبت داره، ولی خوب هیچ گلی بی خار نیست! برخی از معایبش رو در ادامه واستون نوشتم:

  • سرعت یادگیری Rust از Golang پایین تر هست.
  • تقریبا میشه گفت Rust زبان برنامه نویسی پیچیده ایه و فرآیند یادگیریش واقعا زمان بر هست به همین دلیله که هرکسی از عهده یادگیریش بر نمیاد. از قدیم گفتن کار هر بز نیست خرمن کوفتن!😁
  • قبل از اینکه مفاهیم جدید این زبان رو یاد بگیرین باید عادت های قدیمی رو از دهنتون بیرون کنین.
  • اگه بخوایم مقایسه کنیم به نسبت سایر زبان ها، Rust زمان کامپایل طولانی تری داره. مثلا در شرایط مشابه نسبت به C و C++ کندتر عمل میکنه

حالا بریم دنبال جواب دادن به سوال اصلی خودمون:

Golang یا Rust؟ کدومشون بهتره؟ و چرا؟

اگه قصد طراحی یک سرویس وب رو دارین که باید پاسخگوی ترافیک بالایی باشه، هم Rust و هم Golang میتونن واستون مفید باشن. با این حال بسیاری از برنامه نویس های مدرن معتقد هستن که Golang سرعت بالاتری نسبت به Rust داره. خب راستش اگر تعداد زیادی سرویس برای پیاده سازی دارین یا با یک تیم بزرگی از توسعه دهنده ها کار میکنین، Golang میتونه تا حدی انتخاب بهتری باشه.

خیلی از توسعه دهنده ها هم میگن Rust بهترین زبان برنامه نویسیه که تاحالا ازش استفاده کردن. به قول خودشون میگن Rust ضد گلوله س!

با این حال محبوبیت Golang یکم از Rust بیشتره و این به دلیل اینه که هم یاد گرفتنش راحت تره و هم پیچیدگی کمتری داره. اما Rust میتونه با زبان هایی مثل C++ در زمینه های مختلف رقابت کنه؛ به ویژه در موقعیت هایی که برنامه نویس ها مجبورن به منظور بالا بردن کارایی سینتکس های پیچیده ای رو به کار ببرن. مثلا موتورهای بازی AAA، میکروکنترلرها، موتورهای رندرینگ وب و … .

از زمان های بسیار قدیم، این دو زبان به عنوان رقیب همدیگه معرفی شدن، شاید به این دلیل باشه که تقریبا در یک زمان معرفی شدن. هدف Golang اینه که همه چیز رو در ساده ترین حالت ممکن خودش نگه داره و به توسعه دهنده ها کمک کنه تجربه ی بهتری رو در برنامه نویسی داشته باشن.

هم چنین Golang با استفاده از همین سادگی که داره کمک میکنه تیم های بزرگ برنامه نویسی راحت تر در کنار هم کار کنن و کارایی بالاتری داشته باشن. اما در عوض Rust هم میتونه این قدرت رو به توسعه دهنده ها بده که مدیریت وکنترل بر رفتار نخ ها (threads) در برنامه نویسی چندنخی داشته باشن.

در نهایت اگه بخوام یه جمع بندی داشته باشم باید بگم که در حال حاضر Golang پیروز میدان حساب میشه؛ اما این سکه ممکنه به زودی برگرده و در آینده ای نزدیک Rust بره اول لیست اولویت های برنامه نویس ها. ولی خوب راستش تا اون زمان فکر کنم Golang حسابی به سلطنت خودش ادامه بده!

خب دیگه فکر کنم مقالمه مون خیلی طولانی شد، ولی حیفم میاد چندتا نکته مهم دیگه هم نگم، پس میریم که بخش آخر رو باهم داشته باشیم:

سوالات متداول در مورد Golang و Rust

چه زمانی Golang رو انتخاب کنیم؟ وقتی که شما به دنبال این هستین که سریع تر کد بنویسین قطعا Golang میتونه بهترین انتخاب ممکن باشه. در واقع وقتی سادگی و سرعت اولویت شما باشه، Golang همونیه که میخواین😉. هم چنین Golang برای نوشتن میکروسرویس ها و تسک های معمولی ‘DevOps’ عالی کار میکنه.

چه زمانی Rust رو انتخاب کنیم؟ درپروژه هایی که اولویت شون کارایی بالا و هم زمانی هست، توی انتخاب Rust یک ثانیه هم شک نکنین. زمان هایی هم که نیاز دارین به صورت کامل سخت افزار رو کنترل کنین، بازهم Rust رو بهتون توصیه میکنم.

آیا Golang از Rust سریع تره؟ بله قطعا! ارزشمندترین دارایی Golang همین سرعت خفنی هست که در تبدیل به کدهای ماشین داره.

خوب من تقریبا هرچیزی رو که لازم بود گفتم. امیداورم براتون مفید بوده باشه و مثل همیشه از قلاب راضی باشین.

Please Post Your Comments & Reviews

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*