دينو هو منفذ لـ JavaScript و TypeScript في وقت تشغيل مبني على محرك V8 JavaScript ولغة البرمجة Rust . تم إنشاؤه بواسطة Ryan Dahl ، المصمم الأصلي لـ Node.js ، ويركز على الأمان والإنتاجية. [6] تم الإعلان عنه من قبل داهل في عام 2018 خلال حديث له بعنوان "10 أشياء مؤسفة حول Node.js". [7] يقوم "دينو (البرمجية)" بالتنفيذ في وقت التشغيل وكذلك إدارة الحزم ضمن ملف تنفيذي واحد ، بدلاً من طلب ذلك من برنامج منفصل لإدارة الحزم أي يستغني على npm. [8] [9]
نوع | |
---|---|
نظام التشغيل | |
موقع الويب |
(الإنجليزية) deno.land |
المطور الأصلي | |
---|---|
المطورون |
Various |
لغة البرمجة | |
الإصدار الأول |
13 مايو 2018 |
إصدار تجريبي |
1.0.0-rc1 |
المستودع | |
الرخصة |
مأخوذ عن |
---|
نظرة تاريخية
تم الإعلان عن 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] :
- يستخدم (Module ES) كنظام الوحدة النمطية الافتراضي ، بدلاً من CommonJS .
- يستخدم عناوين URL لتحميل التبعيات (المكتبات) المحلية أو البعيدة ، كما هو الحال في المتصفحات .
- يتضمن مدير حزم مدمجًا لجلب الموارد ، وبالتالي لا حاجة لـ Npm .
- يدعم TypeScript، باستخدام مترجم TypeScript مع آليات التخزين المؤقت.
- تهدف إلى توافق أفضل مع المتصفحات مع مجموعة واسعة من ال Web API.
- يسمح بالتحكم في نظام الملفات والوصول إلى الشبكة من أجل تشغيل البرنامج في وضع الحماية.
- إعادة تصميم واجهة التطبيقات البرمجية الـAPI لاستخدام ميزات Promises و ES6 و TypeScript.
- يقلل حجم واجهة برمجة التطبيقات الأساسي ، مع توفير مكتبة قياسية كبيرة بدون تبعيات (مكتبات) خارجية.
- استخدام قنوات تمرير الرسائل لاستدعاء واجهات برمجة تطبيقات النظام المتميزة واستخدام عمليات الربط.
أمثلة
فيما يلي برنامج نصي 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/
المراجع
- "Contributors, denoland/deno, Github". مؤرشف من الأصل في 30 مايو 201905 يوليو 2019.
- "Deno 1.0.0-rc1". مؤرشف من الأصل في 12 مايو 202005 مايو 2020 – عبر غيت هاب.
- "deno/LICENSE at master". GitHub. مؤرشف من الأصل في 29 مايو 201905 يوليو 2019.
- "The MIT License". Open Source Initiative. 17 September 2018. مؤرشف من الأصل في 9 مايو 202017 سبتمبر 2018.
- Release 1.0.3 — تاريخ الاطلاع: 30 مايو 2020 — تاريخ النشر: 29 مايو 2020
- "Deno: Secure V8 TypeScript Runtime from Original Node.js Creator". InfoQ. مؤرشف من الأصل في 8 يناير 202017 مايو 2019.
- JSConf (2018-06-06), 10 Things I Regret About Node.js - Ryan Dahl - JSConf EU 2018, مؤرشف من الأصل في 25 أبريل 2020,17 مايو 2019
- "Deno Manual". deno.land. مؤرشف من الأصل في 15 أبريل 202017 مايو 2019.
- Paul Krill (2018-06-21). "Ryan Dahl's Node.js regrets lead to Deno". InfoWorld. مؤرشف من الأصل في 25 أبريل 2020.
- Dahl, Ryan (2018-06-06). "Design mistakes in Node" ( كتاب إلكتروني PDF ). Github. مؤرشف من الأصل ( كتاب إلكتروني PDF ) في 22 فبراير 2020.