الرئيسيةعريقبحث

دينو (بيئة تشغيل)

بيئة تشغيل TypeScript وجافاسكربت

☰ جدول المحتويات


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

نظرة تاريخية

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

وقدم Ryan Dahl في النهاية النموذج الأولي لـ Deno ، تهدف إلى ربط النظام من خلال تمرير الرسائل باستخدام أدوات مثل Buffers Protocol ، وتوفير أوامر الطرفية (موجه الأوامر) للتحكم في الوصول .

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

تهدف دينو إلى أن تكون بيئة نصية منتجة وآمنة للمبرمج الحديث. [8] على غرار نود.جي إس، دينو نؤكد على التحريك بالحدث event-driven architecture- ، وتوفير IO الأساسية من <a href="https://en.wikipedia.org/wiki/Non-blocking_I/O" rel="mw:ExtLink.html" 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 في الجوانب التالية [8] :

  1. يستخدم (Module ES) كنظام الوحدة النمطية الافتراضي ، بدلاً من CommonJS .
  2. يستخدم عناوين URL لتحميل التبعيات (المكتبات) المحلية أو البعيدة ، كما هو الحال في المتصفحات .
  3. يتضمن مدير حزم مدمجًا لجلب الموارد ، وبالتالي لا حاجة لـ Npm .
  4. يدعم TypeScript، باستخدام مترجم TypeScript مع آليات التخزين المؤقت.
  5. تهدف إلى توافق أفضل مع المتصفحات مع مجموعة واسعة من ال Web API.
  6. يسمح بالتحكم في نظام الملفات والوصول إلى الشبكة من أجل تشغيل البرنامج في وضع الحماية.
  7. إعادة تصميم واجهة التطبيقات البرمجية الـAPI لاستخدام ميزات Promises و ES6 و TypeScript.
  8. يقلل حجم واجهة برمجة التطبيقات الأساسي ، مع توفير مكتبة قياسية كبيرة بدون تبعيات (مكتبات) خارجية.
  9. استخدام قنوات تمرير الرسائل لاستدعاء واجهات برمجة تطبيقات النظام المتميزة واستخدام عمليات الربط.

أمثلة

فيما يلي برنامج نصي 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 APIs are exposed through the `Deno` namespace. */ const { stdout, open, copy, args } = Deno; // Top-level await is supported 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.copy المذكورة أعلاه بنفس الطريقة التي تعمل بها Go's Copy.io ، حيث stdout ( الإخراج القياسي ) هو وجهة Writer و file هو مصدر للـ Reader . لتشغيل هذا البرنامج ، نحتاج إلى توفير إذن القراءة من نظام الملفات :

deno run --allow-read cat.ts myfile

يقوم نص Deno التالي بتنفيذ برنامج خادم HTTP أساسي:

// Imports `serve` from the remote Deno standard library, using URL. import { serve } from "https://deno.land/std@v0.21.0/http/server.ts"; // `serve` function returns an asynchronous iterator, yielding a stream of requests for await (const req of serve({ port: 8000 })) { 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 Compile https://deno.land/std/http/file_server.ts ... HTTP server listening on http://0.0.0.0:4500/

المراجع

  1. "Contributors, denoland/deno, Github". مؤرشف من الأصل في 30 مايو 201905 يوليو 2019.
  2. "Deno 1.0.0-rc1". مؤرشف من الأصل في 12 مايو 202005 مايو 2020 – عبر غيت هاب.
  3. "deno/LICENSE at master". GitHub. مؤرشف من الأصل في 29 مايو 201905 يوليو 2019.
  4. "The MIT License". Open Source Initiative. 17 September 2018. مؤرشف من الأصل في 9 مايو 202017 سبتمبر 2018.
  5. Release 1.0.3 — تاريخ الاطلاع: 30 مايو 2020 — تاريخ النشر: 29 مايو 2020
  6. "Deno: Secure V8 TypeScript Runtime from Original Node.js Creator". InfoQ. مؤرشف من الأصل في 8 يناير 202017 مايو 2019.
  7. JSConf (2018-06-06), 10 Things I Regret About Node.js - Ryan Dahl - JSConf EU 2018, مؤرشف من الأصل في 25 أبريل 2020,17 مايو 2019
  8. "Deno Manual". deno.land. مؤرشف من الأصل في 15 أبريل 202017 مايو 2019.
  9. Paul Krill (2018-06-21). "Ryan Dahl's Node.js regrets lead to Deno". InfoWorld. مؤرشف من الأصل في 25 أبريل 2020.
  10. Dahl, Ryan (2018-06-06). "Design mistakes in Node" ( كتاب إلكتروني PDF ). Github. مؤرشف من الأصل ( كتاب إلكتروني PDF ) في 22 فبراير 2020.

روابط خارجية

موسوعات ذات صلة :