Bun платформան, որը զարգանում է որպես այլընտրանք Node.js-ի և նախատեսված է JavaScript, JSX և TypeScript լեզուներով գրանցված ծրագրերի անկախ կատարման համար, ներառում է փորձնական հնարավորություն ՝ C լեզվով գրաված մշակողներին էջադրելու և գործարկելու։ Ավելի վաղ ցածր մակարդակի կոդը կանչելու համար պահանջվում էր թե՛ N-API-ի հավելումներ ստեղծել, թե՛ կոդը մշակել WebAssembly (WASM/WASI) ձևաչափի մեջ, ինչը դժվարացնում էր մշակումը և սահմանափակումներ մտցնում։ Այժմ C լեզվի կոդը կարելի է ոչ միայն անմիջապես ներառել JavaScript-ում, այլև կիրառել TinyCC կոմպիլատորը, ինչպես նաև միացնել դինամիկորեն կապված գրադարաններ։import { cc } from "bun:ffi"; export const { symbols: { hello }, } = cc({ source: "./hello.c", symbols: { hello: { returns: "void", args: [], }, }, }); hello();
C լեզվի հետ աշխատելու համար օգտագործվում է bun:ffi միջատը, որը կոմպիլացնում է աղբյուրային կոդը մեքենայական հրամանների, այն տեղադրում է հիշողության մեջ գլուխներից, և ապահովում է ավտոմատ տիպերի փոփոխություն JavaScript-ի և C-ի միջև։ նշվում է, որ C լեզվով կոմպիլացված կոդին դիմելու ժամանակ ծախսերը նվազեցված են նվազագույնի և հանգեցվում են մոտ 2 նանովինկների դանդաղության յուրաքանչյուր սակարկման համար արտաքին C ֆունկցիաների։ Օրինակ, ցույց է տրվում, թե ինչպես կարելի է անմիջապես դիմել FFmpeg գրադարաններին կարճ տեսազանգարկման համար՝ բացառելով գործողությունների նման հիմնական գործընթացների մորմնայությունների և յուրաքանչյուր տեսանյութի համար հիշողություն հատկացնելու մանրամասները, ընդհանուր կատարողական ժամանակը բուն: ffi-ի օգտագործման դեպքում հաջողվել է կրճատել երեք անգամ։
Բացի այդ, Bun 1.1.29-ի թողարկմանը C լեզվով մշակված կոդի մեջ ավելացվեց N-API (napi) աջակցություն, որի շնորհիվ C լեզվով մշակված մշակողներ կարող են վերադարձնել JavaScript-ի օբյեկտներ, strings, arrays և այլ ոչ primitives արժեքներ, բացի C լեզվին հատուկ տիպերից, ինչպիսիք են int և float։ C լեզվով մշակված մշակողների կանչման մեխանիզմը գործում է նաև ցանկացած C ABI գրադարանների դինամիկ ներբեռնման ժամանակ, անկախ այն բանից, թե սկզբանե ինչպես են դրանք գրել (C++, Rust, Zig և այլն), ինչը թույլ է տալիս JavaScript կոդից կանչել այդ գրադարաններով տրամադրված ֆունկցիաներ առանց առանձնացված վերակազմունելու փուլ։ Օրինակ, այժմ կարելի է JavaScript-ից դիմել համակարգային API-ներին։
Ուշադրություն դարձրեք, որ Bun նախագիծը զարգանում է ենթադրյալ համատեղելիություն ապահովելով Node.js-ի համար գրված սերվերային հավելվածների հետ և աջակցում է Node.js API-ի մեծ մասն։ Պլատֆորմը ներառում է JavaScript և TypeScript լեզուներում կիրառությունների մշակման և գործարկման համար նախատեսված գործիքների հավաքածու, ինչպես նաև JavaScript հավելվածների գործունեության համար բրաուզեր առանց runtime, NPM-ի հետ համատեղելի փաթեթավորող, թեստերի կատարողների գործիքներ և ինքնաբավ փաթեթների ստեղծման համակարգ։ Ըստ կատարողականի, Bun էապես գերազանցում է Deno և Node.js-ին (React-ի հիման վրա պարտավորությունների ընթացքում Bun-ը 2 անգամ ավելի արագ է Deno-ից և գրեթե 5 անգամ ավելի արագ Node.js-ից): Bun կոդը գրված է Zig և C++ լեզուներով, և տարածվում է MIT լիցենզիայի ներքո։ JavaScript-ի կատարելու համար օգտագործվում է JavaScriptCore JavaScript շարժիչ և WebKit նախագծի բաղադրիչներ՝ հավելյալ փաթեթներով։
Ընտանիք: opennet.ru
