
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.
- 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.
- 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 ...
- 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 ....
- 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.
- 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.
- Exigir sem extensão e sua incerteza . Sim, provavelmente ruim. Mas não basta mencionar ...
- 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
- Deno está escrito em Rust.
- Como um loop de evento, Deno usa Tokio, escrito novamente em Rust.
- Deno suporta o Typecript fora da caixa.
- 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.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 — . — , - ?