La version 17 de Node.js, le moteur d'ex�cution JavaScript, est disponible, avec OpenSSL 3,
bien que Deno, son concurrent, estime que la cr�ation des projets Node peut devenir une t�che ardue
L'�quipe de d�veloppement de Node.js a annonc� le 19 octobre la sortie de la version 17 de Node.js. Cette version est livr�e avec OpenSSL 3 et la version 9.5 du moteur JavaScript V8. � L'inclusion d'OpenSSL 3.0 est une grande nouveaut�. Cela nous donne une voie vers la communaut� FIPS (Federal Information Processing Standards) �, a d�clar� Michael Dawson Responsable Node.js pour Red Hat et IBM chez Red Hat. Dans le m�me temps, l'�quipe de d�veloppement de Deno, le moteur d'ex�cution de JavaScript et TypeScript, annonce Deno 1.15 avec �galement la version 9.5 du moteur JavaScript V8 et de nouvelles API cryptographiques.
Node.js
Notons que Node.js est un environnement d'ex�cution JavaScript bas� sur le moteur JavaScript V8 de Google qui ex�cute le code JavaScript en dehors du navigateur. Il aide les d�veloppeurs � cr�er des unit�s de code non bloquantes afin de tirer le meilleur parti des ressources syst�me pour cr�er des applications plus r�actives.
Le syst�me de modules de Node permet aux d�veloppeurs d'�tendre la plateforme � l'aide de modules tiers pour obtenir un maximum de fonctionnalit�s. Node.js permet simplement aux d�veloppeurs d'utiliser chaque projet JavaScript open source sur le serveur de la m�me mani�re que sur le navigateur client, ce qui permet une int�gration plus �troite et plus efficace entre le serveur Web et les scripts de l'application Web prise en charge.
Les versions majeures de Node.js entrent dans le statut Current release pendant six mois, ce qui donne aux auteurs de biblioth�ques le temps d'ajouter la prise en charge de ces versions. Apr�s six mois, les versions impaires (9, 11, etc.) ne sont plus prises en charge et les versions paires (10, 12, etc.) passent au statut Active LTS et sont pr�tes pour une utilisation g�n�rale. Le statut de la version LTS est un long-term support, qui garantit g�n�ralement que les bogues critiques seront corrig�s pendant un total de 30 mois. Les applications de production ne doivent utiliser que les versions Active LTS ou Maintenance LTS. Ceci �tabli que, la version 17 de Node.js n'est pas principalement destin� � la production mais aux tests et � l'exp�rimentation.
� Nous avons mis en place le processus de publication LTS il y a presque cinq ans, il fonctionne assez bien dans la mesure o� nous trouvons un �quilibre entre le fait que certaines personnes veulent les derni�res nouveaut�s et que d'autres pr�f�rent que les choses soient stables... lorsque nous passons � LTS �, a d�clar� Michael Dawson Responsable Node.js pour Red Hat et IBM chez Red Hat. � Nous avons, nous l'esp�rons, r�solu tous les probl�mes. En fait, chez Red Hat, nous ne publions que des binaires pour les versions LTS, et c'est ce que je recommande aux gens d'utiliser en production �, a-t-il ajout�. Voici, ci-dessous, les changements apportes par la version 17 de Node.js :
- Support d'OpenSSL 3.0 ;
- APIs suppl�mentaires promises ;
- Stack traces avec la version de Node.js
- Le moteur JavaScript V8 a �t� mis � jour vers la version 9.5.
OpenSSL 3.0
OpenSSL est une bo�te � outils robuste et compl�te pour les protocoles TLS (Transport Layer Security) et SSL (Secure Sockets Layer). Il s'agit �galement d'une biblioth�que de chiffrement � usage g�n�ral. Elle b�n�ficie d'une licence de type Apache, ce qui signifie essentiellement qu�elle est libre d�utilisation � des fins commerciales et non commerciales, sous r�serve de quelques conditions de licence simples. D�velopp�e en C, OpenSSL est disponible sur les principaux syst�mes d'exploitation et dispose de nombreux wrappers ce qui la rend utilisable dans une grande vari�t� de langages informatiques.
Parmi les nouvelles fonctionnalit�s d'OpenSSL 3.0, il y a l'introduction des Providers, dont l'un est un provider FIPS qui peut �tre activ� dans Node.js. Si un d�veloppeur rencontre une erreur ERR_OSSL_EVP_UNSUPPORTED dans son application avec Node.js 17, il est probable que l�application ou un module utilis� tente d'utiliser un algorithme ou une taille de cl� qui n'est plus autoris� par d�faut avec OpenSSL 3.0. Une nouvelle option de ligne de commande, --openssl-legacy-provider, a �t� ajout�e pour revenir � l'ancien fournisseur comme solution de contournement temporaire pour ces restrictions plus strictes.
� Conform�ment � notre politique de publication, les nouvelles fonctionnalit�s apport�es au moteur d'ex�cution sont publi�es environ toutes les deux semaines dans notre ligne de publication. Cela signifie que la majorit� des nouveaux engagements inclus dans la premi�re version majeure (v17.0.0) sont ceux qui impliquent des changements de rupture. Nous tenons � minimiser le nombre et la perturbation de ces changements de rupture pour la stabilit� de la plateforme et pour faciliter les migrations de version pour nos utilisateurs �, a soulign� l��quipe de d�veloppement de Node Js.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 $ ./node openssl-legacy-provider -p 'crypto.createHash("md4")' Hash { _options: undefined, [Symbol(kHandle)]: Hash {}, [Symbol(kState)]: { [Symbol(kFinalized)]: false } }
Empiler les traces avec la version Node.js
Les traces de pile sont un �l�ment essentiel du diagnostic des erreurs d'application, aidant � fournir une visibilit� sur ce qui ne va pas. Dans Node.js 17, la version Node.js sera incluse � la fin de la trace de la pile lorsqu'il existe une exception fatale qui entra�ne la fermeture du processus.
Il est utile de fournir ces informations par d�faut car souvent, lors du diagnostic des erreurs signal�es, l'une des premi�res questions pos�es sera : quelle version de Node.js utilisez-vous ? Node.js 17 est �galement livr� avec une option de ligne de commande, --no-extra-info-on-fatal-exception, pour omettre ces informations suppl�mentaires.
Version 9.5 du moteur JavaScript V8
Dans Node.js 17.0.0, le moteur JavaScript V8 a �t� mis � jour vers V8 9.5. (V8 9.4 est la derni�re version disponible dans Node.js 16). Outre des ajustements et des am�liorations des performances, cette mise � jour apporte des types suppl�mentaires pris en charge pour l'API Intl.DisplayNames et des options �tendues de timeZoneName dans l'API Intl.DateTimeFormat. Dans Node.js 16, le moteur JavaScript V8 est V8 9.4. C'est gr�ce aux mises � jour du moteur JavaScript V8 que Node.js obtient les nouvelles fonctionnalit�s du langage JavaScript.
Node.js 16 promu au support � long terme
La semaine prochaine, Node.js 16 sera promu au support � long terme. Il s'agit d'une �tape importante, car de nombreux utilisateurs, en particulier ceux qui exploitent des d�ploiements de production, choisiront d'utiliser uniquement les versions de Node.js prises en charge � long terme. Cela signifie que, pour la premi�re fois, certaines fonctionnalit�s seront disponibles dans une version prise en charge � long terme. Les versions 16 et ult�rieures de Node.js incluent Corepack, un script qui agit comme un pont entre les projets Node.js et les gestionnaires de paquets avec lesquels ils sont destin�s � �tre utilis�s pendant le d�veloppement. En termes pratiques, Corepack permettra d'utiliser Yarn et pnpm sans avoir � les installer.
Deno
Tout comme Node.js, Deno est un moteur d'ex�cution, moderne et s�curis� pour JavaScript et TypeScript , il utilise 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.
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.
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.js 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.15 de Deno.
Nouvelles API de chiffrement
Conform�ment � l�un des objectifs de l��quipe de d�veloppement de Deno, de disposer d'une API Crypto Web compl�te d'ici la fin de l'ann�e, Deno a bien progress� dans cette version :
- crypto.subtle.encrypt() : le cryptage AES-CBC est maintenant support� ;
- crypto.subtle.decrypt() : le d�cryptage AES-CBC est maintenant support� ;
- crypto.subtile.exportKey() : les cl�s RSA peuvent maintenant �tre export�es au format spki ;
- crypto.subtle.importKey() : les cl�s ECDSA peuvent maintenant �tre import�es au format raw ;
- crypto.subtle.deriveBits() : la d�rivation ECDH est maintenant support�e (seulement pour les cl�s P256) ;
- crypto.subtle.wrapKey() : l'enveloppement des cl�s est maintenant support� pour toutes les combinaisons de cl�s et de formats support�es par crypto.subtle.exportKey().
Am�liorations de FFI
L'API FFI a �t� ajout�e � Deno 1.13. Cette API permet aux utilisateurs d'appeler des biblioth�ques �crites dans des langages supportant l'ABI C tels que C, C++, C#, Kotlin, Nim, Rust ou Zig. La version 1.15 de Deno ajoute la prise en charge de deux fonctionnalit�s tr�s utiles � l'API FFI : les appels non bloquants et les arguments de tampon.
Appels non bloquants
Il existe de nombreux cas d'utilisation o� les utilisateurs peuvent vouloir ex�cuter des fonctions FFI li�es au CPU en arri�re-plan sans bloquer d'autres t�ches sur le thread principal. Avec cette version, les symboles peuvent �tre marqu�s non bloquants dans Deno.dlopen. Ces appels de fonction s'ex�cuteront sur un thread bloquant d�di� et renverront une promesse correspondant au r�sultat souhait�.
Exemple d'ex�cution d'appels FFI co�teux avec Deno :
Code C : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 // sleep.c #ifdef _WIN32 #include <Windows.h> #else #include <time.h> #endif int sleep(unsigned int ms) { #ifdef _WIN32 Sleep(ms); #else struct timespec ts; ts.tv_sec = ms / 1000; ts.tv_nsec = (ms % 1000) * 1000000; nanosleep(&ts, NULL); #endif }
Appel de Deno
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 // nonblocking_ffi.ts const library = Deno.dlopen("./sleep.so", { sleep: { parameters: ["usize"], result: "void", nonblocking: true, }, }); library.symbols.sleep(500).then(() => console.log("After")); console.log("Before");
Resultat
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3$ deno run --allow-ffi --unstable nonblocking_ffi.ts Before After
Arguments de type tampon
Avant la version 1.15, les arguments des symboles FFI �taient limit�s aux types primitifs, mais cette version ajoute la possibilit� d'utiliser des tampons comme arguments pour les appels FFI.
Lors de l'appel de symboles FFI avec un tampon, l'argument suivant doit �tre la longueur du tampon.
Exemple
Code Rust : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 // print_buffer.rs #[no_mangle] pub extern "C" fn print_buffer(ptr: *const u8, len: usize) { let buf = unsafe { std::slice::from_raw_parts(ptr, len) }; println!("{:?}", buf); }
Appel de Deno
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 // print_buffer.ts const library = Deno.dlopen("./print_buffer.so", { print_buffer: { parameters: ["buffer", "usize"], result: "void", }, }); const buffer = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]); dylib.symbols.print_buffer(buffer, buffer.length);
R�sultat
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 $ deno run --allow-ffi --unstable print_buffer.ts [1, 2, 3, 4, 5, 6, 7, 8]
Outre le passage de tampons en tant qu'arguments, Deno reconna�t l'importance de pouvoir utiliser des tampons en tant que valeurs de retour et pr�voit de prendre en charge cette fonctionnalit� dans les prochaines versions.
deno lint --watch
deno lint prend d�sormais en charge l'indicateur --watch qui maintient le processus en vie apr�s l�affichage des diagnostics et surveille les modifications de fichiers pour mettre � jour les diagnostics � partir des fichiers modifi�s. Comme dans les autres sous-commandes qui prennent en charge l'option --watch, les fichiers qui doivent �tre surveill�s sont automatiquement d�couverts par Deno.
Version 9.5 du moteur JavaScript V8
Tout comme Node.js, Deno 1.15 inclut la Version 9.5 du moteur JavaScript V8. Cette version introduit la nouvelle API JavaScript Intl.DisplayNames v2, une option timeZoneName �tendue pour Intl.DateTimeFormat, et la prise en charge de la proposition WebAssembly Exception Handling (Wasm EH).
Sources : Nodejs, Deno
Et vous ?
Lequel de ses deux moteurs d'ex�cution JavaScript pr�f�rez-vous ? Deno ou Node.js ?
Quelle am�lioration de Deno ou de Node.js pr�f�rez-vous le plus ?
Selon Deno, � ...la cr�ation des projets Node.js peut devenir une t�che ardue, impliquant la gestion des outils lourds qui enl�vent le plaisir des scripts de langage dynamique �, Partagez-vous cet avis ?
Voir aussi :
OpenSSL annonce la disponibilit� de la version 3.0 et le renouvellement de la Licence Apache-2.0, avec l'utilisation du nouveau module FIPS dans les projets de d�veloppement d'applications
Node.js 16 est maintenant disponible, et vient avec une mise � niveau du moteur JavaScript V8, des binaires pr�construits pour les puces Apple et des API stables suppl�mentaires
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
La Fondation Node.js annonce la mise en place d'un programme de certification pour les d�veloppeurs Node.js, qui d�butera au second trimestre
Partager