5 pi�ce(s) jointe(s)
La Version 1.9 de Deno, le runtime pour ex�cuter JavaScript et TypeScript, est disponible
La Version 1.9 de Deno, le runtime pour ex�cuter JavaScript et TypeScript, est disponible,
elle am�liore les appels de commande dans Rust et apporte de nouvelles fonctionnalit�s
L'�quipe de d�veloppement de Deno a annonc� le 13 avril la sortie de la version 1.9 de Deno. Cr�� par Ryan Dahl, ing�nieur logiciel, d�veloppeur du runtime JavaScript Node.js et TypeScript, Deno est un moteur d'ex�cution (runtime) simple, moderne et s�curis� pour JavaScript et TypeScript, il utilise JavaScript V8 et est construit en Rust. Deno assume explicitement le r�le de runtime et de gestionnaire de paquets au sein d'un seul et m�me ex�cutable, plut�t que de n�cessiter un programme de gestion de paquets distinct. Ryan Dahl est un.
Outre le runtime Deno, l�outil fournit �galement une liste de modules standard qui sont examin�s par les responsables de Deno et dont le fonctionnement est garanti avec une version sp�cifique de Deno. Ils cohabitent avec le code source de Deno dans le r�f�rentiel denoland/deno. Ces modules standard sont h�berg�s sur deno.land/std et sont distribu�s via des URL comme tous les autres modules ES compatibles avec Deno.
JavaScript est le langage dynamique le plus utilis�, fonctionnant sur tous les appareils dot�s d'un navigateur Web. Un grand nombre de d�veloppeurs � parlent � couramment le JavaScript et beaucoup d'efforts ont �t� d�ploy�s pour optimiser son ex�cution. Gr�ce � des organismes de normalisation comme ECMA International, le langage a �t� soigneusement et continuellement am�lior�. Aussi, les ing�nieurs Ryan Dahl, Bert Belder et Bartek Iwańczuk pensent que JavaScript est le choix naturel pour l'outillage de langage dynamique ; que ce soit dans un environnement de navigateur ou en tant que processus autonomes.
Pour justifier le projet Deno, les responsables d�clarent : � Notre vecteur d'origine dans ce domaine, Node.js, s'est av�r� �tre une plateforme logicielle tr�s r�ussie. Les gens l'ont trouv� utile pour cr�er des outils de d�veloppement Web, cr�er des serveurs Web autonomes et pour une myriade d'autres cas d'utilisation. Node, cependant, a �t� con�u en 2009 lorsque JavaScript �tait un langage tr�s diff�rent. Par n�cessit�, Node a d� inventer des concepts qui ont ensuite �t� repris par les organismes de normalisation et ajout�s au langage diff�remment.
� Avec l'�volution du langage JavaScript et de nouveaux ajouts comme TypeScript, la cr�ation de projets Node peut devenir une t�che ardue, impliquant la gestion de syst�mes de g�n�ration et d'autres outils lourds qui enl�vent le plaisir des scripts de langage dynamique. De plus, le m�canisme de liaison � des biblioth�ques externes est fondamentalement centralis� via le r�f�rentiel NPM, qui n'est pas conforme aux id�aux du Web. � Nous pensons que le paysage de JavaScript et de l'infrastructure logicielle environnante a suffisamment chang� pour qu'il soit utile de le simplifier. Nous recherchons un environnement de script amusant et productif qui peut �tre utilis� pour un large �ventail de t�ches �. Voici, ci-dessous, les nouveaut�s apport�es � la version 1.9 de Deno.
Serveur web natif HTTP/2
Le serveur HTTP actuel de Deno, std/http, est impl�ment� en TypeScript pur sur des sockets TCP. Il pr�sente une latence de queue �tonnamment bonne malgr� l'utilisation d'un serveur HTTP script�. Mais le principal inconv�nient de std/http est qu'il n'est compatible qu'avec HTTP/1.1, sans possibilit� de passer facilement � HTTP/2.
� En fin de compte, nous ne voulons pas nous occuper de l'�criture de serveurs HTTP. HTTP est de moins en moins trivial et il existe d�j� des serveurs HTTP bien impl�ment�s en code natif. C'est pourquoi nous avons utilis� Hyper pour construire une nouvelle API de serveur HTTP/2 native � Deno �, d�clarent les responsables du projet Deno. La liaison am�liore le d�bit de hello-world de 48 % par rapport au serveur HTTP std/http TypeScript pur. Pour l'instant, il est recommand� d�utiliser le param�tre �unstable.
Code:
1 2 3 4 5 6 7 8
| const body = new TextEncoder().encode("Hello World");
for await (const conn of Deno.listen({ port: 4500 })) {
(async () => {
for await (const { respondWith } of Deno.serveHttp(conn)) {
respondWith(new Response(body));
}
})();
} |
Appels de commande plus rapides dans Rust avec serde_v8
Dans les versions pr�c�dentes de Deno, les appels de commande suivaient un mod�le de demande/r�ponse, codant leurs donn�es dans des � charges utiles � personnalis�es de ArrayBuffers. Historiquement, ces charges utiles utilisaient divers encodages, allant de JSON, flatbuffers � des encodages binaires personnalis�s... Ce n'�tait pas seulement un goulot d'�tranglement au niveau des performances, c'�tait aussi une source substantielle de complexit� et de fragmentation.
Aaron O'Mullan, un des responsables du projet Deno, a sugg�r� qu'au lieu de faire des allers-retours entre ces formats binaires, JS et Rust, il serait plus efficace de s�rialiser directement entre les valeurs v8 et Rust. Suite � cette id�e et � un prototype rapide, serde_v8 est n�. serde_v8 a pour but de fournir une bijection � efficace au maximum � ou � sans surcharge � entre les valeurs v8 et Rust tout en restant expressif et familier.
Prise en charge de l'URL Blob et am�lioration de la fonction fetch
La version 1.9 de Deno introduit la prise en charge de blob : (�galement connues sous le nom d'URL d'objets). L'API pour cr�er et r�voquer les URL blob est la m�me que dans le navigateur :
Code:
1 2 3 4 5 6 7 8
| const blob = new Blob(["Hello World!"]);
const url = URL.createObjectURL(blob);
console.log(url); // blob:null/7b09af21-03d5-461e-90a3-af329667d0ac
const resp = await fetch(url);
console.log(await resp.text()); // Hello World!
URL.revokeObjectURL(url); |
Fonction de compl�tions dans le LSP
Dans cette version, Deno Language Server, l'outil qui permet d'utiliser les extensions d'�diteur pour Deno, a b�n�fici� de quelques nouvelles fonctionnalit�s et am�liorations importantes. La version 1.9 de Deno apporte une am�lioration et r�introduit la fonction de compl�tions d'importation de l�ancienne extension VS Code. Elle permet aux utilisateurs d'obtenir des compl�ments dans les d�clarations d'importation. Le LSP offre des compl�tions pour les fichiers locaux, les fichiers d�j� t�l�charg�s dans votre cache DENO_DIR, et aussi des compl�tions de registre.
Pour activer les compl�tions pour le registre https://deno.land/x, ce le bout de code ci-dessous doit �tre ajout� aux param�tres du code VS (ou autre �diteur) :
Code:
1 2 3 4 5 6 7 8 9 10 11
| {
"deno": {
"suggest": {
"imports": {
"hosts": {
"https://deno.land": true
}
}
}
}
} |
Les autocompl�tions de registre sont actuellement propos�es par https://deno.land/x. Il reste � esp�rer que d'autres registres mettent en �uvre le protocole de registre pour prendre en charge cette nouvelle fonctionnalit�. En plus des nouvelles compl�tions d'importation, les fonctions LSP textDocument/foldingRange et textDocument/selectionRange qui permettent � un �diteur de fournir un meilleur accrochage du texte pendant la s�lection, et un meilleur support pour le pliage et l'expansion des blocs de code, ont �t� �galement impl�ment�es. Cette version comprend �galement de nombreuses corrections de bogues pour le LSP, notamment un bogue sur les syst�mes Windows.
Listes d'autorisations pour --allow-env et --allow-run
Plusieurs param�tres d'autorisation de Deno acceptent des listes d'autorisations qui permettent de d�finir les autorisations d'un programme de mani�re tr�s pr�cise. Par exemple, --alow-read=/tmp n'accorde le droit de lecture qu'au r�pertoire ./tmp.
Avant la version 1.9, --allow-env et --allow-run �taient tous deux � tout ou rien �, ce qui signifie qu'en passant ces param�tres, on obtenait respectivement un acc�s complet aux variables d'environnement et le lancement de sous-processus pour tout binaire sur le syst�me. Avec Deno 1.9, on peut sp�cifier exactement � quelles variables d'environnement le programme devrait avoir acc�s, ou quels sous-processus le programme est autoris� � lancer :
Code:
1 2
| $ deno run --allow-env=DEBUG,LOG https://deno.com/blog/v1.9/env_permissions.ts
$ deno run --allow-run=deno https://deno.com/blog/v1.9/run_permissions.ts |
En outre, Deno.permissions.query() permet d�sormais d'interroger les autorisations d'ex�cution de binaires sp�cifiques en utilisant le champ de commande :
a
Code:
wait Deno.permissions.query({ name: "run", command: "deno" });
Prompt de permission interactive
Actuellement, dans Deno, si vous ex�cutez un programme auquel il manque les param�tres d'autorisation appropri�s, il affiche une erreur et se termine. Dans la version 1.9, nous avons ajout� le param�tre --prompt qui permet aux utilisateurs d'accorder les autorisations de mani�re it�rative, au fur et � mesure qu'elles sont requises pendant l'ex�cution.
L'utilisation de --prompt est particuli�rement utile lors de l'ex�cution de scripts uniques � partir d'Internet. Inutile de conna�tre toutes les permissions requises � l'avance, au lieu de cela, il est possible d�ex�cuter le script sans aucune permission et les accorder ou les refuser une par une comme demand� par le programme.
Support ALPN dans Deno.listenTls
Le protocole HTTP/2 est agnostique vis-�-vis des connexions. Cela signifie qu'il peut �tre utilis� sur un socket Unix, un socket TCP ou sur une connexion utilisant TLS. Les principaux navigateurs Web n'autorisent HTTP/2 sur les connexions TLS que si elles annoncent la prise en charge de HTTP/2 lors d�une � handshake �TLS. Cela se fait via l'extension TLS Application-Layer Protocol Negotiation, �galement connue sous le nom d'ALPN. Cette extension de handshakeTLS permet au serveur et au client TLS de n�gocier le protocole d'application qu'ils utiliseront pour communiquer sur la connexion TLS.
Sur le web, les deux protocoles d'application dominants sont HTTP/1.1 et HTTP/2. Ils portent les noms de protocole ALPN "http/1.1" et "h2" respectivement. Les navigateurs n'enverront des requ�tes HTTP/2 qu'aux serveurs qui annoncent la prise en charge de HTTP/2. Si aucun protocole ALPN n'est r�pertori�, ou si seul "http/1.1" figure dans les protocoles ALPN, HTTP/1.1 sera utilis�. Jusqu'� pr�sent, le serveur std/http ne supportait que HTTP/1.1, il n'�tait donc pas n�cessaire de supporter ALPN sur les connexions TLS. Avec l'introduction de Deno.serveHttp dans cette version, cela a chang�. Pour rendre possible le HTTP/2 complet dans Deno, nous avons maintenant ajout� la prise en charge de la sp�cification des protocoles ALPN � annoncer lors du d�marrage d'un auditeur TLS avec Deno.listenTls. Voici, ci-dessous, un exemple de cr�ation d'un serveur HTTPS avec prise en charge compl�te de HTTP/2 :
const listener = Deno.listenTls({
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| port: 443,
certFile: "./cert.pem",
keyFile: "./key.pem",
alpnProtocols: ["h2", "http/1.1"],
});
for await (const conn of listener) {
handleConn(conn);
}
async function handleConn(conn: Deno.Conn) {
const httpConn = Deno.serveHttp(conn);
for await (const { request, respondWith } of httpConn) {
respondWith(new Response(`Responding to ${request.url}`));
}
} |
Nouvelle option TypeScript par d�faut useDefineForClassFields
Deno 1.9 apporte �galement une modification du tsconfig par d�faut de Deno pour inclure l'option useDefineForClassFields : true. Cette option aligne la gestion des champs de classe par TypeScript sur la s�mantique standard des scripts ECMA. Cette option ne peut pas �tre �cras�e dans le code utilisateur.
Installation de Deno
Deno est livr� sous la forme d'un ex�cutable unique sans aucune d�pendance. Si Deno est d�j� install�, vous pouvez passer � la version 1.9 en ex�cutant deno upgrade. Si vous installez Deno pour la premi�re fois, vous pouvez utiliser l'une des m�thodes �num�r�es ci-dessous :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # Utilisation de Shell (macOS and Linux):
curl -fsSL https://deno.land/x/install/install.sh | sh
# Utilisation de PowerShell (Windows):
iwr https://deno.land/x/install/install.ps1 -useb | iex
# Utilisation de Homebrew (macOS):
brew install deno
# Utilisation Scoop (Windows):
scoop install deno
# Utilisation Chocolatey (Windows):
choco install deno |
Source : Deno
Et vous ?
:fleche: Avez-vous d�j� utilis� Deno ? Si oui, qu�en pensez-vous ? Si non, �tes-vous int�ress�s ?
:fleche: Quelle utilit� pourriez-vous lui trouver ?
:fleche: Que pensez-vous des am�liorations apport�es � la version 1.9 de Deno ?
Voir aussi :
:fleche: Deno passe en version 1.0. Le runtime pour ex�cuter JavaScript et TypeScript, tente de fournir un outil autonome pour l'�criture rapide de fonctionnalit�s complexes
:fleche: Quels sont les co�ts li�s � l'utilisation de frameworks JavaScript pour le d�veloppement Web ? Une analyse des sites utilisant React, Vue.js ou Angular
:fleche: Node.js 15 est disponible et apporte le support de npm 7, une impl�mentation exp�rimentale AbortController, ainsi qu'une mise � jour du moteur JavaScript V8 qui passe en version 8.6
:fleche: State of JavaScript 2020 : TypeScript leader incontestable des d�clinaisons de JavaScript, le typage statique devient la fonctionnalit� la plus demand�e et React reste le framework front-end dominant