JavaScripti platvormil Bun on lisatud tugi C-koodide kutsumiseks

Bun platvorm, mis on välja töötatud Node.js alternatiivina ning mõeldud rakenduste iseseisvaks käitamiseks JavaScripti, JSX-i ja TypeScripti keeltes, on rakendanud eksperimentaalse võimaluse C keeles kirjutatud töötlejate kompileerimiseks ja käitamiseks. Varasemalt nõudis madala taseme koodi kutsumine kas N-API laienduste loomist või koodi kompileerimist WebAssembly (WASM/WASI) formaati, mis keerukusi tekitas ja teatud piiranguid seadis. Nüüd saab C keeles kirjutatud koodi otse JavaScripti sisse embedida ja kompileerida reaalajas TinyCC kompilaatoriga, samuti siduda dünaamiliselt ühendatavaid teeke. import { cc } from "bun:ffi"; export const { symbols: { hello }, } = cc({ source: "./hello.c", symbols: { hello: { returns: "void", args: [], }, }, }); hello();

C keele kasutamiseks on olemas bun:ffi vahetükki, mis kompileerib lähtekoodi masina juhisteks, paigutab selle mälu ajal sisse ja tagab automaatse andmetüüpide konversiooni JavaScripti ja C vahel. Märgitakse, et C keele kompileeritud koodi kutsumisega seotud kulud on minimaalseteks vähendatud, mis toob kaasa umbes 2 nanosekundi viivituse igal välisel C funktsioonide kutsumisel. Näiteks on näidatud, kuidas saab otse FFmpeg teegiga lühikeste videote konverteerimiseks suhelda - kõrvaldades sellised tegevused nagu eraldi protsessi käivitamine ja iga video jaoks mälu eraldamine, õnnestus bun:ffi kasutamisel testülesande koguaega kolmandiku võrra lühendada.

Lisaks on Bun 1.1.29 väljaandes C keele koodile lisatud N-API (napi) tugi, mille abil saavad C keeles kirjutatud töötlejad tagastada JavaScriptis objekte, stringe, massiive ja muid mitte-primitivseid väärtusi, lisaks C keele tüüpidele nagu int ja float. C keeles töötlejate kutsumise mehhanism toimib ka igasuguste C ABI teekide dünaamilise laadimise korral, sõltumata sellest, millisest keeles need esmakordselt kirjutatud on (C++, Rust, Zig jne), mis võimaldab JavaScripti koodist nende teekidega pakutavate funktsioonide kutsumist ilma eraldi uuesti kompileerimise etapita. Näiteks nüüd on võimalik JavaScriptist kutsuda süsteemi API-d.

Tulet meenutama, et projekt Bun areneb, silmas pidades ühilduvust serveri rakendustega, mis on kirjutatud Node.js jaoks, ning toetab suuremat osa Node.js API-st. Platvorm sisaldab komplekti tööriistu rakenduste loomiseks ja käitamiseks JavaScripti ning TypeScripti keeltes, samuti JavaScripti käitusaega, mis võimaldab JavaScripti rakenduste käitamist ilma brauserita, pakihaldurit (ühilduv NPM-iga), testimisinstrumente ja iseseisvate paketihaldussüsteemide koostamisvahendeid. Suutlikkuse poolelt ületab Bun märkimisväärselt Deno ja Node.js (testides, mis põhinevad React raamistikul, on Bun platvorm Deno's 2 korda kiirem ja Node.js'ist peaaegu 5 korda kiirem). Kood Bun on kirjutatud Zig ja C++ keeltes ning seda levitatakse MIT litsentsi alusel. JavaScripti käitamiseks kasutatakse JavaScripti mootorratast JavaScriptCore ja WebKiti projekti komponente koos täiendavate plaastritega.

Allikas: opennet.ru

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster