Na platformě JavaScript Bun byla přidána podpora pro volání kódu napsaného v jazyce C.

V platformě Bun, vyvíjené jako alternativa k Node.js a určené pro izolované spouštění aplikací napsaných v jazycích JavaScript, JSX a TypeScript, byla implementována experimentální funkce kompilace a spouštění handlerů napsaných v jazyce C. Dříve bylo pro volání nízkoúrovňového kódu nutné buď vytvořit N-API rozšíření, nebo kompilovat kód do formátu WebAssembly (WASM/WASI), což komplikovalo vývoj a kladlo určitá omezení. Nyní je možné kód v jazyce C přímo vkládat do JavaScriptu a kompilovat on-the-fly pomocí kompilátoru TinyCC a také připojovat dynamicky linkované knihovny. import { cc } from "bun:ffi"; export const { symbols: { hello }, } = cc({ source: "./hello.c", symbols: { hello: { returns: "void", args: [], }, }, }); hello();

Pro práci s jazykem C se používá mezivrstva bun:ffi, která kompiluje zdrojový kód do strojových instrukcí, vkládá ho do paměti při vykonávání a zajišťuje automatickou konverzi datových typů mezi JavaScriptem a C. Bylo zdůrazněno, že režijní náklady při volání zkompilovaného C kódu byly minimalizovány a vedou k latenci kolem 2 nanosekund na každý externí volání funkcí C. Jako příklad je ukázáno, jak lze přímo pracovat s knihovnami FFmpeg pro transformaci krátkých videí — tím, že jsou vyloučeny takové operace jako spouštění samostatného procesu a alokace paměti pro každé video, celkový čas provádění testovací úlohy při použití bun:ffi se podařilo zkrátit třikrát.

Navíc, ve verzi Bun 1.1.29 byla přidána podpora N-API (napi) pro kód v jazyce C, díky které mohou handlery napsané v jazyce C vracet objekty, řetězce, pole a další neprimitivní hodnoty JavaScriptu, kromě typů specifických pro jazyk C, jako je int a float. Mechanismus volání handlerů v jazyce C funguje i při dynamickém načítání jakýchkoli knihoven s C ABI, bez ohledu na to, v jakém jazyce byly původně napsány (C++, Rust, Zig atd.), což umožňuje volat funkce poskytované těmito knihovnami přímo z JavaScriptu bez samostatné fáze přebudování. Například nyní je možné volat systémové API z JavaScriptu.

Připomínáme, že projekt Bun se vyvíjí s ohledem na zajištění kompatibility se serverovými aplikacemi napsanými pro Node.js a podporuje většinu API Node.js. Součástí platformy je sada nástrojů pro tvorbu a spouštění aplikací v jazycích JavaScript a TypeScript, jakož i runtime pro provádění JavaScriptových aplikací bez prohlížeče, balíčkový manažer (kompatibilní s NPM), nástroje pro provádění testů a systém pro sestavení samostatných balíčků. V oblasti výkonu Bun výrazně předčí Deno a Node.js (v testech založených na frameworku React platforma Bun překonává Deno dvakrát a téměř pětkrát Node.js). Kód Bun je napsán v jazycích Zig a C++ a šíří se pod licencí MIT. Pro provádění JavaScriptu je využíván JavaScriptový engine JavaScriptCore a komponenty projektu WebKit s dodatečnými záplatami.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster