
لقد مر حوالي 18 شهرًا منذ الإصدار الداخلي لـ Deno ، وتم إصدار إصدار معاينة ، وظهرت مقالات عديدة على Habré ، وذهب Ryan إلى المؤتمرات والمحادثات حوله. ومع ذلك ، لم أر تحليلًا مدروسًا لهذا المشروع في أي مكان - لسبب ما يقتصر الجميع على ترجمة الوثائق ...
حسنًا ، دعنا نحاول القيام بذلك الآن. على مدار السنوات الخمس الماضية ، كنت أكتب على Node.JS ، وكانت شركة OneTwoTrip ، حيث أعمل الآن ، تكتب مشاريع على العقدة منذ حوالي 9 سنوات (نعم ، كتبت القصة حول 9 سنوات في متراصة على العقدة ). لذلك يجب أن يكون التحليل جيدًا. علاوة على ذلك ، أخبرته بالفعل في Moscow Node.JS Meetup 10 ، وكان الأمر ممتعًا. بالمناسبة ، إذا كان من الأنسب لك الاستماع ، وليس القراءة ، فيمكنك الاستماع والمشاهدة هنا . خطابي الثاني ، أنا رجل في قميص وردي.
من الغريب ، من أجل فهم من أين جاء المشروع ولماذا ، من الضروري الوقوع في الماضي. لذلك نحن نرمي القليل من البلوتونيوم ، ونرفع أبواب قناطرنا ، ونبدأ رحلة - انظر إلى السنوات العشر المهمة التي جعلت Node.JS بالطريقة التي نراها الآن.

إلى الأمام إلى الماضي
2009
تعلن ريان دال عن Node.JS ، ها هي - أول عرض تقديمي في JSConf 2009.
2010
Express ، socket.io يظهر - الطوب الرئيسي في الوقت الحالي هي أي خدمة تقريبا.
هناك أشخاص مجانين يكتبون حقًا كود الخادم على هذا!
2011
يبدأ الرجال الكبار في المغازلة مع Node.JS - بما في ذلك Uber و Linkedin.
Npm 1.0 الافراج.
العقدة تبدأ العمل على ويندوز.
2012
ريان يتحرك بعيدا عن تطوير Node.JS. تذكر . كان عام 2012. ريان هو بالتأكيد خالق وفعل الكثير من أجل النظام الإيكولوجي - لكن السنوات السبع القادمة مرت دون مشاركته.
2013
العقدة في باي بال ، وول مارت ، يباي.
يبدو Koa - تذكر عدد النسخ التي تم كسرها عن المولدات؟
2014
العقدة في Netflix. بدأت المحاولات في إضفاء الطابع الرسمي على المشروع إلى شيء أكثر نضجًا ، من خلال نموذج مفتوح لإدارة مجلس استشاري. هناك ركود فني يؤدي إلى مفترق io.js.
2015
العمل على الخلل. دمج io.js و Node في النشوة تحت رعاية Node Foundation وإصدار Node 4. يجب أن أقول ، هذه هي النسخة التي أعتبرها الأولى التي كان من الممكن فيها بالفعل تطوير شيء ما. إذا كتب شخص ما على الإصدارات 0.xx - فأنت تتذكر حول var ، و callback hell ، ومجموعة من المكتبات المختلفة لتبسيط العمل غير المتزامن (مثل step و async. نعم ، المزامنة لا تنتظر فقط ، ولكن أيضًا مكتبة npm).
2016
الحادث مع لوحة اليسار ، والتي لا تزال ألسنة أشر استدعاء النظام البيئي. كم عدد المقالات والهجمات. حسنا كارهي ستعمل الكراهية. ومع ذلك ، تم تعلم دروس مهمة من هذا.
2017
اختراق السنة. لن أذكر كل إصدارات العقدة والزيادة في عدد منشآت الوحدات النمطية مع npm ، ولكن هذا العام تجاوز عدد الخدمات على Node.JS 8 ملايين ، وكان عدد المنشآت 3 مليار في الأسبوع. شخصيات كونية مطلقة يصعب تخيلها.
ظهر N-API أيضًا ، وتم تفرع Node.JS مرة أخرى في Ayo.js. قصة مضحكة ومفيدة للغاية عن SJW - إنها تستحق مقالة منفصلة ، لذلك لن أتناولها - أوصي بقراءتها في وقت فراغك. فقط إلى المنقب أن شوكة توفي بأمان.
2018
الهستيريا الجماعية الثانية منذ لوحة اليسار - الآن حول كيفية سرقة الأحداث - bitcoins. مئات من المشاركات حول انعدام الأمن في النظام الإيكولوجي. نشرات خيالية حول كيفية سرقة حزم npm معلومات بطاقة الائتمان. المجتمع يرش الوحل كخرطوم. يجب أن أقول ، لقد كان مفيدًا للغاية ، وتم أيضًا استخلاص استنتاجات - عنهم بعد قليل.
أيضًا ، قام Ryan بتفجير منشورات المجتمع بشكل مفاجئ حول حقيقة أن الخدمات الجادة تستحق الكتابة على Go ، ويصف 10 أشياء في Node يندم عليها ، ويعلن Deno ، الذي يحل جميع المشكلات.
2019
يذهب Deno إلى إصدار المعاينة ، وتظهر مجموعة من المقالات على لوحة الوصل ، والآن تقرأ أحدها.

العودة إلى الوقت الحاضر
آمل أنه بعد هذه الجولة ، أصبح من الواضح أكثر ما هو نوع البقع الحادة التي كان لدى النظام البيئي وكيف تطورت - بوجود هذا السياق ، أصبح من الأسهل بكثير فهم ما يحدث الآن.
10 أشياء Ryan Dahl تأسف حول Node.JS
لسوء الحظ ، لم أجد المقال مقيدًا بترجمة التقرير ، لذا سأدرجه هنا لفترة وجيزة ، وهنا سأعلق.
- عدم وجود وعود في بداية الرحلة . نعم ، كان من الأسهل لو لم يقطع Ryan الوعود ، معتبرًا أنها تعقيد إضافي لم ينطلق في بداية تطوير العقدة. من المؤكد أن الوقت الضائع لكل هذا الجحيم في معاودة الاتصال أمر مؤسف - ولكن في عام 2019 ، أصبحت جميع المكتبات العاقلة تعد بالواجهة الرئيسية. علاوة على ذلك ، حتى مكتبات النظام تقدم أخيرًا وعودًا.
- أمان مكالمات النظام ومكالمات الشبكة. من ناحية - نعم ، إنه أمر جيد عندما يكون كل شيء آمنًا. من ناحية أخرى ، ليس من الواضح كيف تحولت العقدة في هذا الصدد إلى أسوأ من أي وسيلة أخرى ....
- بناء وحدات أصلية باستخدام GYP. نعم ، ربما كان لا لزوم لها ، ولكن الذين عرفوا أن الكروم سيتركها. مرة أخرى - إذا اختفى الكروم ، فبإمكاننا أن نغادر أيضًا ....
- الحزمة المفرطة. json. NPM كسجل احتكار. الحجة حول package.json غريبة بعض الشيء. على سبيل المثال ، يقول ريان أن هناك أي قمامة مثل الترخيص. ولكن إذا لم تكن موجودة ، فكيف يمكنك بسرعة العثور على تراخيص الوحدات المستخدمة في مشروعك؟ .. الحجة حول NPM أشبه بالحقيقة ، لكننا سنناقش هذا بمزيد من التفصيل لاحقًا.
- وحدات العقدة. دقة معقدة من التبعيات لا يعمل كما هو الحال في المتصفح. نعم هذا صحيح. بدأت التبعيات المستقرة توضع دون أي معجزات فقط على إصدار 4-5 من npm. لكن الآلية تعمل ، وتتيح لك القيام بأشياء مذهلة - في الوقت الحالي ، هذا جيد. بالنسبة للتوافق مع المستعرض ، بغض النظر عن ما تفعله ، ستظل هناك مراحل لمعالجة الشفرة مثل تجميع وجمع الحزم. لذلك ، من غير المرجح أن يكون لوحدات العقدة أي معنى في هذا السياق.
- تتطلب دون تمديد وعدم اليقين . نعم ، ربما سيئة. ولكن لا يكفي أن أذكر ذلك ...
- index.js كمضاعفات غير ضرورية. أيضا نقطة تافهة ومملة للغاية لوصف.
بالمناسبة ، عقليا ، قلت إن ريان يندم على 10 أشياء ، ولكن فقط 7 نقاط ، وهذا ليس خطأ ، لقد راجعت تقريره عدة مرات ومراجعات التقرير. إما أنها كانت مزحة معقدة حول موضوع معالجة القيم العددية ، أو كان ريان خجولًا جدًا لتسمية 3 نقاط أخرى ...
لكن حسنًا ، فهمنا المشكلات ، واستمررنا. منطقيا ، في دينو ، قرر ريان التخلص من جميع مشاكل Node.JS. دعونا نرى ما حدث له.
ما دينو يتكون من
- دينو هو مكتوب في الصدأ.
- كحلقة حدث ، يستخدم Deno Tokio ، المكتوب مرة أخرى في Rust.
- Deno يدعم Typescript خارج المربع.
- حسنًا ، يتم تنفيذ الكود باستخدام نفس V8 ، والذي استحوذ على العالم بأسره.
للوهلة الأولى يبدو الأمر جيدًا ، لكن دعونا نلقي نظرة فاحصة على هذه النقاط.
الصدأ . لا ، أرجو أن تفهموني بشكل صحيح - أعتقد أن الصدأ والذهاب هما لغتان رائعتان ، وأنا سعيد بإخلاص أنها كذلك. أنها تجعل من الممكن كتابة التعليمات البرمجية ذات المستوى المنخفض بشكل أسرع وأكثر أمانًا من C ++. ومع ذلك ، هناك فارق بسيط - في أفضل الأحوال ، لن يكون أبطأ من التنفيذ في C ++. لذلك أنا شخصياً لا أرى نقطة في كتابة تماثل كامل لسلاسل النظام وحلقة حدث - من غير المرجح أن تحقق أي فائدة حقيقية ، لأن هذه هي الأشياء التي تصل في مرحلة ما ببساطة إلى الحالة المثالية ولم يتم تحسينها بالفعل.
نسخة مطبوعة على الآلة الكاتبة. مرة أخرى - ليس لدي شيء ضد TS. يستخدمه عدد كبير من الشركات والمطورين ، وقد أظهر بالفعل قيمته. ولكن Deno يخفي فقط transpiler في الثنائي ، ورمز transpiled في الدلائل الخاصة. وهذا هو ، كل شيء هو نفسه تحت غطاء محرك السيارة ، وليس هناك فائدة في هذا ، باستثناء الجمالية. ولكن هناك ناقص - إصدار transpiler مسمر بإحكام إلى إصدار Deno. لست متأكدًا من أن هذا أمر جيد - فمن السهل تخيل موقف تريد فيه تحديث جهاز الإرسال أو وقت التشغيل. لكن ليس الاثنين معا.
لذلك في حين لا شيء لذيذ مرئيا. دعنا نذهب أبعد من ذلك ، إلقاء نظرة على الميزات الرئيسية.
الاختلافات الرئيسية بين Deno و Node.JS
لا يستخدم Deno npm. لا يوجد سجل مركزي. يتم استيراد الوحدات عن طريق URL. لا package.json.
وهذا يعني أن الرمز يبدو كالتالي:
import { test, runIfMain } from "https://deno.land/std/testing/mod.ts";
import { assertEquals } from "https://deno.land/std/testing/asserts.ts";
test(function t1() {
assertEquals("hello", "hello");
});
, . . , . :
- . , , . . , :
1.1. , , .
1.2. , , , .
1.3. , . 2012 , npm , ? , " "? - , . github, gitlab, , . . . npm , , — , ? — . Entropic, , , — .
. , - ( ) — … … 2019? , , 2012 Node.JS shrinkwrap, lock file? , ?
, URL — , — .
Deno Promise.
, . 2012 — . . - .
Deno Uncaught Errors
. Node.JS . .
ES Modules, require
, , . , Node.JS ES Modules...
Deno , .
! … — allow-read, allow-net, allow-run, allow-env. - :
deno --allow-read=/etc https://deno.land/std/examples/cat.ts /etc/passwd
:
- .
- , --allow-all.
- . . , , . . , — .
- . , , . . , 2019 2012, — ...
. . NPM.

, npm 2012 :
- . .
- Lock file .
- . github, snyk npm.
- .
- .
- — , , .
- .
npm … , . , , … " ", — facebook, google, microsoft, gitlab… , npm .
:
- Rust — .
- TypeScript — .
- URL NPM — .
- — .
- . . . !

Deno. " , " — , , Deno — .
, , , , . Deno , , Moscow Node.JS Meetup — . — , - ?