برنامه‌نویسی

Deno چیست و آیا جایگزین NodeJS خواهد شد؟

Deno چیست؟

نسخه اولیه Deno در تاریخ 13 مه 2020 منتشر شده است. در این مقاله چند واقعیت جالب وجود دارد که ممکن است در تصمیم‌گیری شما، نقش داشته باشد.

افراد مبتدی بدانند که، Deno ساخت رایان دال (Ryan Dahl) است که همچنین به‌خاطر خلق یک چیز کوچک‌تر به‌نام Node.js معروف است؛ برایتان آشنا نیست؟ آیا این بدان معناست که Deno به‌طور خودکار یک جایگزین بالفعل برای Node است و همه ما باید شروع به برنامه ریزی، برای تغییرهای سریع کنیم؟ البته که نه! اما اگر می‌خواهید اطلاعات بیشتری کسب کنید، در ادامه مطلب با من همراه باشید!

بیایید از ابتدا شروع کنیم

در سال 2018، رایان سخنرانی‌ای انجام داد که در آن ۱۰ مورد اصلی را که فکر می‌کرد در Node.js نادرست است، پوشش داد، و در پایان این ارائه، او از Deno پرده برداشت. در آن زمان، Deno فقط یک پروژه کوچک بود که او داشت توسعه می‌داد و شما احتمالا آن را Node.js نسخه‌ی ۲ می‌نامید، پروژه‌ای بهبودیافته و ایمن‌تر برای توسعه‌دهندگان.

در اینجا سخنرانی که بیان شد را می‌بینید:

سخنرانی آقای Ryan Dahl

دوسال بعد، سیزدهم ماه مه، زمانی بود که Deno نسخه 1.0 به‌طور رسمی منتشر ‌شد. runtime جدید JavaScript برای بک‌اند، اما به‌جای اینکه به ‌زبان C++ نوشته شود، بر روی پلتفرم Tokio (که runtime مورد نیاز JavaScript را فراهم می‌کند) به زبان Rust نوشته شد، البته هنوز هم موتور V8 گوگل را اجرا می‌کند.

اما چه چیزی جدید است؟

ما فقط در مورد runtime جدید JavaScript صحبت نمی‌کنیم که با Node.js فعلی کاملاً سازگار می‌باشد، در عوض، رایان از این فرصت استفاده کرد که بعضی از چیزها را در Deno ایجاد کند که به‌نظرش از آفرینش قبلی او گم شده بود.

امنیت یکپارچه است

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

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

deno --allow-read=/etc myscript.ts

توسط دستور بالا یک استثنا امنیتی دریافت کرده و شما به سادگی، مجوز خواندن پوشه /etc را دریافت می‌کنید. این کار دقیقا مانند پلتفرم‌های دیگر است. اگر کاربر اندروید بوده‌اید، بسیاری از برنامه‌ها مجوز دسترسی به قسمت‌های مختلف را از شما درخواست کرده‌اند (برای مثال: مخاطبین، پوشه‌ها). شما با استفاده از این سوییچ‌ها (flags) در هنگام اجرای اسکریپت، مجوزهای لازم را ارائه می‌کنید.

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

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

همچنین می‌توان گفت که دنو با خود ابزارهای ضروری را هم به میدان آورده، اولین ابزار برای رنگ‌دهی به متن‌ها در terminal است. در قدم بعد شما می‌توانید با ساختار داده‌های خارجی (مانند: binary, csv, yaml و …) کار کنید همچنین می‌توانید UUID بسازید و در پایان websockets توسعه دهید. بسیاری ماژول‌های دیگر هست که می‌توانند به‌کمک شما بیاید، مانند دسترسی به فایل‌های سیستمی، توابعی که در تاریخ به کار شما می‌آیند و …

سازگاری با Typescript

آره درست شنیدید، اگر شما طرفدار استفاده از typescript هستید، دیگر نیازی به ابزارهای خارجی نیست! دنو این امکانات را کامل در اختیار شما قرار می‌دهد. یک اتفاق جالب‌تر در دنو! شما به‌صورت پیش‌فرض می‌توانید پیکربندی را با ایجاد فایل tsconfig.json تغییر دهید:

deno run -c tsconfig.json [your-script.ts]

در پیکربندی پیش‌فرض از حالت strict استفاده می‌شود، بنابراین هرگونه برنامه‌نویسی نادرست باعث ایجاد خطا می‌شود.

دیگرخبری از NPM و یا پوشه node_modules نیست!

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

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

import * as log from "https://deno.land/std/log/mod.ts";

اما مراقب خطرهای این‌کار هم باشید، استفاده از منابع شخص ثالثی که شما به‌آنها کنترلی ندارید شما را در معرض خطر قرار می‌دهد.

در واقع، یک دوست عزیز را هم از دست دادیم، در Deno دیگر فایل package.json نداریم. مدیریت وابستگی‌ها ساده‌تر شده، به‌این صورت که شما لیستی از وابستگی‌ها را همراه با آدرس‌شان بصورت URL، در فایلی با نام deps.ts ثبت می‌کنید و تمام. اما درمورد نسخه‌ها چه؟ شما می‌توانید نسخه وابستگی‌ها را در URL شان مشخص کنید، این کار رایجی نیست اما کار می‌کند.

نگاهی به درون فایل deps.ts بیندازیم:

export { assert } from "https://deno.land/std@v0.39.0/testing/asserts.ts";
export { green, bold } from "https://deno.land/std@v0.39.0/fmt/colors.ts";

برای تغییر نسخه ماژول‌ها فقط نیاز به تغییر آدرس URL است. به‌ هر حال، اولین بار که کدهای شما اجرا می‌شوند، تا زمانی که دوباره با پرچم (Flag)، --reload آنها را اجرا کنید، مواردی که import شده‌اند، کش (cache) می‌شوند.

در ادامه:

در پروژه دنو(Deno) هنوز مواردی هست که می‌توانیم مورد بررسی قرارشان دهیم. یکی از این اتفاق‌های بزرگ، افزوده شدن ابزاری برای آزمایش اجرا، اشکال زدایی (debugger)، ناظر پرونده (file watcher) و … است. همچنین باید افزود که بعضی از این ابزار، فقط API هایی هستند که توسط زبان خود برنامه ارائه می‌شوند و برای استفاده از آنها باید خودتان ابزار را کدنویسی کنید.

اگر به‌‌دنبال راه حل مشابهی برای nodemon هستید، باید نگاهی به API های ناظر پرونده (File Watcher) بیندازیم که توسط فایل Deno.watchFs ارائه شده‌اند و خودمان آن ابزار را بسازیم. به‌نظر می‌رسد که در یک اسکریپت 23 خطی مشکل حل می‌شود:

deno-watch-file-like-nodemon
اطلاعات بیشتر در این آدرس

بنابراین، آیا Deno به‌زودی جایگزین Node.js خواهد شد؟

صادقانه بررسی کنیم، این عنوان برای جذب مخاطبان استفاده شده است. برخی از ما استفاده از Node.js را از روزی که حدود نسخه 0.10 بود شروع کردیم و بیشتر برنامه‌ها را با آن توسعه دادیم! گفتن حقیقت کمی ترسناک است اما اگر بخواهیم صادق باشیم، دلیل اصلی استفاده از NodeJs به‌دلیل نبود چیزی مشابه آن بود.

هیچ‌کدام از زبان‌های PHP یا پایتون و روبی (چه رسد به جاوا و .NET) هیچ‌کدارم با JavaScript قابل مقایسه نبودند. زبان جاوااسکریپت از مدل نامتقارن ورودی و خروجی (I/O) در بک‌اند استفاده می‌کرد و این عرصه‌ای جدید را برای توسعه دهندگان بوجود آورده بود.

آیا می‌توان گفت در این سال‌ها جاوااسکریپت، یا همان Node.js نیازهای صنعت را محقق کرده است؟ اساسا نه!

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

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

آیا آن وقت Node را با Deno جایگزین می‌کنیم؟ چه کسی می‌داند! باید صبر کنیم و ببینیم.

شما چه فکر می‌کنید؟

منبع: https://blog.bitsrc.io/what-is-deno-and-will-it-replace-nodejs-a13aa1734a74