Në platformën Bun, e zhvilluar si një alternativë ndaj Node.js dhe 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 compilimin dhe ekzekutimin e handler-ave të shkruar në gjuhën C. Më parë, për të thirrur kodin e nivelit të ulët, ishte e nevojshme të krijoheshin Shtesa N-API ose të compiloheshin kodet në formatin WebAssembly (WASM/WASI), që e komplikonin zhvillimin dhe impononin kufizime të caktuara. Tani, kodi në gjuhën C mund të integrohet drejtpërdrejt në JavaScript dhe të compilohët në fluks duke përdorur kompajlerin TinyCC, si dhe të lidhen libra të lidhur dinamikisht. 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 ndĂ«rmjetĂ«simi bun:ffi, i cili compilon kodin burimor nĂ« instrukzioni tĂ« makinĂ«s, e vendos atĂ« nĂ« kujtesĂ« gjatĂ« ekzekutimit dhe siguron konvertimin automatizuar tĂ« llojeve tĂ« tĂ« dhĂ«nave midis JavaScript dhe C. VĂ«rehet se kostot e thirrjes sĂ« kodit tĂ« compiluar nĂ« C janĂ« minimale dhe çojnĂ« nĂ« njĂ« vonesĂ« prej rreth 2 nanosekondash pĂ«r çdo thirrje tĂ« funksioneve tĂ« jashtme tĂ« C. Si njĂ« shembull, tregohet se si mund tĂ« aksesohen drejtpĂ«rdrejt bibliotekat FFmpeg pĂ«r tĂ« konvertuar video tĂ« shkurtra â duke pĂ«rjashtuar operacione si shpĂ«rndarja nĂ« njĂ« proces tĂ« veçantĂ« dhe alokimi i kujtesĂ«s pĂ«r çdo video, koha totale e ekzekutim tĂ« njĂ« testi me pĂ«rdorim tĂ« bun:ffi u arrit tĂ« shkurtohet nĂ« tre herĂ«.
Për më tepër, në lëshimin e Bun 1.1.29 është shtuar mbështetje për N-API (napi) për kodin në gjuhën C, e cila lejon që handler-at e shkruar në gjuhën C të kthejnë objekte, vargje, lista dhe vlera të tjera jo primitive të JavaScript, përveç llojeve klasike të gjuhës C si int dhe float. Mekanizmi i thirrjes së handler-ave në gjuhën C vepron edhe kur ngarkohen dinamik çdo bibliotekë me C ABI, pa marrë parasysh se në cilën gjuhë janë shkruar fillimisht (C++, Rust, Zig etj.), gjë që lejon thirrjen e funksioneve të ofruara nga këto biblioteka në kodin JavaScript pa një fazë të veçantë rikombinimi. Për shembull, tani është e mundur të aksesohen nga JavaScript API-të sistemike.
Kujtojmë se projekti Bun zhvillohet me një fokus në sigurimin e kompatibilitetit me aplikacionet serverike të shkruara për Node.js, dhe mbështet pjesën më të madhe të API-ve të Node.js. Platforma përfshin një grup mjetesh për ndërtimin dhe ekzekutimin e aplikacioneve në gjuhët JavaScript dhe TypeScript, si dhe një runtime për ekzekutimin e aplikacioneve JavaScript pa shfletues, një menaxher paketashe (i përputhshëm me NPM), mjet për ekzekutimin e testeve dhe një sistem ndërtimi të paketave autonome. Në performancë, Bun tejkalon dukshëm Deno dhe Node.js (në testet e bazuara në framework-un React, platforma Bun tejkalon Deno me 2 herë dhe Node.js me gati 5 herë). Kodi Bun është shkruar në gjuhët Zig dhe C++, dhe shpërndahet nën licencën MIT. Për ekzekutimin e JavaScript-it është përdorur motori JavaScript JavaScriptCore dhe komponentët e projektit WebKit me patch-e shtesë.
Burimi: opennet.ru
