lanzamiento del proyecto , que ofrece una plataforma similar a Node.js para la ejecución aislada de aplicaciones en JavaScript y TypeScript, la cual puede ser utilizada para ejecutar aplicaciones sin necesidad de un navegador, por ejemplo, para crear controladores que funcionen en el servidor. En Deno se utiliza el motor JavaScript , que también se aplica en Node.js y en navegadores basados en el proyecto Chromium. El código del proyecto está bajo licencia MIT. El proyecto es desarrollado por Ryan Dahl (), creador de la plataforma JavaScript Node.js.
Uno de los principales objetivos de crear un nuevo runtime para JavaScript es proporcionar un entorno más seguro. Para mejorar la seguridad, el envoltorio alrededor del motor V8 está escrito en Rust, lo que permite evitar muchas vulnerabilidades que surgen debido a operaciones de bajo nivel con la memoria, tales como el acceso a áreas de memoria después de que han sido liberadas, la desreferencia de punteros nulos y el desbordamiento de búfer. Para manejar solicitudes en modo no bloqueante, se utiliza la plataforma , también escrita en Rust. Tokio permite crear aplicaciones de alto rendimiento basadas en arquitectura orientada a eventos (Event-driven), soportando multihilo y el procesamiento asíncrono de solicitudes de red.
Principales Deno:
- Orientación hacia la seguridad en la configuración por defecto. El acceso a archivos, las capacidades de red y el acceso a variables de entorno están bloqueados por defecto y requieren habilitación explícita;
- Soporte integrado para TypeScript además de JavaScript;
- El runtime se proporciona en forma de un único archivo ejecutable autónomo («deno»). Para ejecutar aplicaciones utilizando Deno, es suficiente con un archivo ejecutable para tu plataforma, de alrededor de 10 MB, sin dependencias externas y que no requiere una instalación especial en el sistema;
- Al ejecutar el programa, así como para cargar módulos, se pueden utilizar direcciones a través de URL. Por ejemplo, para ejecutar el programa welcome.js se puede usar el comando «deno https://deno.land/std/examples/welcome.js». El código de recursos externos se descarga y se almacena en la caché del sistema local, pero nunca se actualiza automáticamente (para actualizar, se requiere iniciar explícitamente la aplicación con la bandera «--reload»);
- Procesamiento eficiente de solicitudes HTTP en aplicaciones, la plataforma está diseñada para crear aplicaciones web de alto rendimiento;
- Posibilidad de crear aplicaciones web universales que pueden ejecutarse tanto en Deno como en un navegador web convencional;
- Además del runtime, la plataforma Deno también actúa como un gestor de paquetes y permite acceder a módulos a través de URL dentro del código. Por ejemplo, para cargar un módulo, se puede especificar en el código «import * as log from «https://deno.land/std/log/mod.ts». Los archivos cargados desde servidores externos a través de URL se almacenan en caché. La vinculación de las versiones de los módulos se determina mediante la especificación de números de versión dentro de la URL, como «https://unpkg.com/liltest@0.0.5/dist/liltest.js»;
- Se integra un sistema de inspección de dependencias (comando «deno info») y una utilidad para formatear código (deno fmt).
- Para desarrolladores de aplicaciones conjunto de módulos estándar, que han pasado por una auditoría adicional y compatibilidad;
- Todos los scripts de la aplicación pueden ser combinados en un solo archivo JavaScript.
Diferencias con Node.js:
- Deno no utiliza el gestor de paquetes npm
y no se vincula a repositorios, la dirección de los módulos se realiza a través de URL o rutas de archivos, y los módulos pueden ser hospedados en cualquier sitio; - En Deno no se utiliza «package.json» para definir módulos;
- Diferencia en API, todas las acciones asíncronas en Deno devuelven una promesa;
- Deno requiere una definición explícita de todos los permisos necesarios para archivos, redes y variables de entorno;
- Todos los errores sin controladores provocan la finalización de la aplicación;
- Deno aplica el sistema de módulos ECMAScript y no soporta require().
Fuente: opennet.ru
