
پنج زبان برنامهنویسی نوظهور؛ با آیندهای درخشان(قسمت دوم)
در قسمت اول این مقاله، به معرفی کوتاهی از این پنج زبان و علت انتخاب آنها پرداخته شد. قسمت اول را میتوانید در این لینک مطالعه کنید:
پنج زبان برنامهنویسی نوظهور؛ با آیندهای درخشان(قسمت اول)
در قسمت دوم و پایانی این مقاله، که در اصل ادامهی ترجمهی مقاله اصلی است، این پنج زبان را به طور کاملتری معرفی میکنم.
Elm
زبان Elm یک زبان برنامهنویسی کاربردمحور و Functional است که به زبان جاوااسکریپت کامپایل میشود. میتوان با یا بدون استفاده از جاوااسکریپت از Elm برای ساختن رابط کاربری وب استفاده کرد. مزایای اصلی Elm که با جاوااسکریپت مقایسه میشوند قابلیت اطمینان، قابلیت نگهداری، و راحت بودن برنامهنویس هستند.
بعضی از ویژگیهای دیگر Elm:
- خبری از ارور runtime نیست: کدی که با Elm تولید میشود به این معروف است که ارور runtime ندارد. یعنی با ارورهایی مثل undefined is not function برخورد نخواهیم کرد.
- کامپایلر موثر: کامپایلر Elm به خاطر پیغامهای ارور مفید بسیار مورد ستایش قرار گرفته است. پیغامهای ارور به راحتی قابل فهم میباشند(اصطلاحا friendly هستند). این ویژگی به سرعت بخشیدن فرآیند توسعه بسیار کمک میکند.
- نسخهبندی semantic و خودکار: اگر تغییراتی در نسخه ایجاد شود و شماره نسخه اصلی(major) وارد نشود، پکیج Elm از انتشار آن جلوگیری میکند. هیچ package manager دیگری با این قابلیت اطمینان و اعتماد قادر به انجام این کار نیست. پکیج منیجر Elm نسخهبندی خودکار semantic را برای تمامی پکیجها اجرا میکند.
- ابزار قدرتمند: ابزار elm-format سورس کد را طبق یک استاندارد فرمت میکند. از ابزار elm-test برای تستهای fuzz و unit(دو تست در آزمون نرمافزار) استفاده میشود. همچنین ابزار elm-css به شما اجازه میدهد تا سورس کد را به یک فایل با فرمت css تبدیل کنید و بتوانید از آن در اپلیکیشن و stylesheetها استفاده کنید.
زبان Elm تعامل خوبی با JS دارد، به این معنی که میتوان از آن در سورس کدی که با JS نوشته شده است استفاده کرد. این قابلیت باعث میشود از قدرت عظیم JS بیبهره نمانیم، و دست به اختراع دوبارهی چرخ هم نزده باشیم.
چند لینک مفید برای آشنایی بیشتر با Elm:
guide.elm-lang Elm in ActionRust
Rust (راست) یک زبان برنامهنویسی سیستمی است که بازدهی زبانهای C-Like(مثل PHP، Java، Perl) و کنترل داشتن بر روی Memory را با امکانات برنامهنویسی فانکشنال ترکیب میکند.
سه هدف اصلی این زبان:
- امنیت: بسیاری از زبانهای C-Like در را بهروی ارورهای مربوط به حافظه باز میکنند که ناشی از مدیریت دستی(Manual) حافظه است. Rust برای مطمئن شدن از اینکه ارورهای حافظه پیش نخواهند آمد، از Best Practiceهای زبان ++C(مثل RAII و smart pointers) استفاده میکند.
- سرعت: سرعت اجرای تقریبا تمامی زبانهای برنامهنویس از C کمتر است، به این علت که آنها برای راحتی کار برنامهنویس سطح انتزاع بالایی را بهوجود میآورند. تمرکز Rust بر این است که انتزاعی ایجاد کند که مجبور به پرداختن این هزینه(کاهش سرعت) نباشد.
- همزمانی: برنامهنویسی همروند در زبانهای برنامهنویسی سیستمی اغلب مستعد خطا است. زبان Rust سعی بر رفع این مشکل دارد.
Rust همچنین چند ابزار متمایر دارد:
- The Borrow Checker: ویژگی مشهور Rust یک ابزار آنالیز است که سورس کد را خوانده و اگر کد باعث تولید ارورهای حافظه شود، کامپایل را متوقف میکند.
- ترکیب کردن بهجای وراثت: زبان Rust بهجای استفاده از سیستم کلاسهای وراثت-محور مثل ++C و Java، از صفات یا اینترفیسهای قابل ترکیب برای پشتیبانی از برنامهنویسی ماژولار استفاده میکند. برنامهنویس بهجای تعیین کردن اینکه یک نوع(type) بهخصوص متعلق به یک کلاس است، میتواند یک نوع را براساس ظرفیتهایش توصیف کند. برای مثال بگوییم یک نوع باید قابل چاپ کردن(Printable) یا قابل هش کردن(Hashable) باشد، بهجای اینکه بگوییم از کلاس PrintableHashable ارثبری میکند.
چند لینک مفید برای آشنایی با Rust:
The Rust Book Rust By ExampleKotlin
زبان Kotlin یک زبان Statically Typed است که بر روی ماشین مجازی Java کار میکند(JVM). زبانهای ایستا یا Statically Typed زبانهایی هستند که تعریف متغیر در آنها هنگام کامپایل صورت میگیرد و نه در هنگام اجرا. این زبان همچنین میتواند به جاوااسکریپت هم کامپایل شود. Kotlin نتیجهی تلاش JetBrains است که به دنبال ایجاد زبانی برای نوشتن ابزار خود بود که اکثر آنها با Java نوشته میشد.
چند ویژگی Kotlin:
- خلاصه بودن: حذف کدهای اضافی.
- همهکاره بودن: زبانی که برای کاربردهای مختلف از جمله وب، موبایل، دسکتاپ مناسب است.
- امنیت: Kotlin میتواند اشتباهات رایج که نتایجی مانند Null Reference Exception بهدنبال دارند را اصطلاحا Handle کند.
Kotlin یک زبان عملکردگرا است. این زبان سعی دارد با ارائهی امکانات و ویژگیهایی مشکلات رایج کدنویسی را حل کند. یکی از این امکانات عبارت است از:
- Null-safe بهصورت پیشفرض: Typeها در Kotlin بهصورت پیشفرض Null نیستند. Kotlin از ارور مزاحم Null Reference.
نسخه ۱.۰ زبان Kotlin در فوریه ۲۰۱۶ و بعد از پنجسال توسعه و تست در پروژههای دنیای واقعی منتشر شد. در حال حاضر بیش از ده محصول JetBrains با Kotlin توسعه یافته است. شرکتهایی مانند Amex و NBC Digital نیز از این زبان استفاده میکنند.
اطلاعات بیشتر دربارهی Kotlin:
Kotlinlang.orgCrystal
Crystal یک زبان چندمنظوره، ایستا(Statically Typed)، سطح بالا و شیءگرا با شعار “سریع مثل C، روان مثل Ruby” است.
اهداف طراحی Crystal عبارتند از:
- داشتن سینتکسی مشابه Ruby(سازگاری با Ruby مدنظر نیست).
- ایستا بودن بدون مجبور بودن به تعیین نوع متغیرها یا آرگومانهای متدها.
- قادر به فراخوانی کدهای زبان C با استفاده از Binding
- ارزیابی و تولید کد در هنگام کامپایل شدن؛ که باعث جلوگیری از ایجاد Boilerplate(کد اضافی) میشود.
Crystal ویژگیهای منحصربهفردی دارد. مثل:
- Channels: زبان Crystal از کانالها برای دستیابی به همروندی(Concurrency) استفاده میکند(مثل زبان Go). کانالها شامل Threadهای سبکی هستند که فیبر نامیده میشوند.
- Macros: زبان Crystal از ماکروها برای جلوگیری از تولید بویلرپِلِیت و افزایش قابلیتهای Metaprogramming استفاده میکند.
- Crystal Command: یک جعبهابزار قدرتمند که درون خود ابزاری برای ایجاد پروژه جدید، کامپایل و… دارد. همچنین دو ابزار دیگر نیز وجود دارند؛ یکی برای فرمت کردن کدها و دیگری ابزاری با نام Crystal Play که یک محیط تعاملی برای ایجاد سریع پروتوتایپهای اولیه است.
- شیوایی: بهلطف Ruby، کدهای نوشته شده با زبان Crystal خوانایی بالایی دارند و فهم آنها آسان است.
اطلاعات بیشتر درباره زبان Crystal:
Crystal Book Crystal for RubyistsElixir
Elixir یک زبان همهمنظوره است که اولینبار در سال ۲۰۱۲ معرفی شد. این زبان با هدف بهرهوری، مقیاسپذیری و داشتن قابلیت نگهداری طراحی شده است. با اینکه Elixir زبان نسبتا جدیدی است، به بایتکد(Bytecode) کامپایل شده و روی ماشین مجازی ErLang اجرا میشود(The ErLang VM). ماشین مجازی ErLang سابقهی بیستوپنجساله دارد و سیستمهای بزرگ و سنگین، با قابلیت تحمل خطای بالا(High Availability) و زمان پاسخگویی پایینِ(Low Latency) زیادی از آن قدرت گرفتهاند.
در حال حاضر اولویت استفاده از Elixir طراحی Web Application است؛ یا با استفاده از Cowboy(یک HTTP Server ساده) یا Phoenix(یک فریمورک کامل برای وب اپلیکیشن).
سینتکس و ابزارهای(Toolchain) Elixir، از Ruby الهام گرفته شده است. سینتکس شباهت ساده و ظاهریای با Ruby دارد، اما هرکسی با این زبان کار کرده باشد؛ به راحتی میتواند با ابزارهای Elixir کار کند.
اهداف زبان:
- زبان تابعی محبوب(Friendly): قدرت و مزایای یک زبان برنامهنویسی تابعی، همراه با سینتکسی روان
- همروند و مقیاسپذیر:
- ابزار توسعهای عالی: ابزاری برای ساخت، مدیریت پیشنیازها، آزمون و استقرار.
ویژگیهای متمایز:
- تغییرناپذیر بودن ساختار داده و نبودن تاثیرات جانبی به بهبود نگهداری سیستمهای بزرگ کمک میکند.
- سوپرویژن به شما اجازه تعریف یک درخت پردازش و تنظیم یک چهارچوب برای ریکاوری خودکار ارورها را میدهد.
- مدیریت منابع بسیار کارامد؛ به این معنا که با داشتن سختافزار محدود میتوان به کاربران زیادی سرویس ارائه داد.
Elixir و Phoenix درحال محبوب شدن هستند، زیرا ترکیب آنها اجازهی ساخت APIهای پیچیده و قدرتمند، و اپلیکیشنهایی با قابلیت نگهداری بالا، عملکرد عالی و مقیاسپذیر را میدهد. به همین علت است که کمپانیهای بزرگی مثل Pinterest و Bleacher Reports به Elixir بهعنوان یک قسمت کلیدی در زیرساخت محصول خود علاقه نشان میدهند. شما میتوانید بدون نیاز به قربانی کردن کارایی، بهرهوری در محصول را بالا ببرید(یا برعکس)، ادعایی که در زبانهای دیگر به آسانی بهدست نیامده است.
منبع
pingback اصطلاحات انگلیسی-سری دوم – رضا سنگسفیدی؛ دنیای باینری، فیلم و خالی کردن آب حوض!
pingback معرفی سه اپلیکیشن+یک محتوای مفید – رضا سنگسفیدی؛ دنیای باینری، فیلم و خالی کردن آب حوض!