Facebook ya buɗe Cinder, cokali mai yatsu na CPython wanda Instagram ke amfani dashi

Facebook ya buga lambar tushe don Project Cinder, cokali mai yatsa na CPython 3.8.5, babban mahimmancin aiwatar da yaren shirye-shiryen Python. Ana amfani da Cinder a cikin abubuwan samarwa na Facebook don ƙarfafa Instagram kuma ya haɗa da haɓakawa don haɓaka aiki.

An buga lambar don tattauna yiwuwar jigilar abubuwan ingantawa da aka shirya zuwa babban tsarin CPython da kuma taimakawa wasu ayyukan da ke da hannu wajen inganta aikin CPython. Facebook ba ya nufin tallafa wa Cinder a cikin nau'i na daban-daban bude tushen aikin da code da aka gabatar a cikin nau'i a cikin abin da aka yi amfani da shi a cikin kayayyakin more rayuwa na kamfanin, ba tare da ƙarin combing da takardun. Hakanan ba sa ƙoƙarin haɓaka Cinder azaman madadin CPython - babban burin ci gaba shine sha'awar inganta CPython kanta.

An lura da lambar Cinder a matsayin abin dogara kuma an gwada shi a cikin yanayin samarwa, amma idan an gano matsalolin, dole ne ku magance su da kanku, tun da Facebook ba ya ba da tabbacin cewa zai amsa saƙonnin kuskure na waje kuma ya jawo buƙatun. A lokaci guda kuma, Facebook ba ya ware haɗin gwiwa mai mahimmanci tare da al'umma kuma yana shirye don tattauna ra'ayoyin yadda za a yi Cinder ko da sauri ko kuma yadda za a hanzarta canja wurin canje-canjen da aka shirya zuwa babban ɓangaren CPython.

Babban ingantawa da aka aiwatar a Cinder:

  • Caching na layi na bytecode ("shadow bytecode"). Ma'anar hanyar ita ce gano yanayi inda aka aiwatar da opcode na yau da kullun wanda za'a iya inganta shi, da kuma maye gurbin irin wannan opcode tare da zaɓuɓɓukan musamman masu sauri (misali, maye gurbin ayyuka da ake kira akai-akai).
  • Eager coroutine kimantawa. Don kiran aikin async wanda aka sarrafa nan da nan (jiran baya haifar da jira kuma aikin ya kai ga bayanin dawowar a baya), sakamakon irin waɗannan ayyukan ana maye gurbinsu kai tsaye ba tare da ƙirƙirar coroutine ba ko haɗa madauki na taron. A cikin lambar Facebook wanda ke amfani da async / jira sosai, haɓakawa yana haifar da saurin kusan 5%.
  • Tarin JIT mai zaɓi a matakin hanyoyin kowane mutum da ayyuka (hanyar-a-lokaci). An kunna ta hanyar zaɓin "-X jit" ko PYTHONJIT = 1 mai canzawa kuma yana ba ku damar hanzarta aiwatar da gwaje-gwajen aiki da yawa ta sau 1.5-4. Tunda tarin JIT yana da dacewa kawai don ayyukan da ake aiwatarwa akai-akai, ba a da kyau a yi amfani da shi don ayyukan da ba safai ake amfani da su ba, abin da hada sama da shi zai iya rage aiwatar da shirin.

    Ta hanyar zaɓin "-X jit-list-file =/path/to/jitlist.txt" ko madaidaicin yanayi "PYTHONJITLISTFILE=/path/to/jitlist.txt" zaka iya ƙayyade fayil tare da jerin ayyuka wanda JIT za a iya amfani da (tsarin hanyar .to.module:funcname ko path.to.module:ClassName.method_name). Lissafin ayyukan da yakamata a kunna JIT ana iya ƙididdige su bisa sakamakon bayanin martaba. A nan gaba, ana sa ran tallafi don tattarawar JIT mai ƙarfi dangane da bincike na ciki na yawan kiran aiki, amma la'akari da ƙayyadaddun ayyukan ƙaddamarwa akan Instagram, haɗa JIT shima ya dace da Facebook a matakin farko.

    JIT ta fara canza Python bytecode zuwa babban wakilci na matsakaici (HIR), wanda ke kusa da Python bytecode, amma an ƙera shi don amfani da injin kama-da-wane na rijista maimakon na tushen tari, kuma yana amfani da bayanin nau'in da ƙari. cikakkun bayanai masu mahimmancin aiki (kamar ƙidayar magana) . Ana canza HIR zuwa tsarin SSA (tsaye guda ɗaya) kuma yana tafiya ta matakan ingantawa waɗanda ke la'akari da sakamakon ƙirgawa da bayanan amfani da ƙwaƙwalwar ajiya. Sakamakon haka, an samar da ƙaramin matsakaicin wakilci (LIR), kusa da harshen taro. Bayan wani lokaci na inganta tushen LIR, ana samar da umarnin taro ta amfani da ɗakin karatu na asmjit.

  • Yanayi mai tsauri don kayayyaki. Ayyukan sun haɗa da abubuwa uku: Nau'in StrictModule. Mai nazari a tsaye wanda zai iya tantance cewa aiwatar da tsarin ba shi da wani tasiri akan lamba a wajen wancan tsarin. Loader ɗin module wanda ke ƙayyade cewa samfuran suna cikin yanayi mai tsauri (lambar ta ƙayyade "shigo da __strict__"), bincika rashin daidaituwa tare da wasu kayayyaki, kuma yana ɗaukar tsauraran kayayyaki cikin sys.modules azaman abu StrictModule.
  • Static Python mahaɗar bytecode ne na gwaji wanda ke amfani da nau'in annotations don samar da takamaiman nau'in bytecode wanda ke tafiyar da sauri godiya ga haɗar JIT. A wasu gwaje-gwaje, haɗin Static Python da JIT yana nuna haɓaka ayyukan har zuwa sau 7 idan aka kwatanta da daidaitaccen CPython. A yawancin yanayi, ana kiyasin sakamakon yana kusa da amfani da na'urorin MyPyC da Cython.

source: budenet.ru

Add a comment