Facebook wuxuu furay Cinder, fargeeto CPython ah oo loo isticmaalo Instagram

Facebook ayaa daabacday koodhka isha ee Project Cinder, fargeeto ah CPython 3.8.5, tixraaca ugu weyn ee hirgelinta luqadda barnaamijka Python. Cinder waxaa loo isticmaalaa kaabayaasha wax soo saarka ee Facebook si loo xoojiyo Instagram oo ay ku jirto wanaajinta si kor loogu qaado waxqabadka.

Koodhka waxaa loo daabacay si looga hadlo suurtogalnimada in la soo gudbiyo hagaajinta la diyaariyay qaabka ugu muhiimsan ee CPython iyo in lagu caawiyo mashaariicda kale ee ku lug leh hagaajinta waxqabadka CPython. Facebook ma rabto in ay ku taageerto Cinder qaab mashruuc furan oo gooni ah oo koodka ayaa lagu soo bandhigay qaabka loo isticmaalo kaabayaasha shirkadda, iyada oo aan la shanleynin iyo dukumentiyo dheeraad ah. Sidoo kale ma isku dayaan inay kor u qaadaan Cinder sida beddelka CPython - ujeedada ugu weyn ee horumarinta waa rabitaanka horumarinta CPython laftiisa.

Koodhka Cinder waxaa lagu xusay inuu yahay mid la isku halleyn karo oo lagu tijaabiyay jawiga wax soo saarka, laakiin haddii dhibaatooyinka la ogaado, waa inaad adigu xallisaa iyaga, maadaama Facebook aysan dammaanad qaadin inay ka jawaabi doonto farriimaha qaladka dibadda iyo soo jiidashada codsiyada. Isla mar ahaantaana, Facebook kama saarayso iskaashiga wax ku oolka leh ee bulshada iyo wuxuu diyaar u yahay inuu ka hadlo fikradaha ku saabsan sida loo sameeyo Cinder xitaa si dhakhso ah ama sida loo dedejiyo wareejinta isbeddelada diyaarsan ee qaybta ugu weyn ee CPython.

Hagaajinta ugu weyn ee laga hirgaliyay Cinder:

  • Kaydinta khadka dhexda ee bytecode ("hadhka bytecode"). Nuxurka habka ayaa ah in la ogaado xaaladaha halka opcode caadiga ah la fuliyo kaas oo la hagaajin karo, iyo in si firfircoon loogu beddelo opcode-ka noocaas ah oo leh xulashooyin khaas ah oo degdeg ah (tusaale, beddelidda shaqooyinka inta badan loo yaqaanno).
  • Qiimaynta coroutine oo aad u xiiso badan. Wicitaannada shaqada async ee isla markiiba la farsameeyo (sugi ma keenayso sugitaan oo shaqadu waxay gaadhay bayaanka soo celinta hore), natiijada hawlahan oo kale si toos ah ayaa loo beddelaa iyada oo aan la abuurin corutine ama ku lug leh dhacdada loop. Koodhka Facebook ee aadka u isticmaala async/sugid, hagaajintu waxay keenaysaa xawaare dhan 5%.
  • Xulashada JIT ee heerka hababka iyo hawlaha gaarka ah (hab-waqtiga-a-waqtiga). U sahlay iyada oo loo marayo xulashada "-X jit" ama doorsoomiyaha deegaanka PYTHONJIT=1 wuxuuna kuu ogolaanayaa inaad dedejiso fulinta imtixaanada waxqabadka badan 1.5-4 jeer. Maaddaama ururinta JIT ay khusayso oo keliya hawlaha soo noqnoqda ee la fuliyo, laguma talinayo in loo isticmaalo hawlaha dhifka ah ee la isticmaalo, iskudubbariddooda oo kaliya ayaa hoos u dhigi karta fulinta barnaamijka.

    Ikhtiyaarka "-X jit-list-file=/path/to/jitlist.txt" ama doorsoomiyaha deegaanka "PYTHONJITLISTFILE=/path/to/jitlist.txt" waxaad qeexi kartaa fayl ay ku jiraan liiska hawlaha uu JIT waa la isticmaali karaa (qaabka jidka .to.module:funcname or path.to.module:ClassName.method_name). Liistada shaqooyinka ay tahay in JIT awood loo yeesho ayaa lagu go'aamin karaa iyadoo lagu salaynayo natiijooyinka sifada. Mustaqbalka, taageerada isu-ururinta firfircoon ee JIT ayaa la filayaa iyadoo lagu saleynayo falanqaynta gudaha ee inta jeer ee wicitaannada shaqada, laakiin iyadoo la tixgelinayo waxyaabaha gaarka ah ee geeddi-socodyada bilaabista Instagram-ka, isku-darka JIT wuxuu sidoo kale ku habboon yahay Facebook marxaladda hore.

    JIT waxay marka hore u beddeshaa Python bytecode matalaad heer sare ah oo dhexdhexaad ah (HIR), kaas oo si cadaalad ah ugu dhow Python bytecode, laakiin waxaa loogu talagalay in lagu isticmaalo mashiinka farsamada ee diiwaanka ku salaysan halkii laga isticmaali lahaa mid ku salaysan, sidoo kale waxay isticmaashaa macluumaadka nooca iyo dheeraad ah. faahfaahinta waxqabadka-muhiimka ah (sida tirinta tixraaca) . HIR ayaa markaa loo beddelaa foomka SSA (meelayn hal meel ah oo taagan) wuxuuna maraa tillaabooyinka hagaajinta ee tixgalinaya natiijooyinka tirinta tixraaca iyo xogta isticmaalka xusuusta. Natiijo ahaan, matalaad dhexdhexaad ah oo heer hoose ah (LIR) ayaa la soo saaray, oo u dhow luqadda kulanka. Ka dib waji kale ee hagaajinta ku salaysan LIR, hagisyada isu imaatinka ayaa la soo saaray iyadoo la isticmaalayo maktabadda asmjit.

  • Habka adag ee modules. Shaqada waxaa ka mid ah saddex qaybood: Nooca StrictModule. Falanqeeye taagan oo go'aamin kara in fulinta moduleka uusan wax saameyn ah ku yeelan code ka baxsan cutubkaas. Raadiyaha moduleka ee ogaanaya in cutubyadu ay ku jiraan qaab adag (koodka ayaa qeexaya "import __strict__"), hubinta faragelinta cutubyada kale, oo ku shubaya cutubyo adag sys.modules sida shay StrictModule.
  • Static Python waa soo ururiye bytecode tijaabo ah kaas oo adeegsada tafsiir nooca si uu u soo saaro nooc gaar ah bytecode kaas oo u shaqeeya si dhakhso ah iyada oo ay ugu wacan tahay ururinta JIT. Imtixaanada qaar, isku darka Static Python iyo JIT waxay muujinaysaa horumarinta waxqabadka ilaa 7 jeer marka loo eego heerka CPython. Xaalado badan, natiijooyinka waxaa lagu qiyaasaa inay ku dhow yihiin isticmaalka MyPyC iyo Cython compilers.

Source: opennet.ru

Add a comment