دينو (برمجية)
المحتويات

في البداية، دينو هو بيئة تشغيل لـ JavaScript وTypeScript في وقت تشغيل مبني على محرك V8 JavaScript ولغة البرمجة رست. تم إنشاؤه بواسطة Ryan Dahn، المصمم الأصلي لـ نود.جي اس، ويركز على الأمان والإنتاجية. تم الإعلان عنه من قبل داهل في عام 2018 خلال حديث له بعنوان «10 أشياء مؤسفة حول Node.js». يقوم «دينو (البرمجية)» بالتنفيذ في وقت التشغيل وكذلك إدارة الحزم ضمن ملف تنفيذي واحد، بدلاً من طلب ذلك من برنامج منفصل لإدارة الحزم أي يستغني على npm. وتعرض الأقسام التالية جوانب أخرى من الموضوع.
أمثلة
const { stdout, open, copy, args } = Deno;
/* Deno APIs are exposed through the `Deno` namespace. */
علاوةً على ذلك، فيما يلي برنامج نصي Deno أساسي دون أي أذونات للقراءة / الكتابة / الشبكة (في وضع الحماية): deno run main.ts الأوامر الصريحة المطلوبة لطلب الأذونات: deno run --allow-read --allow-net main.ts لفحص شجرة التبعيات للبرنامج، استعمل الأمر الفرعي info : deno info main.ts يشبه برنامج hello-world الأساسي في Deno ما يلي (كما هو الحال في Node.js): console.log("مرحبا يا عالم"); يوفر Deno مساحة الاسم (namespace) لأغلب واجهات برمجة التطبيقات الخاصة بـ Deno والتي لا تتوفر في المتصفح. يمكن تنفيذ برنامج Unix cat على النحو التالي: /* cat.ts */
نظرة تاريخية
وفي هذا السياق، تم الإعلان عن 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، وتوفير أوامر الطرفية (موجه الأوامر) للتحكم في الوصول.
مقارنة مع Node.js
- يتضمن مدير حزم مدمجًا لجلب الموارد، وبالتالي لا حاجة لـ إن بي إم.
- يدعم TypeScript، باستخدام مترجم TypeScript مع آليات التخزين المؤقت.
- تهدف إلى توافق أفضل مع المتصفحات مع مجموعة واسعة من ال Web API.
من جهة ثانية، كلاهما لديه حلقات الحدث ويوفر واجهات سطر الأوامر CLI لتشغيل البرامج النصية ومجموعة واسعة من أدوات النظام المساعدة.
من جهة ثانية، يستعمل (Module ES) كنظام الوحدة النمطية الافتراضي، بدلاً من CommonJS.
وفي هذا السياق، يقلل حجم واجهة برمجة التطبيقات الأساسي، مع توفير مكتبة قياسية كبيرة بدون تبعيات (مكتبات) خارجية.
وفي هذا السياق، استخدام قنوات تمرير الرسائل لاستدعاء واجهات برمجة تطبيقات النظام المتميزة واستخدام عمليات الربط.
يختلف Deno بشكل أساسي مع Node.js في الجوانب التالية:
كذلك، إعادة تصميم واجهة التطبيقات البرمجية الـAPI لاستخدام ميزات Promises و ES6 و TypeScript.
وفي هذا السياق، كل من دينو ونود.جي أس يعملان في وقت التشغيل مبني على محرك جافا سكريبت V8 المصمم من جوجل، وهو نفس المحرك المستعمل في جوجل كروم.
إضافةً إلى ذلك، يسمح بالتحكم في نظام الملفات والوصول إلى الشبكة من أجل تشغيل البرنامج في وضع الحماية.
في هذا الإطار، يستعمل عناوين URL لتحميل التبعيات (المكتبات) المحلية أو البعيدة، كما هو الحال في المتصفحات.
// Top-level await is supported
في هذا الإطار، import { serve } from "https://deno.land/std@v0.21.0/http/server.ts";
في هذا الإطار، } تعمل وظيفة Deno.copy المذكورة أعلاه بنفس الطريقة التي تعمل بها Go's Copy.io ، حيث stdout (الإخراج القياسي) هو وجهة Writer و file هو مصدر للـ Reader.
في هذا الإطار، // `serve` function returns an asynchronous iterator, yielding a stream of requests
for await (const req of serve({ port: 8000 })) {
- for (let i = 0; i < args.length; i++) {
- const filename = args[i]؛ // Obtains command-line arguments.
- const file = await open(filename); // Opens the corresponding file for reading.
وعلى صعيد آخر، await copy(stdout, file); // Performs a zero-copy asynchronous copy from `file` to `stdout`.
من جانب آخر، لتشغيل هذا البرنامج، نحتاج إلى توفير إذن القراءة من نظام الملفات: deno run --allow-read cat.ts myfile يقوم نص Deno التالي بتنفيذ برنامج خادم HTTP أساسي: // Imports `serve` from the remote Deno standard library, using URL.
Compile https://deno.land/std/http/file_server.ts
- ...
- HTTP server listening on http://0.0.0.0:4500/
- المراجع
req.respond({ body: "Hello World\n" });
علاوةً على ذلك، وبالمثل، يمكننا تشغيل برنامج نصي قياسي لمكتبة (مثل خادم ملفات (HTTP server)) مباشرة بدون تنزيل مباشر.
وفي السياق ذاته، لتنفيذ البرنامج بجميع الأذونات أضف الأمر الفرعي -A مثل المثال التالي: $ deno run -A https://deno.land/std/http/file_server.ts
Download https://deno.land/std/http/file_server.ts
وفي السياق ذاته، } عند تشغيل هذا البرنامج، يقوم دينو تلقائيًا بتنزيل ملفات المكتبات القياسية البعيدة (في خوادم خارجية) وتخزينها مؤقتًا وتحويلها.
نظرة عامة حول دينو
من جهة ثانية، تهدف دينو إلى أن تكون بيئة نصية منتجة وآمنة للمبرمج الحديث. على غرار نود.جي إس، دينو نؤكد على التحريك بالحدث event-driven architecture-، وتوفير IO الأساسية، جنبا إلى جنب مع الإصدارات المحجوبة (blocking. يمكن استخدام Deno لإنشاء خوادم الويب وإجراء الحسابات العلمية وما إلى ذلك.
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟