Na platformie JavaScript Bun dodano wsparcie dla wywoływania kodu w języku C.

W platformie Bun, rozwijanej jako alternatywa dla Node.js i przeznaczonej do izolowanego wykonywania aplikacji napisanych w JavaScript, JSX i TypeScript, wprowadzono eksperymentalną możliwość kompilacji i wykonywania handlerów napisanych w języku C. Wcześniej wywołanie niskopoziomowego kodu wymagało tworzenia dodatków N-API lub kompilowania kodu do formatu WebAssembly (WASM/WASI), co komplikowało rozwój i nakładało pewne ograniczenia. Teraz kod w języku C można bezpośrednio zintegrować z JavaScript i kompilować w locie przy użyciu kompilatora TinyCC, a także dołączać dynamicznie linkowane biblioteki. import { cc } from "bun:ffi"; export const { symbols: { hello }, } = cc({ source: "./hello.c", symbols: { hello: { returns: "void", args: [], }, }, }); hello();

Do pracy z językiem C używana jest warstwa bun:ffi, która kompiluje kod źródłowy do instrukcji maszynowych, wstawia go do pamięci podczas wykonywania oraz zapewnia automatyczną konwersję typów danych między JavaScript a C. Zauważono, że koszty związane z dostępem do skompilowanego kodu C zostały zminimalizowane i prowadzą do opóźnienia na poziomie około 2 nanosekund przy każdym wywołaniu zewnętrznych funkcji C. Jako przykład pokazano, jak można bezpośrednio korzystać z bibliotek FFmpeg do przetwarzania krótkich wideo — dzięki eliminacji takich operacji jak uruchamianie oddzielnego procesu i przydzielanie pamięci dla każdego wideo, całkowity czas wykonania testowego zadania przy użyciu bun:ffi udało się skrócić trzykrotnie.

Co więcej, w wersji Bun 1.1.29 dla kodu w języku C dodano wsparcie dla N-API (napi), dzięki któremu pisane w języku C handlery mogą zwracać obiekty, ciągi, tablice i inne nieprymitywne wartości JavaScript, oprócz typów charakterystycznych dla języka C, takich jak int i float. Mechanizm wywoływania handlerów w języku C działa również przy dynamicznym ładowaniu dowolnych bibliotek z C ABI, niezależnie od tego, w jakim języku zostały pierwotnie napisane (C++, Rust, Zig itp.), co pozwala na wywoływanie z kodu JavaScript funkcji udostępnianych przez te biblioteki bez oddzielnej fazy ponownego kompilowania. Na przykład, teraz można uzyskać dostęp z JavaScript do systemowych API.

Przypominamy, że projekt Bun rozwija się z myślą o zapewnieniu zgodności z aplikacjami serwerowymi napisanymi w Node.js i wspiera większość API Node.js. W skład platformy wchodzi zestaw narzędzi do tworzenia i uruchamiania aplikacji w językach JavaScript i TypeScript, a także runtime do uruchamiania aplikacji JavaScript bez przeglądarki, menedżer pakietów (zgodny z NPM), narzędzia do testowania oraz system budowy samowystarczalnych pakietów. Wydajność Bun znacznie przewyższa Deno i Node.js (w testach opartych na frameworku React platforma Bun wyprzedza Deno dwukrotnie, a Node.js prawie pięciokrotnie). Kod Bun jest napisany w językach Zig i C++ i jest dystrybuowany na licencji MIT. Do uruchamiania JavaScript wykorzystywany jest silnik JavaScript JavaScriptCore oraz komponenty projektu WebKit z dodatkowymi łatkami.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster