Após dois anos de desenvolvimento o primeiro lançamento significativo , uma plataforma para a execução isolada de aplicativos nas linguagens JavaScript e TypeScript, que pode ser utilizada para criar manipuladores que operam no servidor. A plataforma é desenvolvida por Ryan Dahl (), criador do Node.js. Assim como no Node.js, o Deno utiliza o mecanismo JavaScript , que também é utilizado em navegadores baseados no Chromium. No entanto, o Deno não é um ramo do Node.js, mas sim um projeto novo criado do zero. O código do projeto sob a licença MIT. Compilações para Linux, Windows e macOS.
O número significativo da versão está relacionado à estabilização da API no espaço de nomes Deno, que é responsável pela interação de aplicativos com o sistema operacional. As interfaces que ainda , por padrão, estão ocultas e disponíveis apenas quando executadas no modo "—unstable". À medida que novas versões forem sendo formadas, essas APIs gradualmente serão transferidas para a categoria das estáveis. A API no espaço de nomes global, que inclui funções comuns como setTimeout() e fetch(), é, na medida do possível, semelhante à API dos navegadores web comuns e se desenvolve de acordo com os padrões da Web para navegadores. As APIs fornecidas pelo Rust, que são utilizadas diretamente no código da plataforma, bem como a interface para o desenvolvimento de plugins para o runtime do Deno, ainda não estão estabilizadas e continuam a se desenvolver.
Os principais motivos para a criação da nova plataforma JavaScript foram o desejo de corrigir erros conceituais, na arquitetura do Node.js, e fornecer aos usuários um ambiente mais seguro. Para aumentar a segurança, a camada em torno do motor V8 foi escrita em Rust, evitando muitas vulnerabilidades que surgem devido ao trabalho de baixo nível com a memória, como o acesso à área de memória após sua liberação, desreferenciamento de ponteiros nulos e estouros de buffer. Para o processamento de solicitações em modo não bloqueante, a plataforma , também escrita em Rust, é utilizada. O Tokio permite criar aplicativos de alto desempenho baseados em uma arquitetura orientada a eventos, suportando multithreading e o processamento assíncrono de solicitações de rede.
Principais Deno:
- A orientação para segurança na configuração padrão. O acesso a arquivos, capacidades de rede e variáveis de ambiente estão bloqueados por padrão e exigem habilitação explícita. Os aplicativos padrão são executados em ambientes sandbox isolados e não podem acessar funcionalidades do sistema sem permissões explícitas;
- Suporte embutido para a linguagem TypeScript além do JavaScript. A verificação de tipos e a geração de JavaScript utilizam o compilador TypeScript padrão, resultando em uma queda de desempenho em comparação com a análise de JavaScript no V8. No futuro, está planejada a implementação de um sistema de verificação de tipos TypeScript próprio, o que permitirá um aumento significativo no desempenho do processamento de TypeScript;
- O runtime é fornecido na forma de um único arquivo executável autossuficiente ('deno'). Para executar aplicativos com o Deno, é suficiente um arquivo executável para sua plataforma, com cerca de 20 MB, que não tem dependências externas e não requer nenhuma instalação especial no sistema. Além disso, o deno não é um aplicativo monolítico, mas uma coleção de pacotes crate em Rust (, ), que podem ser usados separadamente;
- Ao iniciar o programa, bem como para carregar módulos, é possível usar endereçamento via URL. Por exemplo, para executar o programa welcome.js, pode-se usar o comando 'deno https://deno.land/std/examples/welcome.js'. O código de fontes externas é baixado e armazenado em cache no sistema local, mas nunca é atualizado automaticamente (para atualização, é necessário executar explicitamente o aplicativo com a opção '--reload');
- Processamento eficiente de solicitações de rede via HTTP, a plataforma é projetada para criar aplicativos de rede de alto desempenho;
- Capacidade de criar aplicativos web universais que podem ser executados tanto no Deno quanto em navegadores web convencionais;
- A presença de , cujo uso não requer dependências externas. Os módulos da coleção padrão passaram por auditorias e verificações adicionais de compatibilidade;
- Além do runtime, a plataforma Deno também atua como um gerenciador de pacotes e permite que os módulos sejam acessados via URL dentro do código. Por exemplo, para carregar um módulo, pode-se especificar no código "import * as log from 'https://deno.land/std/log/mod.ts'". Os arquivos carregados de servidores externos via URL são armazenados em cache. A vinculação a versões de módulos é feita por meio da indicação dos números de versão dentro da URL, por exemplo, 'https://unpkg.com/liltest@0.0.5/dist/liltest.js';
- O conjunto integrado inclui um sistema de inspeção de dependências (comando 'deno info') e uma ferramenta para formatar código ('deno fmt');
- Todos os scripts da aplicação podem ser combinados em um único arquivo JavaScript.
Diferenças em relação ao Node.js:
- O Deno não utiliza o gerenciador de pacotes npm
e não está vinculado a repositórios, a endereçamento de módulos é realizado via URL ou por caminho de arquivo, e os próprios módulos podem ser hospedados em qualquer site; - No Deno, não se utiliza 'package.json' para definir módulos;
- Diferença de API, todas as operações assíncronas no Deno retornam promessas;
- O Deno requer a definição explícita de todas as permissões necessárias para arquivos, rede e variáveis de ambiente;
- Todos os erros não acompanhados por manipuladores levam à finalização da execução da aplicação;
- O Deno utiliza um sistema de módulos ECMAScript e não suporta require();
- O servidor HTTP embutido do Deno é escrito em TypeScript e opera sobre sockets TCP nativos, enquanto o servidor HTTP do Node.js é escrito em C e fornece bindings para JavaScript. Os desenvolvedores do Deno concentraram seus esforços na otimização de toda a camada de sockets TCP e na entrega de uma interface mais geral. O servidor HTTP do Deno oferece menor capacidade, mas garante latências previsíveis e baixas. Por exemplo, em um teste, uma aplicação simples baseada no servidor HTTP do Deno conseguiu processar 25 mil requisições por segundo com uma latência máxima de 1,3 milissegundos. Em um aplicativo semelhante no Node.js, foram processadas 34 mil requisições por segundo, mas as latências variaram de 2 a 300 milissegundos.
- O Deno não é compatível com pacotes para Node.js (NPM), mas está em desenvolvimento separado para compatibilidade com a biblioteca padrão do Node.js, à medida que a qual mais aplicações escritas para Node.js poderão ser executadas no Deno.
Fonte: opennet.ru
