Wasmer 3.0-ը՝ WebAssembly-ի վրա հիմնված հավելվածներ ստեղծելու գործիքակազմ, հասանելի է

Սա Wasmer նախագծի երրորդ հիմնական թողարկումն է, որը մշակում է գործարկման ժամանակ WebAssembly մոդուլների գործարկման համար, որոնք կարող են օգտագործվել տարբեր օպերացիոն համակարգերի վրա գործարկվող ունիվերսալ հավելվածներ ստեղծելու համար, ինչպես նաև անվստահելի կոդի ավազարկղում: Ծրագրի կոդը գրված է Rust-ով և տարածվում MIT լիցենզիայի ներքո:

Միևնույն հավելվածը տարբեր հարթակներում գործարկելու հնարավորությունը տրվում է ծածկագիրը ցածր մակարդակի WebAssembly միջանկյալ կոդի մեջ, որը կարող է գործարկվել ցանկացած օպերացիոն համակարգում կամ ներառվել ծրագրավորման այլ լեզուների ծրագրերում: Ծրագրերը թեթև բեռնարկղեր են, որոնք աշխատում են WebAssembly կեղծ կոդով: Այս բեռնարկղերը կապված չեն օպերացիոն համակարգի հետ և կարող են ներառել ծրագրավորման ցանկացած լեզվով սկզբնապես գրված կոդ: Emscripten գործիքակազմը կարող է օգտագործվել WebAssembly-ում կոմպիլյացիայի համար: WebAssembly-ն ընթացիկ պլատֆորմի մեքենայական կոդի թարգմանելու համար այն աջակցվում է միացնելու տարբեր կոմպիլյատորներ (Singlepass, Cranelift, LLVM) և շարժիչներ (օգտագործելով JIT կամ ստեղծող մեքենայի կոդը):

Հավելվածները մեկուսացված են հիմնական համակարգից ավազատուփ միջավայրում և հասանելի են միայն հայտարարված ֆունկցիոնալությանը (հնարավորությունների վրա հիմնված անվտանգության մեխանիզմ՝ յուրաքանչյուր ռեսուրսների հետ գործողությունների համար (ֆայլեր, դիրեկտորիաներ, վարդակներ, համակարգային զանգեր և այլն), հավելվածը պետք է տրվի համապատասխան լիազորություն): Մուտքի վերահսկումը և համակարգի հետ փոխազդեցությունը ապահովվում է WASI (WebAssembly System Interface) API-ի միջոցով, որն ապահովում է ծրագրավորման միջերեսներ ֆայլերի, վարդակների և օպերացիոն համակարգի կողմից տրամադրվող այլ գործառույթների համար:

Պլատֆորմը թույլ է տալիս հասնել հավելվածների կատարման արդյունավետությանը, որը մոտ է հայրենի հավաքներին: Օգտագործելով Native Object Engine-ը WebAssembly մոդուլի համար, դուք կարող եք գեներացնել բնիկ կոդ («wasmer compile -native»՝ նախապես կազմված .so, .dylib և .dll օբյեկտների ֆայլերի ստեղծման համար), որը գործարկելու համար պահանջում է նվազագույն գործարկման ժամանակ, բայց պահպանում է բոլոր հատկանիշները: ավազատուփի մեկուսացում. Հնարավոր է նախապես կազմված ծրագրեր մատակարարել ներկառուցված Wasmer-ով: Rust API-ն և Wasm-C-API-ն առաջարկվում են հավելումներ և հավելումներ ստեղծելու համար:

WebAssembly կոնտեյներ գործարկելու համար բավական է համակարգում տեղադրել Wasmer runtime, որը գալիս է առանց արտաքին կախվածությունների («curl https://get.wasmer.io -sSfL | sh») և գործարկել անհրաժեշտ ֆայլը («wasmer test» .wasm»): Ծրագրերը բաշխվում են սովորական WebAssembly մոդուլների տեսքով, որոնք կարելի է կառավարել WAPM փաթեթի կառավարչի միջոցով։ Wasmer-ը հասանելի է նաև որպես գրադարան, որը կարող է օգտագործվել Rust, C/C++, C#, D, Python, JavaScript, Go, PHP, Ruby, Elixir և Java ծրագրերում WebAssembly կոդը ներկառուցելու համար:

Հիմնական փոփոխություններ Wasmer 3.0-ում.

  • Ավելացվեց ցանկացած հարթակի համար բնիկ գործարկվող ֆայլեր ստեղծելու հնարավորություն: «wasmer create-exe» հրամանն ամբողջությամբ վերափոխվել է՝ WebAssembly միջանկյալ կոդային ֆայլը վերածելու Linux-ի, Windows-ի և macOS-ի պլատֆորմների համար նախատեսված գործադիրների, որոնք կարող են աշխատել առանց Wasmer-ի տեղադրման:
  • Ապահովված է «wasmer run» հրամանի միջոցով wapm.io գրացուցակում տեղակայված WAPM փաթեթները գործարկելու հնարավորությունը: Օրինակ, «wasmer run python/python»-ի գործարկումը կներբեռնի python փաթեթը wapm.io պահոցից և կգործարկի այն:
  • Ամբողջովին վերամշակվել է Wasmer Rust API-ն, որում փոխվել է հիշողության հետ աշխատելու ոճը և ապահովվել է Wasm օբյեկտները Store կառուցվածքում անվտանգ պահելու հնարավորություն։ Առաջարկվում է MemoryView նոր կառուցվածք, որը թույլ է տալիս կարդալ և գրել տվյալները գծային հիշողության տարածքում:
  • Wasmer-js բաղադրիչների մի շարք ներդրվել է Wasmer-ը վեբ բրաուզերում գործարկելու և JavaScript-ի հետ փոխազդելու համար՝ օգտագործելով wasm-bindgen գրադարանը: Wasmer-js-ը ֆունկցիոնալությամբ նման է wasmer-sys բաղադրիչներին, որոնք նախատեսված են Wasmer-ը սովորական օպերացիոն համակարգերում գործարկելու համար:
  • Պարզեցված շարժիչներ. JIT-ի, դինամիկ և ստատիկ կապակցման առանձին շարժիչների փոխարեն (Universal, Dylib, StaticLib), այժմ առաջարկվում է մեկ ընդհանուր շարժիչ, որը բեռնում և պահպանում է կոդ, որը վերահսկվում է պարամետրի կարգավորումների մակարդակով:
  • Արտեֆակտները ապասերիալացնելու համար օգտագործվում է rkyv շրջանակը, որն ապահովում է զրոյական պատճենման գործողություն, այսինքն. չի պահանջում լրացուցիչ հիշողության բաշխում և կատարում է ապասերիալիզացիա՝ օգտագործելով միայն սկզբնապես տրամադրված բուֆերը: rkyv-ի օգտագործումը զգալիորեն մեծացրել է գործարկման արագությունը:
  • Singlepass կոմպիլյատորը բարելավվել է՝ աջակցելու բազմարժեք գործառույթներին, բարելավելու հուսալիությունը և ավելացնելու աջակցություն բացառությունների մշակման շրջանակներին:
  • WASI (WebAssembly System Interface) API-ի բարելավված իրականացում: Ֆայլային համակարգի հետ աշխատելու համար WASI API-ում շտկվել են խնդիրները: Ներքին տիպերը վերանախագծվել են՝ օգտագործելով WAI (WebAssembly Ինտերֆեյսեր), ինչը թույլ կտա մի շարք նոր հնարավորություններ կիրառել ապագայում:

Source: opennet.ru

Добавить комментарий