آموزش زبان برنامه‌نویسی Rust – قسمت ۰: معرفی و شروع به کار

وقتی صحبت از برنامه‌نویسی سیستم می‌شود همه یاد زبان C می‌افتند. ولی الان چند سالی هست که یک زبان بسیار قدرتمند به نام Rust ساخته شده. زبانی که بسیاری از مشکلات زبان C را ندارد. مشکلاتی که برای نوشتن برنامه‌های مورد نیاز صنعت امروز دردسر شده اند و هزینه‌هارا به شکل سرسام‌آوری افزایش داده اند.

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

از آنجایی که زبان Rust در خیلی از مفاهیم با زبان‌های دیگر تفاوت‌های کلّی یا جزئی دارد, یادگیری آن کار بسیار جالب و چالش‌برانگیزی است.

تنها نکته‌ای که باقی می‌ماند این است که من تمام تلاشم‌را برای توضیح مباحث می‌کنم, امّا به صورت پیش‌فرض مطلب‌را برای افرادی توضیح می‌دهم که آشنایی اوّلیّه با برنامه‌نویسی دارند. بنابراین اگر تا به حال برنامه‌نویسی نکرده‌اید ممکن است کمی گیج شوید.

تاریخچه

زبان برنامه‌نویسی Rust توسط یکی از مهندسان موزیلا به نام Graydon Hoare معرفی شد. در حقیقت این زبان بخشی از یکی از پروژه‌های شخصی ایشان بود. بنیاد موزیلا از سال ۲۰۰۹ حامی مالی این زبان شد.

اوّلین نسخه‌ی پایدار این زبان در سال ۲۰۱۵ منتشر شد.در tحال حاضر نسخه‌ی ۱٫۲۷٫۱ این زبان در دسترس عمومی قرار دارد.

این زبان متن‌باز است و تحت لایسنس MIT کد منبعش در اختیار همگان است.

ویژگی‌ها

برنامه‌های نوشته شده به زبان Rust باید ترجمه(compile) شوند. به همین دلیل سرعت اجرای آن‌ها از برنامه‌های مشابه مفسری(مثل پایتون) بیشتر است.

وبسایت رسمی این زبان ویژگی‌های زیر را به عنوان موارد شاخص برای این زبان ذکر کرده است(از آنجایی که خیلی از موارد معادل فارسی خوبی نداشتند همان توضیح انگلیسی‌را آوردم. اگر متوجّه نشدید در بخش نظرات بپرسید):

  • سرعت بسیار بالا
  • zero-cost abstractions
  • move semantics
  • guaranteed memory safety
  • threads without data races
  • trait-based generics
  • pattern matching
  • type inference‌
  • minimal runtime
  • efficient C bindings

بسیاری از تفاوت‌های زبان Rust با دیگر زبان‌ها به این خاطر است که سازندگان آن می‌خواستند تا جای ممکن ایمنی در هنگام کار با thread ها را تضمین کنند.

نصب Rust

برای شروع باید Rust را نصب کنیم. Rust به‌وسیله‌ی rustup نصب می‌شود. ابزار command lineی که نسخه‌های مختلف Rust و ابزارهای مورد نیاز آن‌را مدیریت می‌کند.

نصب Rust کار بسیار ساده‌ای است. الان با هم تمامی مراحل مورد نیاز برای نصب آن‌را می‌بینیم.

نصب Rust روی لینوکس یا macOs

برای نصب Rust اول از همه باید curl را داشته باشید. برای اینکه مطمئن شوید curl روی دستگاهتان نصب است, ترمینال‌را باز کنید. بعد دستور زیر را تایپ کنید:

اگر خروجی‌ای مشابه متن زیر مشاهده کردید یعنی curl روی سیستمتان نصب شده است(خروجی با توجّه به نسخه‌ی curl و سیستم عامل ممکن است متفاوت باشد):

در غیر این صورت با پیام خطای نصب نبودن نرم‌افزار روبه‌رو می‌شوید. اگر curl نصب نبود می‌توانید به سرعت آن‌را نصب کنید. برای مثال در سیستم‌عامل ابونتو می‌توانید دستور زیر را برای نصب سریع این برنامه در ترمینال اجرا کنید:

یا

حالا کافی است دستور زیر را اجرا کنید تا Rust به سادگی نصب شود:

این دستور اسکریپت rustup را نصب می‌کند. اگر تنظیمات پیش‌فرض‌را می‌خواهید, که پیشنهاد من هم این است, دیگر لازم نیست کار خاصی بکنید. بعد از دانلود اوّلیّه از شما نوع نصب پرسیده می‌شود(تصویر زیر).

با وارد کردن عدد ۱ و زدن دکمه‌ی Enter دیگر لازم نیست کاری بکنید. وقتی دانلود و نصب تمام شد, برای افزودن Rust به PATH دستور زیر را اجرا کنید:

اگر می‌خواهید در ترمینال موجود به Rust دسترسی داشته باشید دستور زیر را هم اجرا کنید:

البته همچنان امکان دارد که با بستن ترمینال کنونی دیگر به Rust دسترسی نداشته باشد که با یکبار ری‌استارت کردن همه‌چیز درست می‌شود.

به علاوه شما به یک لینکر هم نیاز دارید. اگر در حال حاضر توانایی کامپایل کردن برنامه‌های C را روی دستگاهتان دارید پس نیاز نیست کار دیگری بکنید. در غیر این صورت می‌توانید یک کامپایلر C نصب کنید.

نصب Rust روی ویندوز

شما برای استفاده از Rust نیازمند ابزار ساخت زبان C هستید. پس بهتر است ابتدا Visual Studio 2017 یا برنامه‌ای مشابه آن‌را نصب کنید و C++ support را فعّال کنید.

حالا از این آدرس بسته‌ی نصبی برنامه‌ی rustup را دانلود کنید و طبق پیام‌هایی که ظاهر می‌شوند آن‌را نصب کنید.

مراحل درست انجام شده اند؟

حالا که نصب انجام شده, زمان آن است که مطمئن شوید که همه‌چیز به درستی نصب شده اند. پس درون ترمینال یا cmd دستور زیر را اجرا کنید:

حالا اگر همه‌چیز روبه‌راه باشد, باید پیامی مشابه پیام زیر را ببینید:

با توجّه به زمانی که این مطلب‌را می‌خوانید ممکن است محتوای نمایش‌داده شده متفاوت باشد, امّا فرمت کلّی اینگونه خواهد بود.

و حالا سلام دنیا!

حالا می‌خواهیم با هم برنامه‌ی معروف hello world را در زبان Rust بنویسیم. یکی از جذّاب‌ترین بخش‌های زبان Rust این است که به صورت پیش‌فرض از فرمت UTF-8 استفاده می‌کند. به همین دلیل می‌توانید بدون انجام هیچ کار اضافی‌ای در آن فارسی بنویسید.

پس ما هم برنامه‌ی hello world را به زبان فارسی خواهیم نوشت.

برای شروع یک فایل به نام main.rs بسازید. حالا داخل آن کد زیر را بنوسید:

حالا برای اجرای برنامه با ترمینال یا cmd به مسیری که فایل قرار دارد بروید و دستور زیر را اجرا کنید:

با اجرای این دستور برنامه‌ی شما کامپایل می‌شود و فایل حاوی کد قابل اجرا در همان مکان ساخته می‌شود.

اگر از لینوکس یا macOs استفاده می‌کنید, برای اجرای برنامه دستور زیر را اجرا کنید:

اگر هم از windows استفاده می‌کنید دستور زیر را اجرا کنید:

و حالا از دیدن حاصل کارتان لذّت ببرید:

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

اگر سؤالی برایتان پیش آمده در بخش نظرات مطرح کنید. اگر در توانم بود کمکتان می‌کنم.

نوشته آموزش زبان برنامه‌نویسی Rust – قسمت ۰: معرفی و شروع به کار اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی

تست A/B چه نقشی در بازاریابی محتوا دارد؟

این تست به شما کمک می کند تا بهترین رابط و تجربه کاربری را برای وب سایت یا اپلیکیشن خود انتخاب کنید. کارگاه « #تولید_محتوا ی تجاری» ویژه #مبتدیان bit.ly/2NH4JEP ویژه #متخصصین bit.ly/2zqYfqG #دانشگاه تهرا‏ن


نوشته تست A/B چه نقشی در بازاریابی محتوا دارد؟ اولین بار در مدرسه استارتاپ ایران. پدیدار شد.

گردآوری توسط ایده طلایی

SQL یا No-SQL مسئله اینست!

ابتدا بایدتوضیح بدم که ضمن نوشتن یک مقاله در مورد “بهینه سازی بانکهای اطلاعاتی SQL” که در آینده نزدیک منتشرخواهم کرد به این نتیجه رسیدم که این دو رو از هم جداکنم ،پس در ادامه به موارد استفاده از SQL و No-SQL میپردازیم.

دیتابیسهای SQL پس از ظهور No-SQL‌ها همچنان به بقای خودشون ادامه خواهند داد زیرا این دو نسل پشت سر هم نیستند و دو حوزه متفاوت و موازی هستند.ولی اگر در تصمیم گیری دچار اشتباه شده اید و به جای اینکه از No-SQLها استفاده کنید از پایگاه های داده ای رابطه ای استفاده کردید افزایش منابع و بهبود فقط به صورت مقطعی میتونه کمکتون بکنه همچنین ممکنه بخشی از سیستم و جداول شما نیاز به پایگاه داده رابطه ای داشته باشند ولی بخشی هم نداشته باشند و باید ابتدا از هم تفکیک بشوند. در این خٌرد مقاله به طور خلاصه به این میپردازیم که هرکدام برای چه کارهایی مناسب تر هستند.

موارد غیر مجاز استفاده از بانکهای اطلاعاتی رابطه‌ای:

  • صف:
    هرگونه ثبت داده برای ایجاد ترتیب پرادزش مثل ساختن یک جدول که داده ها پس از ثبت توسط یک یا چندین ورکر پردازش میشوند و بعد از انجام داده ها آپدیت میشوند مثل صف ارسال پیام ، SMS ، انجام کارهایی از این قبیل که بعد از انجام کار وضعیت انجام اونها ثبت میشود. زیرا پردازشهای موازی بهمراه خواندن و نوشتن همزمان باعث ازثبات خارج شدن/لگ شدن دیتابیس میشود و همچنین انباشت داده های قدیمیتری که پردازش شده اند کندی و افزایش سربار رو بهمراه خواهد داشت.
  • ذخیره‌ی داده‌های باینری حجیم:
    دیتابیسهای رابطه‌ای(Relational) برای ذخیره سازی داده های متنی/عددی مناسبتر میباشند و نقطه قوتشان در اصل رابطه ها و اتصالات سریع و منطقی بین مدلهای داده ای یا همان جداول است و از این رو برای نگهداری مستندات(Document) های حجیم (مثل تصاویر و ویدیوها و…) مناسب نیستند و برای این مدل از داده ها میبایست آنهارا در دیسک یا دیتابیس No-SQL ذخیره کرده و آدرس آنرا در بانک اطلاعاتی رابطه‌ای ذخیره نمایید.
  • ذخیره‌ی گراف:
    هر نوع شبکه‌ی پیچیده و اتصالات تو با خصیصه هایی که یال آن ارتباطات میباشند و انواع پیاده سازی تودر تو به صورت گراف بعلت انجام JOIN زیاد به شدت کل منابع سیستم رو قورت خواهد داد و کل دیسک را درگیر خواهدکرد (مثل دیتابیس یک شبکه اجتماعی/ارتباطی) که باید برای این نوع کاربرد از گراف دیتابیسها(Graph Databases) استفاده کنید مثل GraphQL , Neo4j…
  • الگوهای خواندن بیش از نوشتن:
    زمانیکه عملیات خواندن ردیفی یا همان واکشی داده ها کاربرد زیادی دارد و در کارکرد برنامه‌ی ما نوشتن بسیار ناچیزتر از خواندن است.
  • استفاده بعنوان key-value:
    هرگونه ذخیره سازی داده ها بدون نیاز به امکاناتSQL مانند ذخیره سازی داده های ساده شامل یک کلید و یک مقدار را روی SQL ذخیره نکنید(Redis چه بدی داشت که امتحان نکردی!)
  • ذخیره‌سازی انبوه (بالک):
    بالک ایمپورت (صرفاً خواندن و نوشتن) روی حجمهای چند ده میلیونی داده ها به شدت در بانکهای رابطه ای اختلال و لگ ایجاد خواهد کرد،و اگر نیازمند امکاناتSQLی و رابطه ای نیستیم مجاز به استفاده از بانکهای رابطه‌ای نیستیم ولی گاهی اوقات ممکن است که نیازمند این باشیم که یک بانک اطلاعاتی رابطه‌ای حجیم داشته باشیم که در آنصورت عملیات خلاصه سازی داده‌ها و پارتیشن بندی و… مطرح خواهد شد.


موارد مجاز استفاده از پایگاه‌های داده رابطه‌ای:

به طور خلاصه میتوان گفت:پایگاه‌های رابطه ای بعلت امکاناتی که در اختیار میگذارند گلوگاه‌های زیادی ایجاد میکنند و به نسبت No-SQLهای غیر رابطه ای کندتر عمل میکنند ویا همان مصرف منابع بیشتری دارند و هرگاه ما دلیل موجه و قدرتمندی برای استفاده از اونها نداریم نباید از اونها استفاده کنیم.

تراکنشها:

هر سیستمی که نیازمند تراکنشهای متعدد و انبوه میباشد. (تراکنش: به کوچکترین عملی که در سیستم انجام میشود و قابل تقسیم نمیباشد گویند مثل انتقال اعتبار از حساب یک مشتری به یک مشتری دیگر در بانک و…)

گزارشات پیشرفته داده ها برحسب کلیدهای خارجی:

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

*داده‌های غیر حجیم:

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

به طور کلی اگر اپلیکیشن شما نیاز به کوئریهای بسیار پیشرفته یا نسبتا پیشرفته دارد و نیاز به تجزیه و تحلیل روزمره دارد و تمرکز کلی سیستم شما روی اجرای صحیح و ۱۰۰% مطمئن تراکنشهاست. یعنی نیازمند ACID هستید (مجموعه ای از کارکردها/خواص که یکپارچگی و ثبات و صحت تراکنشهای شمارا تضمین کند) میبایست در انتخاب پایگاه رابطه‌ای تردید نداشته باشید.

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

نوشته SQL یا No-SQL مسئله اینست! اولین بار در ویرگول پدیدار شد.

گردآوری توسط ایده طلایی