Facebook tuwhera puna Cinder, he marau o CPython whakamahia e Instagram

Kua whakaputahia e Facebook te waehere puna mo Project Cinder, he marau o CPython 3.8.5, te whakatinanatanga tohutoro matua o te reo kaupapa Python. Ka whakamahia a Cinder i roto i te hangahanga hangahanga a Facebook hei whakakaha i te Instagram me te whakauru i nga arotautanga hei whakapai ake i nga mahi.

Ka whakaputahia te waehere ki te matapaki i te waahi ki te kawe i nga arotautanga kua rite ki te anga CPython matua me te awhina i etahi atu kaupapa e whai waahi ana ki te whakapai ake i te mahinga CPython. Kaore a Facebook e whakaaro ki te tautoko i a Cinder i roto i te ahua o te kaupapa tuwhera motuhake ka whakaatuhia te waehere i roto i te ahua e whakamahia ana i roto i nga hanganga o te kamupene, kaore he taapiri me nga tuhinga. Kaore hoki ratou e ngana ki te whakatairanga i a Cinder hei rereke ki te CPython - ko te kaupapa matua o te whanaketanga ko te hiahia ki te whakapai ake i a CPython ano.

Ko te waehere Cinder e kiia ana he tino pono me te whakamatauria i roto i nga taiao whakangao, engari mena ka kitea nga raru, maau ano e whakaoti, na te mea kaore a Facebook e kii ka whakautu ki nga karere hapa o waho me nga tono toia. I te wa ano, kaore a Facebook e whakakore i te mahi tahi me te hapori me te rite ki te matapaki i nga whakaaro mo te tere ake o Cinder, me pehea ranei te tere o te whakawhiti i nga huringa kua rite ki te waahanga matua o CPython.

Ko nga tino arotautanga kua whakatinanahia ki Cinder:

  • Keteroki Raina o te bytecode ("shadow bytecode"). Ko te ngako o te tikanga ko te tautuhi i nga ahuatanga ka mahia he opcode angamaheni ka taea te arotau, me te whakakapi hihiri i taua opcode ki nga whiringa motuhake tere ake (hei tauira, te whakakapi i nga mahi e kiia ana).
  • Te aro mātai coroutine. Mo nga waea mahi async ka tukakina tonu (kaore e tatari ana ka tae te mahi ki te tauākī whakahoki i mua atu), ka whakakapi tika te hua o aua mahi me te kore e hanga he coroutine, ka uru mai ranei he takahanga takahanga. I roto i te waehere Facebook e kaha ana te whakamahi i te async / tatari, ka puta te arotautanga ki te tere o te 5%.
  • Ko te kohinga JIT whiriwhiri i te taumata o nga tikanga me nga mahi takitahi (tikanga-i-a-wa). Whakahohehia ma te whiringa "-X jit" ranei te PYTHONJIT=1 taurangi taiao ka taea e koe te tere ake i nga mahi whakamatautau maha ma te 1.5-4 nga wa. I te mea ko te whakahiatotanga JIT e tika ana mo nga mahi e mahia ana i nga wa katoa, kaore i te pai kia whakamahia mo nga mahi kare e whakamahia ana, ko te whakahiatotanga o runga ka taea te whakaroa noa i te mahinga o te papatono.

    Ma te kowhiringa "-X jit-list-file=/path/to/jitlist.txt" ranei te taurangi taiao "PYTHONJITLISTFILE=/path/to/jitlist.txt" ka taea e koe te tautuhi i tetahi konae me te rarangi o nga mahi mo JIT ka taea te whakamahi (whakahōputu ara .to.module:funcname or path.to.module:ClassName.method_name). Ko te rarangi o nga mahi e tika ana kia whakahohea a JIT ka taea te whakatau i runga i nga hua o te tohu. I te wa kei te heke mai, ko te tautoko mo te whakahiato JIT hihiri e tumanakohia ana i runga i te tātaritanga o roto o te auau o nga waea mahi, engari ma te whai whakaaro ki nga waahanga o te whakarewatanga o nga tukanga i runga i Instagram, he pai hoki te kohinga JIT mo Facebook i te waahi tuatahi.

    Ko te JIT i te tuatahi ka huri i te Python bytecode ki roto i te taumata-tiketike-i waenga i nga tohu takawaenga (HIR), e tata ana ki te Python bytecode, engari he mea hoahoa ki te whakamahi i te miihini mariko-rehita hei utu mo te miihini-a-papa, ka whakamahi hoki i nga momo korero me etahi atu. nga korero tino-mahi (penei i te tatau tohutoro). Ka hurihia te HIR ki te puka SSA (te mahi kotahi taumahi) ka haere i roto i nga mahi arotautanga e whai whakaaro ana ki nga hua tatau tohutoro me nga raraunga kohi mahara. Ko te mutunga mai, ka hangaia he tohu takawaenga taumata-iti (LIR), tata ki te reo huihuinga. Whai muri i tetahi atu waahanga o nga arotautanga a-LIR, ka hangaia nga tohutohu huihuinga ma te whakamahi i te whare pukapuka asmjit.

  • Aratau tino mo nga waahanga. Kei roto i te mahinga e toru nga waahanga: Momo StrictModule. He kaitātari pateko ka taea te whakatau ko te whakatinanatanga o te kōwae karekau he pānga ki te waehere kei waho o taua kōwae. He kaitautai kōwae e whakatau ana kei roto i te aratau tino tika nga kōwae (ko te waehere e tohu ana "kawemai __strict__"), ka tirotiro mo te korenga o nga whakawhitinga me etahi atu waahanga, ka utaina nga waahanga tino kaha ki roto i te sys.modules hei ahanoa StrictModule.
  • Ko te Static Python he whakahiato bytecode whakamatautau e whakamahi ana i nga momo tuhipoka ki te whakaputa momo-momo-motuhake e tere ake ana na te whakahiato JIT. I etahi whakamatautau, ko te whakakotahitanga o Static Python me JIT e whakaatu ana i nga whakapainga mahi ki runga ki te 7 nga wa ka whakaritea ki te CPython paerewa. I te maha o nga ahuatanga, ko nga hua ka tata ki te whakamahi i te MyPyC me te Cython compiler.

Source: opennet.ru

Tāpiri i te kōrero