Bun JavaScript-platform voegt ondersteuning toe voor het aanroepen van code in C

Het Bun-platform, ontwikkeld als alternatief voor Node.js en ontworpen voor stand-alone uitvoering van applicaties geschreven in JavaScript, JSX en TypeScript, heeft een experimentele mogelijkheid om handlers geschreven in C te compileren en uit te voeren. Voorheen vereiste het aanroepen van code op laag niveau het maken van N-API-add-ons of het compileren van de code in het WebAssembly-formaat (WASM/WASI), wat de ontwikkeling bemoeilijkte en bepaalde beperkingen oplegde. Nu kan C-code rechtstreeks in JavaScript worden ingebed en direct worden gecompileerd met behulp van de TinyCC-compiler, evenals dynamisch gekoppelde bibliotheken. importeer { cc } uit "bun:ffi"; export const { symbolen: { hallo }, } = cc({ bron: "./hello.c", symbolen: { hallo: { retourneert: "void", args: [], }, }, }); Hallo();

Om met de C-taal te werken, wordt de bun:ffi-laag gebruikt, die de broncode in machine-instructies compileert, deze tijdens de uitvoering in het geheugen invoegt en zorgt voor automatische conversie van gegevenstypen tussen JavaScript en C. Opgemerkt wordt dat de overhead bij het benaderen van gecompileerde C-code wordt geminimaliseerd en leidt tot een vertraging van ongeveer 2 nanoseconden voor elke oproep naar externe C-functies. Als voorbeeld wordt getoond hoe u rechtstreeks toegang kunt krijgen tot FFmpeg-bibliotheken om korte video's te converteren - door bewerkingen zoals het forken van een afzonderlijk proces en het toewijzen van geheugen voor elke video te elimineren, werd de totale uitvoeringstijd van de testtaak bij gebruik van bun:ffi verkort met drie keer.

Bovendien is in de release van Bun 1.1.29 ondersteuning voor N-API (napi) toegevoegd voor C-code, waardoor handlers geschreven in C objecten, strings, arrays en andere niet-primitieve JavaScript-waarden kunnen retourneren, naast de typen die inherent zijn aan de C-taal, zoals int en float. Het mechanisme voor het aanroepen van handlers in de C-taal werkt ook bij het dynamisch laden van bibliotheken met de C ABI, ongeacht de taal waarin ze oorspronkelijk zijn geschreven (C++, Rust, Zig, enz.), waardoor u kunt bellen vanuit JavaScript-code die door deze bibliotheken worden geleverd, functioneert zonder een afzonderlijke hermontagefase. U hebt nu bijvoorbeeld toegang tot systeem-API's vanuit JavaScript.

Bedenk dat het Bun-project wordt ontwikkeld met het oog op het garanderen van compatibiliteit met serverapplicaties die zijn geschreven voor Node.js, en dat het het grootste deel van de Node.js API ondersteunt. Het platform bevat een reeks tools voor het maken en uitvoeren van applicaties in JavaScript en TypeScript, evenals een runtime voor het uitvoeren van JavaScript-applicaties zonder browser, een pakketbeheerder (NPM-compatibel), tools voor het uitvoeren van tests en een systeem voor het bouwen van zelf- bevatte pakketten. Qua prestaties loopt Bun merkbaar voor op Deno en Node.js (in tests op basis van het React-framework is het Bun-platform 2 keer sneller dan Deno en bijna 5 keer sneller dan Node.js). De code van Bun is geschreven in Zig en C++ en wordt gedistribueerd onder de MIT-licentie. Om JavaScript uit te voeren, worden de JavaScriptCore JavaScript-engine en WebKit-projectcomponenten met extra patches gebruikt.

Bron: opennet.ru

Voeg een reactie