La plateforme JavaScript Bun a désormais un support pour l'appel de code en langage C

La plateforme Bun, dĂ©veloppĂ©e comme une alternative Ă  Node.js et destinĂ©e Ă  l'exĂ©cution isolĂ©e d'applications Ă©crites dans les langages JavaScript, JSX et TypeScript, a mis en Ɠuvre une fonctionnalitĂ© expĂ©rimentale de compilation et d'exĂ©cution de gestionnaires Ă©crits en langage C. Auparavant, pour appeler du code bas niveau, il fallait soit crĂ©er des extensions N-API, soit compiler le code au format WebAssembly (WASM/WASI), ce qui compliquait le dĂ©veloppement et imposait certaines limitations. DĂ©sormais, le code en langage C peut ĂȘtre intĂ©grĂ© directement dans JavaScript et ĂȘtre compilĂ© Ă  la volĂ©e Ă  l'aide du compilateur TinyCC, tout en permettant de lier dynamiquement des bibliothĂšques. import { cc } from "bun:ffi"; export const { symbols: { hello }, } = cc({ source: ".\/hello.c", symbols: { hello: { returns: "void", args: [], }, }, }); hello();

Une couche bun:ffi est utilisĂ©e pour interagir avec le langage C, qui compile le code source en instructions machine, l'insĂšre en mĂ©moire lors de l'exĂ©cution et assure une conversion automatique des types de donnĂ©es entre JavaScript et C. Il est notĂ© que les frais gĂ©nĂ©raux lors de l'appel de code C compilĂ© sont rĂ©duits au minimum, entraĂźnant un dĂ©lai d'environ 2 nanosecondes par appel de fonctions externes en C. Par exemple, il est montrĂ© comment accĂ©der directement aux bibliothĂšques FFmpeg pour la conversion de courtes vidĂ©os — en Ă©liminant des opĂ©rations telles que le fork d'un processus distinct et l'allocation de mĂ©moire pour chaque vidĂ©o, le temps d'exĂ©cution total d'une tĂąche de test a pu ĂȘtre rĂ©duit par trois en utilisant bun:ffi.

De plus, dans la version 1.1.29 de Bun, le support N-API (napi) a été ajouté pour le code en langage C, permettant aux gestionnaires écrits en C de retourner des objets, des chaßnes, des tableaux et d'autres valeurs non primitives de JavaScript, en plus des types spécifiques au langage C tels que int et float. Le mécanisme d'appel des gestionnaires en C fonctionne également lors du chargement dynamique de toute bibliothÚque avec C ABI, indépendamment du langage dans lequel elles ont été initialement écrites (C++, Rust, Zig, etc.), ce qui permet d'appeler depuis le code JavaScript les fonctions fournies par ces bibliothÚques sans étape de recompilation séparée. Par exemple, il est désormais possible d'accéder aux API systÚme directement depuis JavaScript.

Rappelons que le projet Bun se développe en tenant compte de la compatibilité avec les applications serveur écrites pour Node.js et prend en charge la majeure partie de l'API Node.js. La plateforme comprend un ensemble d'outils pour créer et exécuter des applications en JavaScript et TypeScript, ainsi qu'un runtime pour exécuter des applications JavaScript sans navigateur, un gestionnaire de paquets (compatible avec NPM), des outils pour exécuter des tests et un systÚme de construction de paquets autonomes. En termes de performances, Bun surpasse nettement Deno et Node.js (dans les tests basés sur le framework React, la plateforme Bun est deux fois plus rapide que Deno et presque cinq fois plus rapide que Node.js). Le code de Bun est écrit en Zig et C++ et est distribué sous la licence MIT. Pour exécuter JavaScript, il utilise le moteur JavaScript JavaScriptCore et des composants du projet WebKit avec des correctifs supplémentaires.

Source : opennet.ru

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster