Bun JavaScript platvormil on lisatud toetus C keeles koodi kutsumiseks.

Bun platvormis, mis areneb Node.js alternatiivina ja on mõeldud rakenduste isoleeritud täitmiseks JavaScripti, JSX-i ja TypeScripti keeltes, on implementeeritud katsekompleks C-keeles kirjutatud töötlejate kompileerimise ja täitmise võimalus. Varem nõudis madalama taseme koodi kutsumine kas N-API lisandite loomist või koodi kompileerimist WebAssembly (WASM/WASI) formaati, mis raskendas arendustööd ja seadis teatud piirangud. Nüüd on C-koodi võimalik otse JavaScripti sisse ehitada ja kompileerida reaalajas TinyCC kompilaatorit kasutades, samuti dünaamiliselt lingitud teeke lisada. import { cc } from "bun:ffi"; export const { symbols: { hello }, } = cc({ source: "./hello.c", symbols: { hello: { returns: "void", args: [], }, }, }); hello();

C-keele töötamiseks kasutatakse bun:ffi kihti, mis kompileerib allika koodi masiinijuhisteks, paigutab selle käitamisel mällu ja tagab automaatse andmetüüpide konversiooni JavaScripti ja C vahel. On märgitud, et kulud, mis on seotud kompileeritud C-koodiga, on minimaalsetes suurustes ja põhjustavad umbes 2 nanosekundilist viivitust iga välise C-funktsiooni kutsumise kohta. Näitena on toodi, kuidas saab otse pöörduda FFmpeg teekide poole lühikeste videote töötlemiseks — tänu selliste operatsioonide, nagu eraldi protsessi tükeldamise ja iga video jaoks mälu eraldamise välistamisele, õnnestus bun:ffi kasutamisel testülesande täitmise aega kolm korda vähendada.

Lisaks sellele lisati Bun 1.1.29 väljal C keeles koodi N-API (napi) tugi, mis võimaldab C keeles kirjutatud töötlejatel tagastada JavaScripti objekte, stringe, massiive ja muid mitteprimitiivseid väärtusi, lisaks C keelele iseloomulikele tüüpidele nagu int ja float. C keeles töötlejate kutsumise mehhanism töötab ka dünaamiliselt laaditud kõigi C ABI-ga raamatukogude puhul, sõltumata sellest, millises keeles need algselt kirjutatud on (C++, Rust, Zig jne), võimaldades JavaScripti koodist kutsuda need raamatukogudest pakutavaid funktsioone ilma eraldi uuestisihita. Näiteks saab nüüd JavaScriptist ligi pääseda süsteemi API-dele.

Tulet meelde, et projekt Bun areneb silmas pidades ühilduvust serverirakendustega, mis on kirjutatud Node.js-i jaoks, ning toetab enamikku Node.js API-sid. Platvorm sisaldab tööriistade komplekti rakenduste loomiseks ja käitamiseks JavaScripti ja TypeScripti keeltes, samuti jooksutootjat JavaScripti rakenduste käitamiseks ilma brauserita, pakihalduri (NPM-iga ühilduv), testimisvahendeid ja iseseisvate pakettide koostamise süsteemi. Tulemuslikkuses ületab Bun märkimisväärselt Deno ja Node.js (Reacti raamistikul põhinevates testides ületab Bun Deno kaks korda ja Node.js-i peaaegu viis korda). Bun'i kood on kirjutatud keeltes Zig ja C++ ning seda levitatakse MIT litsentsi alusel. JavaScripti täitmiseks kasutatakse JavaScripti mootorratast JavaScriptCore ja WebKit projekti komponente koos täiendavate plaastritega.

Allikas: opennet.ru

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster