# دينو (برمجية)

دينو (بالإنجليزية: Deno)‏ هو منفذ لـ JavaScript وTypeScript في وقت تشغيل مبني على محرك V8 JavaScript ولغة البرمجة Rust . تم إنشاؤه بواسطة Ryan Dahl ، المصمم الأصلي لـ Node.js ، ويركز على الأمان والإنتاجية. تم الإعلان عنه من قبل داهل في عام 2018 خلال حديث له بعنوان «10 أشياء مؤسفة حول Node.js». يقوم «دينو (البرمجية)» بالتنفيذ في وقت التشغيل وكذلك إدارة الحزم ضمن ملف تنفيذي واحد، بدلاً من طلب ذلك من برنامج منفصل لإدارة الحزم أي يستغني على npm.

## نظرة تاريخية

تم الإعلان عن Deno في JSConf EU 2018 من قبل Ryan Dahl في حديثه حول «10 أشياء مؤسفة عن Node.js».، وذكر ريان عن أسفه لقرارات التصميم الأولية لـNode.js ، مع التركيز على اختياراته بعدم استخدام الـ Promises في تصميم واجهة برمجة التطبيقات، واستخدام نظام بناء GYP القديم، و node_modules و package.json ، وترك ملحقات الملفات، وmagical module باستخدام index.js وكسر بيئة الحماية (sandboxed) من V8.
وقدم Ryan Dahl في النهاية النموذج الأولي لـ Deno ، تهدف إلى ربط النظام من خلال تمرير الرسائل باستخدام أدوات مثل Buffers Protocol ، وتوفير أوامر الطرفية (موجه الأوامر) للتحكم في الوصول.

## نظرة عامة حول دينو

تهدف دينو إلى أن تكون بيئة نصية منتجة وآمنة للمبرمج الحديث. على غرار نود.جي إس، دينو نؤكد على التحريك بالحدث event-driven architecture- ، وتوفير IO الأساسية من <a href="https://en.wikipedia.org/wiki/Non-blocking_I/O" rel="mw:ExtLink" title="Non-blocking I/O" class="mw-redirect cx-link" data-linkid="97">non-blocking</a> ، جنبا إلى جنب مع الإصدارات المحجوبة (blocking . يمكن استخدام Deno لإنشاء خوادم الويب وإجراء الحسابات العلمية وما إلى ذلك.

### مقارنة مع Node.js

كل من دينو ونود.جي أس يعملان في وقت التشغيل مبني على محرك جافا سكريبت V8 المصمم من جوجل، وهو نفس المحرك المستخدم في جوجل كروم.
كلاهما لديه حلقات الحدث ويوفر واجهات سطر الأوامر CLI لتشغيل البرامج النصية ومجموعة واسعة من أدوات النظام المساعدة.
يختلف Deno بشكل أساسي مع Node.js في الجوانب التالية:
* يستخدم (Module ES) كنظام الوحدة النمطية الافتراضي، بدلاً من CommonJS .
* يستخدم عناوين URL لتحميل التبعيات (المكتبات) المحلية أو البعيدة، كما هو الحال في المتصفحات.
* يتضمن مدير حزم مدمجًا لجلب الموارد، وبالتالي لا حاجة لـ إن بي إم .
* يدعم TypeScript، باستخدام مترجم TypeScript مع آليات التخزين المؤقت.
* تهدف إلى توافق أفضل مع المتصفحات مع مجموعة واسعة من ال Web API.
* يسمح بالتحكم في نظام الملفات والوصول إلى الشبكة من أجل تشغيل البرنامج في وضع الحماية.
* إعادة تصميم واجهة التطبيقات البرمجية الـAPI لاستخدام ميزات Promises و ES6 و TypeScript.
* يقلل حجم واجهة برمجة التطبيقات الأساسي، مع توفير مكتبة قياسية كبيرة بدون تبعيات (مكتبات) خارجية.
* استخدام قنوات تمرير الرسائل لاستدعاء واجهات برمجة تطبيقات النظام المتميزة واستخدام عمليات الربط.

## أمثلة

فيما يلي برنامج نصي Deno أساسي دون أي أذونات للقراءة / الكتابة / الشبكة (في وضع الحماية):
الأوامر الصريحة المطلوبة لطلب الأذونات:
لفحص شجرة التبعيات للبرنامج، استخدم الأمر الفرعي info :
يشبه برنامج hello-world الأساسي في Deno ما يلي (كما هو الحال في Node.js):
يوفر Deno مساحة الاسم (namespace) لمعظم واجهات برمجة التطبيقات الخاصة بـ Deno والتي لا تتوفر في المتصفح. يمكن تنفيذ برنامج Unix cat على النحو التالي:
تعمل وظيفة Deno.copy المذكورة أعلاه بنفس الطريقة التي تعمل بها Go's Copy.io ، حيث stdout (الإخراج القياسي) هو وجهة Writer و file هو مصدر للـ Reader .
لتشغيل هذا البرنامج، نحتاج إلى توفير إذن القراءة من نظام الملفات:
يقوم نص Deno التالي بتنفيذ برنامج خادم HTTP أساسي:
عند تشغيل هذا البرنامج، يقوم دينو تلقائيًا بتنزيل ملفات المكتبات القياسية البعيدة (في خوادم خارجية) وتخزينها مؤقتًا وتحويلها.
وبالمثل، يمكننا تشغيل برنامج نصي قياسي لمكتبة (مثل خادم ملفات (HTTP server)) مباشرة بدون تنزيل مباشر.
لتنفيذ البرنامج بجميع الأذونات أضف الأمر الفرعي -A مثل المثال التالي: