Injini ye-Facebook evulekileyo efumaneka kwiHermes JavaScript

I-injini yeJavaScript evulekileyo ye-Facebook evulekileyo Hermes, elungiselelwe ukwenza izicelo ezisekelwe kwisakhelo Yenzani iNzala kwiqonga Android. Hermes inkxaso eyakhelwe-ngaphakathi kwi-React Native eqala nge-0.60.2 yanamhlanje ekhutshwayo. Iprojekthi yenzelwe ukusombulula iingxaki kunye namaxesha amade okuqalisa usetyenziso lweJavaScript yomthonyama kunye nokusetyenziswa kovimba obalulekileyo. Ikhowudi ibhalwe ngu kwi-C ++ kwaye isasazwe phantsi kwelayisenisi ye-MIT.

Phakathi kweenzuzo zokusebenzisa iHermes, kukho ukunciphisa ixesha lokuqalisa isicelo, ukunciphisa ukusetyenziswa kwememori kunye nokunciphisa ubungakanani besicelo. Xa usebenzisa i-V8, awona manqanaba athatha ixesha elininzi ngamanqanaba okwahlulahlula ikhowudi yomthombo kunye nokuyiqulunqa kwi-fly. I-Hermes izisa la manyathelo kwinqanaba lokwakha kwaye ivumela izicelo ukuba zihanjiswe ngendlela ye-bytecode edibeneyo kunye nesebenzayo.

Ukuphumeza ngokuthe ngqo isicelo, umatshini owenziweyo ophuhliswe ngaphakathi kwiprojekthi usetyenziswa kunye nomqokeleli wenkunkuma we-SemiSpace, ohambisa iibhloko kuphela njengoko kufuneka (Okufunwayo), uxhasa ukuhamba kunye nokuchithwa kweebhloko, ukubuyisela imemori ekhululekile kwinkqubo yokusebenza, ngaphandle kwexesha elithile. ukuskena imixholo yemfumba iyonke.

Ukulungiswa kweJavaScript kwahlulwe ngokwezigaba ezininzi. Okokuqala, imibhalo yomthombo iyacalulwa kwaye ukumelwa okuphakathi kwekhowudi kuyenziwa (Hermes IR), ngokusekelwe kumelo S.S.A. (ISabelo esiNye esiSingle). Okulandelayo, ukumelwa okuphakathi kucutshungulwa kwi-optimizer, esebenza phambili ubuchule be-static optimization ukuguqula ikhowudi ephakathi ephambili ibe yimbonakaliso ephakathi esebenzayo ngelixa ugcina i-semantics yokuqala yeprogram. Kwinqanaba lokugqibela, i-bytecode yomatshini obhalisiweyo obhalisiweyo iyenziwa.

Enjinini ixhaswe ngu inxalenye ye-ECMAScript 2015 yeJavaScript esemgangathweni (injongo ephambili kukuxhasa ngokupheleleyo) kwaye ibonelela ngokuhambelana nezicelo ezininzi ezikhoyo zeReact Native. UHermes uye wagqiba ekubeni angakuxhasi ukuphunyezwa kwendawo ye-eval (), ngeengxelo, ukubonakalisa (Reflect kunye neProxy), i-Intl API kunye nezinye iiflegi kwi-RegExp. Ukwenza iHermes isebenze kwiReact Native application, yongeza nje ukhetho lwe "enableHermes: true" kwiprojekthi. Kuyenzeka kwakhona ukwakha iHermes kwimo ye-CLI, ekuvumela ukuba wenze iifayile zeJavaScript ezingafanelekanga ukusuka kumgca womyalelo. Imowudi yokuqokelela ivila iyafumaneka ukuze ilungiswe, ekuvumela ukuba ungaqulunqi iJavaScript rhoqo ngexesha lenkqubo yophuhliso, kodwa ukuvelisa i-bytecode kwi-fly esele ikwisixhobo.

Ngelo xesha, i-Facebook ayicwangcisi ukulungelelanisa i-Hermes ye-Node.js kunye nezinye izisombululo, igxininise kuphela kwizicelo zeselula (ukuhlanganiswa kwe-AOT endaweni ye-JIT iyona nto ifanelekileyo kumxholo weenkqubo zeselula, ezine-RAM elinganiselwe kunye neFlash ecothayo). Uvavanyo lokuqala lokusebenza olwenziwe ngabasebenzi bakaMicrosoft boniseukuba xa usebenzisa uHermes, isicelo seOfisi yeMicrosoft ye-Android sifumaneka ukuze sisetyenziswe kwimizuzwana eyi-1.1. emva kokuqalisa kwaye kudla 21.5MB of RAM, lo gama xa usebenzisa injini V8 kuthatha imizuzwana 1.4 ukuqala kunye nokusetyenziswa memory yi 30MB.

Ukongeza: Facebook epapashwe iziphumo zovavanyo lwakho. Xa usebenzisa iHermes kunye nesicelo se-MatterMost, ixesha lokuqalisa ukufumaneka komsebenzi (TTI, Ixesha lokuSebenza) linciphile ukusuka kwi-4.30 ukuya kwi-2.01 imizuzwana, ubungakanani bephakheji ye-APK yancitshiswa ukusuka kwi-41 ukuya kwi-22 MB, kunye nokusetyenziswa kwememori ukusuka kwi-185 ukuya kwi-136. MB.

umthombo: opennet.ru

Yongeza izimvo