Deno: الوقت Node.JS ينفد؟


لقد مر حوالي 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


لسوء الحظ ، لم أجد المقال مقيدًا بترجمة التقرير ، لذا سأدرجه هنا لفترة وجيزة ، وهنا سأعلق.


  1. عدم وجود وعود في بداية الرحلة . نعم ، كان من الأسهل لو لم يقطع Ryan الوعود ، معتبرًا أنها تعقيد إضافي لم ينطلق في بداية تطوير العقدة. من المؤكد أن الوقت الضائع لكل هذا الجحيم في معاودة الاتصال أمر مؤسف - ولكن في عام 2019 ، أصبحت جميع المكتبات العاقلة تعد بالواجهة الرئيسية. علاوة على ذلك ، حتى مكتبات النظام تقدم أخيرًا وعودًا.
  2. أمان مكالمات النظام ومكالمات الشبكة. من ناحية - نعم ، إنه أمر جيد عندما يكون كل شيء آمنًا. من ناحية أخرى ، ليس من الواضح كيف تحولت العقدة في هذا الصدد إلى أسوأ من أي وسيلة أخرى ....
  3. بناء وحدات أصلية باستخدام GYP. نعم ، ربما كان لا لزوم لها ، ولكن الذين عرفوا أن الكروم سيتركها. مرة أخرى - إذا اختفى الكروم ، فبإمكاننا أن نغادر أيضًا ....
  4. الحزمة المفرطة. json. NPM كسجل احتكار. الحجة حول package.json غريبة بعض الشيء. على سبيل المثال ، يقول ريان أن هناك أي قمامة مثل الترخيص. ولكن إذا لم تكن موجودة ، فكيف يمكنك بسرعة العثور على تراخيص الوحدات المستخدمة في مشروعك؟ .. الحجة حول NPM أشبه بالحقيقة ، لكننا سنناقش هذا بمزيد من التفصيل لاحقًا.
  5. وحدات العقدة. دقة معقدة من التبعيات لا يعمل كما هو الحال في المتصفح. نعم هذا صحيح. بدأت التبعيات المستقرة توضع دون أي معجزات فقط على إصدار 4-5 من npm. لكن الآلية تعمل ، وتتيح لك القيام بأشياء مذهلة - في الوقت الحالي ، هذا جيد. بالنسبة للتوافق مع المستعرض ، بغض النظر عن ما تفعله ، ستظل هناك مراحل لمعالجة الشفرة مثل تجميع وجمع الحزم. لذلك ، من غير المرجح أن يكون لوحدات العقدة أي معنى في هذا السياق.
  6. تتطلب دون تمديد وعدم اليقين . نعم ، ربما سيئة. ولكن لا يكفي أن أذكر ذلك ...
  7. index.js كمضاعفات غير ضرورية. أيضا نقطة تافهة ومملة للغاية لوصف.

بالمناسبة ، عقليا ، قلت إن ريان يندم على 10 أشياء ، ولكن فقط 7 نقاط ، وهذا ليس خطأ ، لقد راجعت تقريره عدة مرات ومراجعات التقرير. إما أنها كانت مزحة معقدة حول موضوع معالجة القيم العددية ، أو كان ريان خجولًا جدًا لتسمية 3 نقاط أخرى ...


لكن حسنًا ، فهمنا المشكلات ، واستمررنا. منطقيا ، في دينو ، قرر ريان التخلص من جميع مشاكل Node.JS. دعونا نرى ما حدث له.


ما دينو يتكون من


  1. دينو هو مكتوب في الصدأ.
  2. كحلقة حدث ، يستخدم Deno Tokio ، المكتوب مرة أخرى في Rust.
  3. Deno يدعم Typescript خارج المربع.
  4. حسنًا ، يتم تنفيذ الكود باستخدام نفس 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. , , .
    1.2. , , , .
    1.3. , . 2012 , npm , ? , " "?
  2. , . 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

:


  1. .
  2. , --allow-all.
  3. . . , , . . , — .
  4. . , , . . , 2019 2012, — ...

. . NPM.



, npm 2012 :


  1. . .
  2. Lock file .
  3. . github, snyk npm.
  4. .
  5. .
  6. — , , .
  7. .

npm … , . , , … " ", — facebook, google, microsoft, gitlab… , npm .



:


  1. Rust — .
  2. TypeScript — .
  3. URL NPM — .
  4. — .
  5. . . . !


Deno. " , " — , , Deno — .


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

Source: https://habr.com/ru/post/ar476972/


All Articles