دينو (بيئة تشغيل)
دينو هو منفذ لـ JavaScript و TypeScript في وقت تشغيل مبني على محرك V8 JavaScript ولغة البرمجة Rust . تم إنشاؤه بواسطة Ryan Dahl ، المصمم الأصلي لـ Node.js ، ويركز على الأمان والإنتاجية. [4] تم الإعلان عنه من قبل داهل في عام 2018 خلال حديث له بعنوان "10 أشياء مؤسفة حول Node.js". [5] يقوم "دينو (البرمجية)" بالتنفيذ في وقت التشغيل وكذلك إدارة الحزم ضمن ملف تنفيذي واحد ، بدلاً من طلب ذلك من برنامج منفصل لإدارة الحزم أي يستغني على npm. [6] [7]
Deno
|
نظرة تاريخية
تم الإعلان عن Deno في JSConf EU 2018 من قبل Ryan Dahl في حديثه حول "10 أشياء مؤسفة عن Node.js". [5]، و ذكر ريان عن أسفه لقرارات التصميم الأولية لـNode.js ، مع التركيز على اختياراته بعدم استخدام الـ Promises في تصميم واجهة برمجة التطبيقات ، واستخدام نظام بناء GYP القديم ، و node_modules و package.json ، وترك ملحقات الملفات ، وmagical module باستخدام index.js وكسر بيئة الحماية (sandboxed ) من V8. [8]
وقدم Ryan Dahl في النهاية النموذج الأولي لـ Deno ، تهدف إلى ربط النظام من خلال تمرير الرسائل باستخدام أدوات مثل Buffers Protocol ، وتوفير أوامر الطرفية (موجه الأوامر) للتحكم في الوصول .
نظرة عامة حول دينو
تهدف دينو إلى أن تكون بيئة نصية منتجة وآمنة للمبرمج الحديث. [6] على غرار نود.جي إس، دينو نؤكد على التحريك بالحدث 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 في الجوانب التالية:[6]
- يستخدم (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 مايو 2019. اطلع عليه بتاريخ 05 يوليو 2019. الوسيط
|CitationClass=
تم تجاهله (مساعدة) - "deno/LICENSE at master". GitHub. مؤرشف من الأصل في 29 مايو 2019. اطلع عليه بتاريخ 05 يوليو 2019. الوسيط
|CitationClass=
تم تجاهله (مساعدة) - "The MIT License". Open Source Initiative. 17 September 2018. مؤرشف من الأصل في 9 مايو 2020. اطلع عليه بتاريخ 17 سبتمبر 2018. الوسيط
|CitationClass=
تم تجاهله (مساعدة) - "Deno: Secure V8 TypeScript Runtime from Original Node.js Creator". InfoQ. مؤرشف من الأصل في 8 يناير 2020. اطلع عليه بتاريخ 17 مايو 2019. الوسيط
|CitationClass=
تم تجاهله (مساعدة) - JSConf (2018-06-06), 10 Things I Regret About Node.js - Ryan Dahl - JSConf EU 2018, مؤرشف من الأصل في 25 أبريل 2020, اطلع عليه بتاريخ 17 مايو 2019 الوسيط
|CitationClass=
تم تجاهله (مساعدة); الوسيط|separator=
تم تجاهله (مساعدة)CS1 maint: ref=harv (link) - "Deno Manual". deno.land. مؤرشف من الأصل في 15 أبريل 2020. اطلع عليه بتاريخ 17 مايو 2019. الوسيط
|CitationClass=
تم تجاهله (مساعدة) - Paul Krill (2018-06-21). "Ryan Dahl's Node.js regrets lead to Deno". InfoWorld. مؤرشف من الأصل في 25 أبريل 2020. الوسيط
|CitationClass=
تم تجاهله (مساعدة) - Dahl, Ryan (2018-06-06). "Design mistakes in Node" (PDF). Github. مؤرشف من الأصل (PDF) في 22 فبراير 2020. الوسيط
|CitationClass=
تم تجاهله (مساعدة)
روابط خارجية
- بوابة برمجة الحاسوب
- بوابة برمجيات حرة
- صور وملفات صوتية من كومنز