IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Bun, un nouveau moteur d'exécution JavaScript, livré avec un client SQLite3 rapide,
Il apporte un peu de concurrence pour Node et Deno

Le , par Bruno

32PARTAGES

17  0 
Bun est un moteur d'exécution JavaScript rapide et tout-en-un. Il permet de regrouper, transpiler, installer et exécuter des projets JavaScript et TypeScript. Il s’agit d’un runtime JavaScript avec un bundler natif, un transpiler, un task runner et un client npm intégrés.

Bun est conçu pour remplacer les applications ou scripts JavaScript et TypeScript sur l’ordinateur local. Il implémente nativement des centaines d'APIs Node.js et Web, y compris environ 90 % des fonctions Node-API (modules natifs), fs, path, Buffer et plus encore. L'objectif de Bun est d'exécuter la plupart des codes JavaScript en dehors des navigateurs, en apportant des améliorations de performance et de complexité à l’infrastructure, ainsi que la productivité des développeurs grâce à des outils meilleurs et plus simples.


  • Bun met en œuvre l'algorithme de résolution des modules de Node.js, de sorte qu’il est possible d’ utiliser des paquets npm dans bun.js. ESM et CommonJS sont supportés, mais Bun utilise ESM en interne. Les API Web comme fetch, WebSocket et ReadableStream sont intégrées ;
  • Dans bun.js, chaque fichier est transpilé. TypeScript et JSX fonctionnent simplement. Bun supporte "paths", "jsxImportSource "et plus à partir des fichiers tsconfig.json. Bun.Transpiler, le transpilateur JSX et TypeScript de bun est disponible en tant qu'API dans Bun.js ;
  • Il estpossible d’utiliser les appels système les plus rapides disponibles avec Bun.write pour écrire, copier, pipe, envoyer et cloner des fichiers. bun.js charge automatiquement les variables d'environnement à partir des fichiers .env. Plus besoin de require("dotenv").load() ;
  • Bun est livré avec un client SQLite3 rapide intégré bun:sqlite. Node-API bun.js implémente la plupart des Node-API (N-API). De nombreux modules natifs de Node.js fonctionnent simplement. bun:ffi appelle le code natif de JavaScript avec l'interface de fonction étrangère à faible coût de bun ;
  • node:fs node:path bun.js supporte nativement une liste croissante de modules Node.js de base ainsi que des globaux comme Buffer et process.
Bun.js utilise le moteur JavaScriptCore, qui a tendance à démarrer et à fonctionner un peu plus rapidement que des choix plus traditionnels comme V8. Bun est écrit dans un langage de programmation de bas niveau avec une gestion manuelle de la mémoire. La plupart des éléments de Bun sont écrits à partir de zéro, notamment le transpilateur JSX/TypeScript, le client npm, le bundler, le client SQLite, le client HTTP, le client WebSocket.

Le contrôle de bas niveau de la mémoire et l'absence de flux de contrôle caché de Bun simplifient considérablement l'écriture de logiciels rapides. Pour installer Bun, l’utilisateur doit executer ce script d'installation dans un terminal. Il télécharge Bun depuis GitHub.

curl https://bun.sh/install | bash

Le serveur HTTP de Bun est construit sur des standards web comme Request et Response

Code : Sélectionner tout
1
2
3
4
5
6
7
// http.js 
export default { 
  port: 3000, 
  fetch(request) { 
    return new Response("Welcome to Bun!"); 
  }, 
};

bun run http.js

Ouvrez ensuite "http://localhost:3000" dans votre navigateur

CLI de Bun

bun run

La même commande permettant d'exécuter des fichiers JavaScript et TypeScript avec le moteur d'exécution JavaScript de bun permet également d'exécuter les "scripts" de package.json. Remplacer npm run par bun run permet de gagner 160 ms à chaque exécution. bun exécute les scripts de package.json 30 fois plus vite que npm run.

Npm est le gestionnaire de paquets par défaut pour l'environnement d'exécution JavaScript Node.js. Npm se compose d'un client en ligne de commande, également appelé npm, et d'une base de données en ligne de paquets publics et privés payants, appelée le registre npm.

bun install

bun install est un gestionnaire de paquets compatible avec npm. Il utilise les appels système les plus rapides disponibles pour copier les fichiers.
bun wiptest. Un gestionnaire de tests de type Jest pour les projets JavaScript et TypeScript intégré à bun. Bun essaie toujours d'utiliser la méthode d'installation la plus rapide disponible pour la plateforme cible. Sous macOS, c'est clonefile et sous Linux, c'est hardlink.

Il est possible de changer la méthode d'installation utilisée avec l'option --backend. En cas d'indisponibilité ou d'erreur, clonefile et hardlink se rabattent sur une implémentation de copie de fichiers spécifique à la plateforme. Bun stocke les paquets installés depuis npm dans ~/.bun/install/cache/${name}@${version}. Notons que si la version semver a une balise build ou pre, elle est remplacée par un hash de cette valeur. Cela permet de réduire les risques d'erreurs dues à de longs chemins de fichiers, mais complique malheureusement la détermination de l'endroit où un paquet a été installé sur le disque.

Lorsque le dossier node_modules existe, avant l'installation, Bun vérifie si le "nom" et la "version" dans package/package.json dans le dossier node_modules attendu correspondent au nom et à la version attendus. C'est ainsi qu'il détermine s'il doit installer ou non. Il utilise un analyseur JSON personnalisé qui arrête l'analyse dès qu'il trouve "nom" et "version". Lorsqu'un bun.lockb n'existe pas ou que le package.json a changé de dépendances, les archives sont téléchargées et extraites rapidement pendant la résolution.

Lorsqu'un bun.lockb existe et que le package.json n'a pas changé, bun télécharge les dépendances manquantes. Si le paquet dont le nom et la version correspondent existe déjà à l'emplacement prévu dans node_modules, bun n'essaiera pas de télécharger l'archive. Bun stocke les valeurs normalisées de cpu et os de npm dans le fichier de verrouillage, avec les paquets résolus.

Il évite de télécharger, d'extraire et d'installer les paquets désactivés pour la cible au moment de l'exécution. Cela signifie que le fichier de verrouillage ne changera pas entre les plateformes/architectures, même si les paquets finalement installés changent. Les dépendances entre pairs sont gérées de manière similaire à yarn. bun install n'installe pas automatiquement les dépendances entre pairs et essaiera de choisir une dépendance existante.

Burn apporte de la concurrence aux moteurs d’exécution déjà existant

Node.js

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.

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.

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.

Bun a été construit à partir de zéro pour se concentrer sur trois choses principales :

  • démarrage rapide (il a l'avantage d'être rapide) ;
  • de nouveaux niveaux de performance (extension de JavaScriptCore, le moteur) ;
  • être un outil formidable et complet (bundler, transpiler, gestionnaire de paquets).

Source : Bun

Et vous ?

Lequel de ses trois moteurs d'exécution JavaScript préférez-vous ? Deno, Node.js ou Bun ?

Quelle amélioration de Bun préférez-vous le plus ?

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

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de emilie77
Membre éprouvé https://www.developpez.com
Le 11/07/2022 à 10:31
ça je la trouve une bonne idée
2  0 
Avatar de grunk
Modérateur https://www.developpez.com
Le 11/07/2022 à 12:31
Ca semble prometteur et on fait un pas de plus vers le support natif de typescript !
1  0 
Avatar de ludovicdeluna
Membre du Club https://www.developpez.com
Le 11/07/2022 à 14:29
Répondre aux 2 questions de l'auteur est prématuré. Ce qui l'est moins, c'est de constater que 2 projets (Deno en Rust, Bun en Zig) supportent TypeScript.

Je sais, je sais: TypeScript est sous-représenté chez les devs JS. J'aurais pourtant plus de facilité à filer les billes à un dev Front si mon back est en TypeScript. Ne me demandez pas pourquoi Idem d'ailleurs si le back est en Dart, même si son rapport avec les devs Front semble plus mitigé.

Pour l'instant, le choix de l'un ou l'autre sont hors champs. L'avenir nous dira ce qu'il en est, mais les deux solutions ont du potentiel.

Merci pour cette belle présentation qui a remis Bun dans mon radar.
0  0 
Avatar de Waikiki
Membre averti https://www.developpez.com
Le 19/08/2022 à 20:42
Ça va déprendre de sa stabilité pour être utilisé en développement/production dans le monde pro et de l'adoption par les entreprises.

Autant aux USA l'adoption peut être mais en France c'est pas gagné, suffit de voir la quantité d'entreprise utilisant encore d'anciennes version de php/symfony, ou d'angular (je vois encore beaucoup d'entreprise utilisant angular 8). Ou le peu d'adoption de RoR, Python/Django ou même Go. J'ai l'impression qu'on aime pas trop sortir des sentiers battus en France
0  0 
Avatar de rt15
Membre éclairé https://www.developpez.com
Le 20/08/2022 à 20:22
Pourquoi est-ce appelé un moteur d'exécution JavaScript ? Le moteur semble être JavaScriptCore. Bun ne fait qu'ajouter des APIs et des "services" autour de ce moteur dont certains ne servent qu'au développement et pas à l'exécution (Gestionnaire de paquet, transpiler...). Peut être appeler ça un environnement d'exécution accompagné d'outils de développement.
Niveau perf, ce sont plus les gains des tâches de dev qui sont présentées, pas les perfs des applications qui vont s'exécuter dans l'environnement Bun (qui dépendent surtout du moteur et de la qualité d'implémentation des APIs).
0  0 
Avatar de Paul_Le_Heros
Membre averti https://www.developpez.com
Le 24/07/2022 à 3:44
Interprétation de JavaScript par Java, c'est drôle, non ? j'ai cru lire que le créateur de JavaScript (Brendan Machin ?) ou le fondateur de NetScape (Jim Truc ?) rêvait de la mort de Java
0  1