In het JavaScript-platform Bun is ondersteuning toegevoegd voor het aanroepen van C-code

Op het Bun-platform, dat wordt ontwikkeld als alternatief voor Node.js en is ontworpen voor het afzonderlijk uitvoeren van applicaties geschreven in JavaScript, JSX en TypeScript, is een experimentele mogelijkheid geïmplementeerd voor het compileren en uitvoeren van handlers geschreven in de programmeertaal C. Voorheen was het nodig om N-API-add-ons te creëren of de code te compileren naar het WebAssembly-formaat (WASM/WASI) om laag-niveau code aan te roepen, wat de ontwikkeling bemoeilijkte en bepaalde beperkingen oplegde. Nu kan C-code rechtstreeks in JavaScript worden ingesloten en on-the-fly worden gecompileerd met behulp van de TinyCC-compiler, evenals dynamisch gekoppelde bibliotheken worden aangesloten. import { cc } from "bun:ffi"; export const { symbols: { hello }, } = cc({ source: ".\/hello.c", symbols: { hello: { returns: "void", args: [], }, }, }); hello();

Voor het werken met de programmeertaal C wordt de laag bun:ffi gebruikt, die de broncode compileert naar machined instructies, deze in het geheugen plaatst tijdens uitvoering en automatische typeconversie tussen JavaScript en C mogelijk maakt. Er wordt opgemerkt dat de overhead bij het aanroepen van gecompileerde C-code tot een minimum is beperkt, met een vertraging van ongeveer 2 nanoseconden per aanroep van externe C-functies. Als voorbeeld wordt getoond hoe direct kan worden verwezen naar FFmpeg-bibliotheken voor het converteren van korte video's — door operaties zoals het splitsen van een apart proces en het toewijzen van geheugen voor elke video uit te sluiten, is de totale uitvoeringstijd van de testtaak met bun:ffi met drie keer verminderd.

Bovendien is in de release van Bun 1.1.29 voor C-code ondersteuning voor N-API (napi) toegevoegd, waardoor in C geschreven handlers objecten, strings, arrays en andere niet-primitieve JavaScript-waarden kunnen retourneren, naast de types die inherent zijn aan de programmeertaal C, zoals int en float. Het mechanisme voor het aanroepen van handlers in de programmeertaal C werkt ook bij het dynamisch laden van alle bibliotheken met C ABI, ongeacht in welke programmeertaal ze oorspronkelijk zijn geschreven (C++, Rust, Zig, enz.), wat het mogelijk maakt om functies uit JavaScript-code aan te roepen die door deze bibliotheken worden aangeboden zonder een aparte herbouwfase. Bijvoorbeeld, nu kan er vanuit JavaScript toegang worden verkregen tot systeem-API's.

Ter herinnering, het Bun-project wordt ontwikkeld met oog voor compatibiliteit met serverapplicaties geschreven voor Node.js en ondersteunt het grootste deel van de Node.js API. Het platform omvat een set tools voor het bouwen en uitvoeren van applicaties in de programmeertalen JavaScript en TypeScript, evenals een runtime voor het uitvoeren van JavaScript-applicaties zonder browser, een pakketbeheerder (compatibel met NPM), een testuitvoeringskit en een build-systeem voor zelfvoorzienende pakketten. Wat prestaties betreft, overtreft Bun Deno en Node.js aanzienlijk (in tests gebaseerd op het React-framework presteert Bun 2 keer beter dan Deno en bijna 5 keer beter dan Node.js). De code van Bun is geschreven in Zig en C++ en wordt verspreid onder de MIT-licentie. Voor het uitvoeren van JavaScript wordt de JavaScript-engine JavaScriptCore gebruikt, samen met componenten van het WebKit-project met extra patches.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster