Deno: Node.JS waktunya hampir habis?


Sekitar 18 bulan telah berlalu sejak rilis internal Deno, rilis pratinjau telah dirilis, beberapa artikel telah muncul di HabrΓ©, dan Ryan pergi ke konferensi dan berbicara tentang dia. Namun, saya belum pernah melihat analisis mendalam tentang proyek ini di mana pun - untuk beberapa alasan semua orang terbatas pada menerjemahkan dokumentasi ...


Baiklah, mari kita coba lakukan sekarang. Selama 5 tahun terakhir saya telah menulis di Node.JS, dan perusahaan OneTwoTrip, tempat saya bekerja sekarang, telah menulis proyek pada node selama sekitar 9 tahun (ya, saya menulis cerita sekitar 9 tahun dalam monolit pada node ). Jadi analisisnya harus bagus. Selain itu, saya sudah memberi tahu dia di Moscow Node.JS Meetup 10 , dan itu menarik. Omong-omong, jika lebih mudah bagi Anda untuk mendengarkan, tidak membaca, maka Anda dapat mendengarkan dan menonton di sini . Pidato kedua saya, saya seorang pria dengan kemeja merah muda.


Anehnya, untuk memahami dari mana proyek itu berasal dan mengapa, perlu untuk jatuh ke masa lalu. Jadi kami melempar beberapa plutonium, menaikkan pintu delorean kami, dan memulai perjalanan - lihat 10 tahun penting yang membuat Node. Apa yang kita lihat sekarang.



Maju ke masa lalu


2009


Ryan Dahl mengumumkan Node.JS, ini dia - presentasi pertama di JSConf 2009.


2010


Express, socket.io muncul - batu bata utama saat ini hampir semua layanan.


Ada orang gila yang benar-benar menulis kode server tentang ini!


2011


Orang-orang besar mulai menggoda dengan Node.JS - termasuk Uber dan Linkedin.


Npm 1.0 rilis.


Node mulai bekerja di Windows.


2012


Ryan menjauh dari pengembangan Node.JS. Ingat . Itu tahun 2012. Jadi Ryan tentu pencipta, dan telah melakukan banyak hal untuk ekosistem - tetapi 7 tahun berikutnya berlalu tanpa partisipasinya.


2013


Simpul di Paypal, Walmart, eBay.


Koa muncul - ingat berapa banyak salinan yang rusak tentang generator?


2014


Node di Netflix. Upaya mulai memformalkan proyek menjadi sesuatu yang lebih matang, dengan model terbuka untuk mengelola dewan penasihat. Ada stagnasi teknis yang mengarah ke persimpangan io.js.


2015


Bekerja pada bug. Penggabungan io.js dan Node dalam ekstasi di bawah naungan Node Foundation dan pelepasan Node 4. Saya harus mengatakan, ini adalah versi yang saya anggap sebagai yang pertama di mana sangat mungkin untuk mengembangkan sesuatu. Jika seseorang menulis pada versi 0.xx - maka Anda ingat tentang var, panggilan balik neraka, sekelompok perpustakaan yang berbeda untuk menyederhanakan pekerjaan asinkron (seperti langkah dan async. Ya, async tidak hanya menunggu async, tetapi juga perpustakaan npm).


2016


Insiden dengan panel kiri, yang masih lidah jahat mengingatkan ekosistem. Berapa banyak artikel dan serangan. Baik pembenci akan membenci. Namun, pelajaran penting dari ini telah dipelajari.


2017


Tahun terobosan. Saya tidak akan menyebutkan semua rilis node dan peningkatan jumlah instalasi modul dengan npm, namun tahun ini jumlah layanan di Node.JS melebihi 8 juta, dan jumlah instalasi adalah 3 miliar per minggu. Benar-benar tokoh kosmik yang sulit dibayangkan.


N-API juga muncul, dan Node.JS bercabang dua lagi di Ayo.js. Sebuah cerita yang sangat lucu dan instruktif tentang SJW - layak artikel yang terpisah, jadi saya tidak akan memikirkannya - saya hanya merekomendasikan membacanya di waktu luang Anda. Hanya untuk prospoiler garpu itu mati dengan aman.


2018


Histeria massal kedua sejak kiri - sekarang tentang bagaimana peristiwa-aliran mencuri bitcoin. Ratusan pos tentang kerawanan ekosistem. Posting fantasi tentang bagaimana paket npm mencuri informasi kartu kredit. Masyarakat menyemprot lumpur seperti selang. Harus saya katakan, itu sangat berguna, dan kesimpulan juga dibuat - tentang mereka sedikit kemudian.


Juga, Ryan tiba-tiba meledakkan posting komunitas tentang fakta bahwa layanan serius layak ditulis di Go, menjelaskan 10 hal di Node yang ia sesali, dan mengumumkan Deno, yang menyelesaikan semua masalah.


2019


Deno pergi ke rilis pratinjau, banyak artikel muncul di hub, dan sekarang Anda membaca salah satunya.



Kembali ke masa sekarang


Saya berharap bahwa setelah tur ini menjadi lebih jelas seperti apa bintik-bintik sakit yang dimiliki ekosistem dan bagaimana ia berkembang - dengan konteks ini, akan lebih mudah untuk memahami apa yang terjadi sekarang.


10 hal yang disesalkan Ryan Dahl tentang Node.JS


Sayangnya, saya tidak menemukan artikel itu dengan terjemahan laporan itu, jadi saya akan menuliskannya di sini sebentar, dan di sini saya akan berkomentar.


  1. Kurangnya dukungan untuk janji di awal perjalanan . Ya, akan lebih mudah jika Ryan tidak menepati janji, menganggapnya sebagai komplikasi tambahan yang tidak lepas landas pada awal pengembangan node. Kehilangan waktu untuk semua panggilan balik ini tentu saja sangat disayangkan - tetapi pada tahun 2019, semua perpustakaan waras memiliki janji sebagai antarmuka utama. Selain itu, bahkan perpustakaan sistem akhirnya memberikan janji.
  2. Keamanan panggilan sistem dan panggilan jaringan. Di satu sisi - ya, itu baik ketika semuanya aman. Di sisi lain, tidak jelas bagaimana dalam hal ini simpul tersebut ternyata lebih buruk daripada media lainnya ....
  3. Bangun modul asli menggunakan GYP. Ya, mungkin itu berlebihan, tetapi siapa yang tahu bahwa krom akan meninggalkannya. Lagi - jika kromnya hilang, maka kita juga bisa pergi ....
  4. Package.json berlebihan NPM sebagai register monopoli. Argumen tentang package.json agak aneh. Misalnya, Ryan mengatakan bahwa ada sampah di sana seperti lisensi. Tetapi jika itu tidak ada di sana, bagaimana Anda bisa dengan cepat mengetahui lisensi dari modul yang digunakan dalam proyek Anda? .. Argumen tentang NPM lebih seperti kebenaran, tetapi kami akan membahas ini lebih terinci nanti.
  5. Modul simpul. Resolusi dependensi yang kompleks tidak berfungsi seperti di browser. Ya itu benar. Ketergantungan stabil mulai diletakkan tanpa mukjizat hanya pada versi 4-5 npm. Tetapi mekanismenya bekerja, dan memungkinkan Anda untuk melakukan hal-hal luar biasa - pada saat ini baik-baik saja. Adapun kompatibilitas dengan browser, apa pun yang Anda lakukan, masih akan ada tahapan pemrosesan kode seperti kompilasi dan pengumpulan bundel. Jadi, modul simpul tidak mungkin memiliki makna dalam konteks ini.
  6. Membutuhkan tanpa ekstensi dan ketidakpastiannya . Ya, mungkin buruk. Tetapi tidak cukup untuk menyebutkannya ...
  7. index.js sebagai komplikasi yang tidak perlu. Juga terlalu sepele dan membosankan untuk dijelaskan.

Ngomong-ngomong, ingatlah, saya mengatakan bahwa Ryan menyesali 10 hal, tetapi hanya 7 poin. Ini bukan kesalahan, saya meninjau laporannya beberapa kali dan ulasan laporan. Entah itu lelucon rumit tentang topik pemrosesan nilai numerik, atau Ryan terlalu malu untuk menyebutkan 3 poin lagi ...


Tapi baiklah, kami memahami masalahnya, dan melanjutkan. Secara logis, di Deno, Ryan memutuskan untuk menyingkirkan semua masalah Node.JS. Mari kita lihat apa yang terjadi padanya.


Terdiri dari apa Deno


  1. Deno ditulis dalam Karat.
  2. Sebagai loop Peristiwa, Deno menggunakan Tokio, ditulis lagi dalam Rust.
  3. Deno mendukung naskah dalam kotak.
  4. Nah, kode dieksekusi menggunakan V8 yang sama, yang menangkap seluruh dunia.

Sepintas kedengarannya bagus, tapi mari kita lihat lebih dekat pada poin-poin ini.


Karat . Tidak, tolong mengerti saya dengan benar - Saya percaya bahwa Rust dan Go adalah bahasa yang luar biasa, dan saya sangat senang mereka melakukannya. Mereka memungkinkan untuk menulis kode tingkat rendah lebih cepat dan lebih aman daripada di C ++. Namun, ada nuansa - dalam kasus terbaik, itu tidak akan lebih lambat daripada implementasi di C ++. Jadi saya pribadi tidak melihat titik penulisan analog lengkap untaian sistem dan loop peristiwa - tidak mungkin membawa manfaat nyata, karena ini adalah hal-hal yang pada titik tertentu hanya mencapai keadaan optimal dan tidak benar-benar dioptimalkan lebih lanjut.


TypeScript Sekali lagi - Saya tidak menentang TS. Sejumlah besar perusahaan dan pengembang menggunakannya, dan itu sudah menunjukkan nilainya. Tetapi Deno hanya menyembunyikan transpiler dalam biner, dan kode yang diubah dalam direktori khusus. Artinya, semuanya sama di bawah tenda, dan tidak ada manfaatnya, kecuali untuk estetika. Tapi ada minus - versi transpiler dipaku dengan erat ke versi Deno. Saya tidak yakin ini bagus - mudah membayangkan situasi di mana Anda ingin memperbarui transpiler atau runtime. Namun tidak keduanya sekaligus.


Jadi sementara tidak ada yang enak terlihat. Mari kita melangkah lebih jauh, lihat fitur-fitur utamanya.


Perbedaan utama antara Deno dan Node.JS


Deno tidak menggunakan npm. Tidak ada registry pusat. Modul diimpor oleh URL. Tidak ada package.json.


Artinya, kode tersebut terlihat seperti ini:


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/id476972/


All Articles