دينو (بيئة تشغيل)
دينو هو منفذ لـ JavaScript وTypeScript في وقت تشغيل مبني على محرك V8 JavaScript ولغة البرمجة Rust . تم إنشاؤه بواسطة Ryan Dahl ، المصمم الأصلي لـ Node.js ، ويركز على الأمان والإنتاجية.[7] تم الإعلان عنه من قبل داهل في عام 2018 خلال حديث له بعنوان «10 أشياء مؤسفة حول Node.js».[8] يقوم «دينو (البرمجية)» بالتنفيذ في وقت التشغيل وكذلك إدارة الحزم ضمن ملف تنفيذي واحد، بدلاً من طلب ذلك من برنامج منفصل لإدارة الحزم أي يستغني على npm.[9][10]
Deno
|
نظرة تاريخية
تم الإعلان عن Deno في JSConf EU 2018 من قبل Ryan Dahl في حديثه حول «10 أشياء مؤسفة عن Node.js».[8]، وذكر ريان عن أسفه لقرارات التصميم الأولية لـNode.js ، مع التركيز على اختياراته بعدم استخدام الـ Promises في تصميم واجهة برمجة التطبيقات، واستخدام نظام بناء GYP القديم، و node_modules و package.json ، وترك ملحقات الملفات، وmagical module باستخدام index.js وكسر بيئة الحماية (sandboxed) من V8.[11]
وقدم Ryan Dahl في النهاية النموذج الأولي لـ Deno ، تهدف إلى ربط النظام من خلال تمرير الرسائل باستخدام أدوات مثل Buffers Protocol ، وتوفير أوامر الطرفية (موجه الأوامر) للتحكم في الوصول.
نظرة عامة حول دينو
تهدف دينو إلى أن تكون بيئة نصية منتجة وآمنة للمبرمج الحديث.[9] على غرار نود.جي إس، دينو نؤكد على التحريك بالحدث 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 في الجوانب التالية:[9]
- يستخدم (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/
المراجع
- وصلة مرجع: https://api.github.com/repos/denoland/deno. الوصول: 25 أغسطس 2019.
- "Contributors, denoland/deno, Github"، مؤرشف من الأصل في 30 مايو 2019، اطلع عليه بتاريخ 05 يوليو 2019.
- وصلة مرجع: https://github.com/denoland/deno/releases/tag/v1.24.0. تاريخ النشر: 21 يوليو 2022. الوصول: 24 يوليو 2022.
- "Deno 1.24 Release Notes"، 21 يوليو 2022، اطلع عليه بتاريخ 24 يوليو 2022.
{{استشهاد ويب}}
: تحقق من التاريخ في:|access-date=
و|date=
(مساعدة) - "deno/LICENSE at master"، GitHub، مؤرشف من الأصل في 29 مايو 2019، اطلع عليه بتاريخ 05 يوليو 2019.
- "The MIT License"، Open Source Initiative، 17 سبتمبر 2018، مؤرشف من الأصل في 9 مايو 2020، اطلع عليه بتاريخ 17 سبتمبر 2018.
- "Deno: Secure V8 TypeScript Runtime from Original Node.js Creator"، InfoQ، مؤرشف من الأصل في 8 يناير 2020، اطلع عليه بتاريخ 17 مايو 2019.
- JSConf (06 يونيو 2018)، 10 Things I Regret About Node.js - Ryan Dahl - JSConf EU 2018، مؤرشف من الأصل في 25 أبريل 2020، اطلع عليه بتاريخ 17 مايو 2019
- "Deno Manual"، deno.land، مؤرشف من الأصل في 15 أبريل 2020، اطلع عليه بتاريخ 17 مايو 2019.
- Paul Krill (21 يونيو 2018)، "Ryan Dahl's Node.js regrets lead to Deno"، InfoWorld، مؤرشف من الأصل في 25 أبريل 2020.
- Dahl, Ryan (06 يونيو 2018)، "Design mistakes in Node" (PDF)، Github، مؤرشف من الأصل (PDF) في 22 فبراير 2020.
روابط خارجية
- دينو على موقع Open Hub (الإنجليزية)
- الموقع الرسمي
- بوابة برمجة الحاسوب
- بوابة برمجيات حرة