Deno / d iː n oʊ / [5] es un tiempo de ejecución para JavaScript , TypeScript y WebAssembly que se basa en el motor JavaScript V8 y el lenguaje de programación Rust . Deno fue cocreado por Ryan Dahl , quien también creó Node.js. [6]
Deno asume explícitamente el rol de tiempo de ejecución y administrador de paquetes dentro de un único ejecutable , en lugar de requerir un programa de administración de paquetes separado . [5] [7]
Deno fue anunciado en JSConf EU 2018 por Ryan Dahl en su charla "10 cosas de las que me arrepiento de Node.js". [8] En su charla, Dahl mencionó su arrepentimiento por las decisiones de diseño iniciales con Node.js, enfocándose en sus opciones de no usar promesas en el diseño de API , el uso del sistema de compilación heredado GYP , node_modules y package.json, omitiendo el archivo extensiones, resolución mágica del módulo con index.js y romper el entorno aislado de V8. [9] Finalmente presentó el prototipo de Deno, con el objetivo de lograr enlaces de llamadas al sistema a través del paso de mensajes con herramientas de serialización como Protocol Buffers , y proporcionar indicadores de línea de comando para el control de acceso .
Deno se escribió inicialmente en Go y usaba Protocol Buffers para la serialización entre lados privilegiados (Go, con acceso a llamadas al sistema) y no privilegiados (V8). [10] Sin embargo, Go pronto fue reemplazado por Rust debido a preocupaciones sobre el doble tiempo de ejecución y la presión de la recolección de basura . [11] Tokio se introdujo en lugar de libuv como plataforma asincrónica impulsada por eventos, [12] y se adoptó FlatBuffers para una serialización y deserialización más rápida y de "copia cero" [13] pero más tarde, en agosto de 2019, se eliminó FlatBuffers [14 ] después de publicar puntos de referencia que midieron una importante sobrecarga de serialización en abril de 2019. [15]
En noviembre de 2018 se creó una biblioteca estándar, modelada a partir de la biblioteca estándar de Go, para proporcionar amplias herramientas y utilidades, resolviendo parcialmente el problema de explosión del árbol de dependencias de Node.js. [dieciséis]
El Deno 1.0 oficial se lanzó el 13 de mayo de 2020. [17]
Deno Deploy, inspirado en Cloudflare Workers, [18] se lanzó el 23 de junio de 2021. [19] Anunciada el 4 de mayo de 2022, Beta 4 mejora el panel y agrega funcionalidad de facturación. La disponibilidad general de Deno Deploy está prevista para el tercer trimestre de 2022. [20]
Deno Fresh 1.0 se anunció el 28 de junio de 2022. [21] Presenta un nuevo marco web de pila completa para Deno que no envía JavaScript al cliente. El marco no tiene ningún paso de construcción que permita mejoras de un orden de magnitud en los tiempos de implementación. La versión 1.1 se lanzó el 8 de septiembre de 2022. [22]
La versión beta de Deno SaaSKit se anunció el 4 de abril de 2023. [23] Es una plantilla SaaS moderna y de código abierto creada con Fresh y Deno.
Deno pretende ser un entorno de scripting productivo y seguro para el programador moderno. [5] Al igual que Node.js, Deno enfatiza la arquitectura basada en eventos , proporcionando un conjunto de utilidades de E/S centrales sin bloqueo , junto con sus versiones de bloqueo. Deno podría usarse para crear servidores web , realizar cálculos científicos, etc. Deno es un software de código abierto bajo la licencia MIT . [24]
Deno y Node.js son tiempos de ejecución creados sobre el motor JavaScript V8 desarrollado por Chromium Project, el motor utilizado para los navegadores web Chromium y Google Chrome . Ambos tienen bucles de eventos internos y proporcionan interfaces de línea de comandos para ejecutar scripts y una amplia gama de utilidades del sistema.
Deno se desvía principalmente de Node.js en los siguientes aspectos: [5]
npm:
y node:
para importar módulos NPM o polyfill Node.JS. Node.js admite tanto URL [27] como módulos.El 29 de marzo de 2021, se anunció Deno Land Inc, con el respaldo de millones de dólares de Shasta Ventures , Mozilla Corporation y algunos otros. Se estableció para promover el desarrollo de Deno y brindar una oferta comercial a los usuarios. [1]
Un año después, Deno anunció otros 21 millones de dólares en financiación Serie A liderada por Sequoia Capital . [31]
Las siguientes tablas se crearon utilizando la página oficial de lanzamientos. [32]
Un básico ¡Hola mundo! programa en Deno:
consola . log ( "¡Hola mundo!" );
Los espacios de nombres globales Deno
exponen API que no están disponibles en el navegador. Una implementación del programa cat de Unix : [1]
/** * cat.ts */ for ( const nombre de archivo de Deno . args ) { const archivo = await Deno . abrir ( nombre de archivo ); espera archivo . legible . pipeTo ( Deno . stdout . writable , { prevenirClose : verdadero }); }
Un servidor web sencillo : [2]
Deno . servir (( req ) => nueva respuesta ( "hola mundo" ));
Deno descarga y almacena en caché automáticamente los archivos de la biblioteca estándar remota cuando se ejecuta el script y luego compila el código.
De manera similar, puede ejecutar un script de biblioteca estándar (como un servidor de archivos ) directamente sin descargarlo explícitamente, proporcionando la URL como nombre de archivo de entrada ( -A
activa todos los permisos):
$ deno run -A https://deno.land/std/http/file_server.ts Descargar https://deno.land/std/http/file_server.ts Compilar https://deno.land/std/http/file_server .ts ... servidor HTTP escuchando en http://0.0.0.0:4500/