Në platformën Bun, e cila po zhvillohet si një alternativë ndaj Node.js dhe është e destinuar për ekzekutimin e ndarë të aplikacioneve të shkruara në gjuhët JavaScript, JSX dhe TypeScript, është implementuar një mundësi eksperimentale për kompilimin dhe ekzekutimin e trajtesave të shkruara në gjuhën C. Më parë, për të thirrur kodin me nivel të ulët, duhej ose të krijoheshin shtesa N-API, ose të kompiloheshin kodet në formatin WebAssembly (WASM/WASI), e cila e ndërlikonte zhvillimin dhe vendoste disa kufizime. Tani kodi në gjuhën C mund të inkorporohet direkt në JavaScript dhe të kompilojë në flakë duke përdorur kompilatorin TinyCC, si dhe të lidhë dynamikisht bibliotekat e lidhura. import { cc } from "bun:ffi"; export const { symbols: { hello }, } = cc({ source: ".\/hello.c", symbols: { hello: { returns: "void", args: [], }, }, }); hello();
PĂ«r tĂ« punuar me gjuhĂ«n C pĂ«rdoret njĂ« ndĂ«rfaqe bun:ffi, e cila kompilon kodin burimor nĂ« udhĂ«zime makinerie, e pĂ«rfshin atĂ« nĂ« memorje gjatĂ« ekzekutimit dhe siguron konvertimin automatik tĂ« tipeve tĂ« tĂ« dhĂ«nave midis JavaScript dhe C. Vihet nĂ« dukje se shpenzimet pĂ«r tĂ« thirrur kodin e komiluara nĂ« C janĂ« minimizuar dhe çojnĂ« nĂ« njĂ« vonesĂ« nĂ« nivelin e rreth 2 nanosekondave pĂ«r çdo thirrje tĂ« funksioneve tĂ« jashtme nĂ« C. Si njĂ« shembull, tregohet si mund tĂ« thyhen direkt bibliotekat FFmpeg pĂ«r transformimin e videove tĂ« shkurtra â duke pĂ«rjashtuar operacione tĂ« tilla si shpĂ«rndarja e njĂ« procesi tĂ« veçantĂ« dhe alokimi i memorjes pĂ«r çdo video, koha totale pĂ«r ekzekutimin e detyrĂ«s testuese me pĂ«rdorimin e bun:ffi Ă«shtĂ« arritur tĂ« reduktohet me tre herĂ«.
Për më tepër, në versionin Bun 1.1.29 për kodin në gjuhën C është shtuar mbështetje për N-API (napi), falë së cilës trajtesat e shkruara në gjuhën C mund të kthejnë objekte, vargje, lista dhe vlera të tjera jo primitive JavaScript, përveç tipeve karakteristike të gjuhës C, si int dhe float. Mekanizmi i thirrjes së trajtesave në gjuhën C vepron gjithashtu gjatë ngarkimit dinamik të çdo biblioteke me C ABI, pavarësisht nga gjuha me të cilën janë shkruar ato nga fillimi (C++, Rust, Zig, etj.), që lejon thirrjen nga kodi JavaScript të funksioneve të ofruara nga këto biblioteka pa një fazë të veçantë ri-kombinimi. Për shembull, tani mund të thirret nga JavaScript API-të sistemike.
Kujtojmë se projekti Bun po zhvillohet me qëllimin e sigurimit të pajtueshmërisë me aplikacionet serverike të shkruara për Node.js, dhe mbështet shumicën e API-ve të Node.js. Një grup mjetesh për krijimin dhe ekzekutimin e aplikacioneve në gjuhët JavaScript dhe TypeScript, si dhe një runtime për ekzekutimin e aplikacioneve JavaScript pa shfletues, një menaxher paketash (të kompatibilisë me NPM), mjete për ekzekutimin e testeve dhe një sistem ndërtimi për paketa të vetë-mjaftueshme, janë të përfshira në platformë. Në rendiment, Bun e tejkalon dukshëm Deno dhe Node.js (në testet bazuar në framework-un React, platforma Bun tejkalon Deno me 2 herë dhe gati 5 herë Node.js). Kodi i Bun është shkruar në gjuhët Zig dhe C++, dhe shpërndahet nën licencën MIT. Për ekzekutimin e JavaScript-it përdoret motori JavaScriptCore dhe komponentë nga projekti WebKit me patches të shtuar.
Burimi: opennet.ru
