Deno: O tempo do Node.JS está se esgotando?


Cerca de 18 meses se passaram desde o lançamento interno de Deno, um lançamento de pré-visualização, vários artigos foram publicados sobre Habré, e Ryan vai a conferências e fala sobre ele. No entanto, nunca vi uma análise cuidadosa deste projeto em nenhum lugar - por algum motivo, todos estão limitados a traduzir a documentação ...


Bem, vamos tentar fazer isso agora. Nos últimos 5 anos, escrevo no Node.JS e a empresa OneTwoTrip, onde estou trabalhando agora, escreve projetos no nó há cerca de 9 anos (sim, escrevi a história de 9 anos em um monólito no nó ). Portanto, a análise deve ser boa. Além disso, eu já disse a ele no Moscow Node.JS Meetup 10 , e foi interessante. A propósito, se for mais conveniente para você ouvir, não ler, poderá ouvir e assistir aqui . Meu segundo discurso, eu sou um cara de camisa rosa.


Curiosamente, para entender de onde o projeto veio e por que, é necessário cair no passado. Então, lançamos um pouco de plutônio, elevamos as portas do nosso delorean e embarcamos em uma jornada - observe os 10 anos importantes que fizeram do Node.JS a maneira como o vemos agora.



Encaminhar para o passado


2009


Ryan Dahl anuncia o Node.JS, aqui está ela - a primeira apresentação no JSConf 2009.


2010


Express, socket.io aparece - os principais tijolos no momento são praticamente qualquer serviço.


Existem pessoas loucas que realmente escrevem código de servidor nisso!


2011


Caras grandes começam a flertar com o Node.JS - incluindo Uber e Linkedin.


Versão Npm 1.0.


O nó começa a trabalhar no Windows.


2012


Ryan se afasta do desenvolvimento do Node.JS. Lembre-se . Era 2012. Portanto, Ryan é certamente o criador e fez muito pelo ecossistema - mas os próximos 7 anos se passaram sem a sua participação.


2013


Nó no Paypal, Walmart, eBay.


Koa aparece - lembra quantas cópias foram quebradas sobre geradores?


2014


Nó na Netflix. As tentativas estão começando a formalizar o projeto em algo mais maduro, com um modelo aberto para gerenciar um conselho consultivo. Há uma estagnação técnica que leva ao garfo do io.js.


2015


Trabalhe nos bugs. A fusão do io.js e do Node em êxtase sob os auspícios da Node Foundation e do lançamento do Nó 4. Devo dizer que esta é a versão que considero a primeira na qual foi realmente possível desenvolver algo. Se alguém escreveu nas versões 0.xx - então você se lembra de var, callback hell, várias bibliotecas diferentes para simplificar o trabalho assíncrono (como step e async. Sim, async não é apenas async aguardando, mas também uma biblioteca npm).


2016


O incidente com o teclado esquerdo, que ainda é a língua do mal, lembra o ecossistema. Quantos artigos e ataques. Bem, odiadores vão odiar. No entanto, lições importantes disso foram aprendidas.


2017


Ano de avanço. Não mencionarei todos os lançamentos do nó e o aumento no número de instalações de módulos com npm, no entanto, este ano, o número de serviços no Node.JS excedeu 8 milhões e o número de instalações foi de 3 bilhões por semana. Figuras absolutamente cósmicas que são difíceis de imaginar.


A N-API também apareceu e o Node.JS foi novamente bifurcado no Ayo.js. Uma história muito engraçada e instrutiva sobre a SJW - vale a pena um artigo separado, por isso não vou me debruçar sobre ela - eu apenas recomendo a leitura quando quiser. Somente para o prospoiler que o garfo morreu com segurança.


2018


A segunda histeria em massa desde o leftpad - agora sobre como o fluxo de eventos rouba bitcoins. Centenas de posts sobre insegurança do ecossistema. Publicações do Fantasy sobre como os pacotes npm roubam informações do cartão de crédito. A comunidade está pulverizando lama como uma mangueira. Devo dizer que foi muito útil e também foram feitas conclusões - sobre elas um pouco mais tarde.


Além disso, Ryan repentinamente explode posts da comunidade sobre o fato de que vale a pena escrever serviços sérios no Go, descreve 10 coisas em Node que ele lamenta e anuncia Deno, que resolve todos os problemas.


2019


Deno vai para a versão prévia, vários artigos aparecem no hub e agora você está lendo um deles.



De volta ao presente


Espero que, após esse passeio, tenha ficado mais claro que tipo de manchas doloridas o ecossistema tinha e como se desenvolveu - tendo esse contexto, é muito mais fácil entender o que está acontecendo agora.


10 coisas que Ryan Dahl lamenta pelo Node.JS


Infelizmente, não encontrei de imediato o artigo com a tradução do relatório, por isso vou listá-los aqui brevemente, e aqui vou comentar.


  1. Falta de apoio às promessas no início da jornada . Sim, teria sido mais simples se Ryan não tivesse cumprido as promessas, considerando-as uma complicação extra que não decolou no início do desenvolvimento do nó. O tempo perdido para todo esse inferno de retorno de chamada é certamente uma pena - mas em 2019, todas as bibliotecas sãs têm promessas como interface principal. Além disso, até as bibliotecas do sistema finalmente prometem.
  2. Segurança de chamadas do sistema e de rede. Por um lado - sim, é bom quando tudo está seguro. Por outro lado, não está claro como, a esse respeito, o nó acabou sendo pior do que qualquer outro meio ...
  3. Crie módulos nativos usando GYP. Sim, provavelmente era supérfluo, mas quem poderia saber que o cromo a deixaria. Mais uma vez - se o cromo se foi, também podemos sair ....
  4. Pacote.json excessivo. NPM como um registro de monopólio. O argumento sobre o package.json é um pouco estranho. Por exemplo, Ryan diz que há algum lixo lá como uma licença. Mas se não existisse, como você poderia descobrir rapidamente as licenças dos módulos usados ​​no seu projeto? ... O argumento sobre o NPM é mais parecido com a verdade, mas abordaremos isso com mais detalhes posteriormente.
  5. Módulos de nó. A resolução complexa de dependências não funciona como em um navegador. Sim está certo. Dependências estáveis ​​começaram a ser colocadas sem milagres apenas na versão 4-5 do npm. Mas o mecanismo funciona e permite que você faça coisas incríveis - no momento, tudo bem. Quanto à compatibilidade com o navegador, não importa o que você faça, ainda haverá etapas de processamento do código, como compilação e coleta de pacotes. Portanto, é improvável que os módulos de nós tenham algum significado nesse contexto.
  6. Exigir sem extensão e sua incerteza . Sim, provavelmente ruim. Mas não basta mencionar ...
  7. index.js como complicação desnecessária. Ponto também muito trivial e chato para descrever.

A propósito, lembre-se, eu disse que Ryan lamenta cerca de 10 coisas, e existem apenas 7 pontos.Não é um erro, eu revi o relatório dele várias vezes e as resenhas do relatório. Ou era uma piada complicada sobre o assunto de processar valores numéricos, ou Ryan era tímido demais para citar mais 3 pontos ...


Mas tudo bem, entendemos os problemas e seguimos em frente. Logicamente, em Deno, Ryan decidiu se livrar de todos os problemas do Node.JS. Vamos ver o que aconteceu com ele.


Em que consiste o Deno


  1. Deno está escrito em Rust.
  2. Como um loop de evento, Deno usa Tokio, escrito novamente em Rust.
  3. Deno suporta o Typecript fora da caixa.
  4. Bem, o código é executado usando o mesmo V8, que capturou o mundo inteiro.

À primeira vista, parece bom, mas vamos dar uma olhada mais de perto nesses pontos.


Ferrugem . Não, por favor, entenda-me corretamente - acredito que Rust and Go são idiomas maravilhosos e estou sinceramente feliz por eles. Eles tornam possível escrever código de baixo nível mais rápido e seguro do que em C ++. No entanto, há uma nuance - na melhor das hipóteses, não será mais lenta que a implementação em C ++. Então, pessoalmente, não vejo o ponto de escrever um análogo completo de cadeias de sistema e um loop de eventos - é improvável que traga algum benefício real, pois essas são coisas que em algum momento simplesmente atingem o estado ideal e não são realmente otimizadas.


TypeScript Mais uma vez - não tenho nada contra o TS. Um grande número de empresas e desenvolvedores o usam, e ele já mostrou seu valor. Mas Deno apenas oculta o transpilador no binário e o código transpilado em diretórios especiais. Ou seja, tudo é o mesmo sob o capô, e não há benefício nisso, exceto na estética. Mas há um sinal de menos - a versão do transpiler está bem pregada na versão do Deno. Não tenho certeza se isso é bom - é fácil imaginar uma situação em que você deseja atualizar o transpiler ou o tempo de execução. Mas não os dois ao mesmo tempo.


Então, enquanto nada saboroso é visível. Vamos mais longe, veja os principais recursos.


As principais diferenças entre Deno e Node.JS


Deno não usa npm. Não há registro central. Módulos são importados por URL. No package.json.


Ou seja, o código se parece com isso:


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


All Articles