Na fa'afefea ona matou fa'aliliuina le 10 miliona laina o le C++ code i le C++14 standard (ona soso'o ai lea i le C++17)

I se taimi ua mavae (i le tautoulu o le 2016), i le taimi o le atinaʻeina o le isi lomiga o le 1C: Enterprise technology platform, na tulaʻi mai le fesili i totonu o le au atinaʻe e uiga i le lagolagoina o le tulaga fou. C ++ 14 i la tatou code. O le suiga i se tulaga fou, e pei ona matou manatu, o le a mafai ai ona matou tusia le tele o mea e sili atu le matagofie, faigofie ma faʻalagolago, ma faʻafaigofie le lagolago ma le tausiga o le code. Ma e foliga mai e leai se mea uiga ese i le faaliliuga, pe a le o le fua o le code base ma vaega patino o la tatou code.

Mo i latou e le iloa, 1C: Enterprise o se siosiomaga mo le faʻavaveina o le atinaʻeina o talosaga faʻapisinisi faʻasalalau ma taʻaloga mo le faʻatinoina i luga ole OS ma DBMS eseese. I tulaga lautele, o le oloa e aofia ai:

Matou te taumafai e tusi le code tutusa mo faiga faʻaoga eseese i le tele e mafai ai - o le server code base e 99% masani, o le code code base e tusa ma le 95%. Ole 1C:Enterprise technology platform e masani ona tusia ile C++ ma fa'atatau ile code uiga o lo'o tu'uina atu i lalo:

  • 10 miliona laina ole C++ code,
  • 14 afe faila,
  • 60 afe vasega,
  • afa miliona metotia.

Ma o nei mea uma sa tatau ona faaliliuina i le C++14. O le asō o le a matou taʻu atu ia te oe pe na faapefea ona matou faia lenei mea ma mea na matou feagai i le faagasologa.

Na fa'afefea ona matou fa'aliliuina le 10 miliona laina o le C++ code i le C++14 standard (ona soso'o ai lea i le C++17)

Fa'ailoga

O mea uma o lo'o tusia i lalo e uiga i galuega fa'agesegese/vave, (e le'o) tele le fa'aaogaina o le mafaufau e ala i le fa'atinoina o vasega masani i faletusi eseese o lona uiga o le mea e tasi: e moni lea MO US. E mafai lava o fa'atinoga masani o le a sili ona fetaui mo au galuega. Na matou amata mai a matou lava galuega: matou te ave faʻamaumauga e masani mo a matou tagata faʻatau, faʻataʻitaʻiina faʻataʻitaʻiga masani ia i latou, vaʻavaʻai i le faʻatinoga, le aofaʻi o le manatua na faʻaaogaina, ma isi, ma iloilo pe na faamalieina i matou ma a matou tagata faʻatau i ia taunuuga pe leai. . Ma sa latou galulue faalagolago i.

O mea na matou maua

I le taimi muamua, na matou tusia le code mo le 1C: Enterprise 8 platform e faʻaaoga ai le Microsoft Visual Studio. Na amata le poloketi i le amataga o le 2000s ma sa i ai le matou Windows-na o le lomiga. E masani lava, talu mai lena taimi ua faʻamalosia le faʻaogaina o le code, tele masini ua toe tusia atoa. Ae o le code na tusia e tusa ai ma le 1998 standard, ma, mo se faʻataʻitaʻiga, o matou puipui taumatau saʻo na vavaeeseina e avanoa ina ia manuia le tuufaatasiga, e pei o lenei:

vector<vector<int> > IntV;

I le 2006, faatasi ai ma le tatalaina o le platform version 8.1, na amata ona matou lagolagoina Linux ma sui i se faletusi tulaga tolu vaega. STLPort. O se tasi o mafuaaga mo le suiga o le galue i laina lautele. I la matou code, matou te faʻaaogaina std :: wstring, lea e faʻavae i luga o le wchar_t type, i le taimi atoa. O lona tele i Windows e 2 bytes, ma i Linux o le faaletonu o le 4 bytes. O lea na mafua ai le le fetaui o a matou tulafono faʻavae i le va o le tagata o tausia ma le server, faʻapea foʻi ma faʻamatalaga faifai pea. I le faʻaaogaina o filifiliga gcc, e mafai ona e faʻamaonia o le tele o le wchar_t i le taimi o le tuʻufaʻatasia e 2 bytes foi, ae e mafai ona galo e uiga i le faʻaaogaina o le faletusi masani mai le tuʻufaʻatasia, aua e faʻaaogaina le glibc, lea e tuʻufaʻatasia mo se 4-byte wchar_t. O isi mafuaaga na sili atu ona lelei le faʻatinoina o vasega masani, lagolago mo laulau hash, ma e oʻo lava i faʻataʻitaʻiga o semantics o le feʻaveaʻi i totonu o koneteina, lea na matou faʻaaogaina. Ma o le isi mafuaaga, e pei ona latou fai mai mulimuli ae le itiiti, o le faatinoga o manoa. Sa i ai la matou vasega mo manoa, aua... Ona o faʻamatalaga patino o la matou polokalama, o loʻo faʻaogaina le manoa i le lautele ma mo i matou e taua tele.

O la matou manoa e fa'avae i luga o manatu fa'alelei o manoa na fa'aalia i tua i le amataga o le 2000s Andrei Alexandrescu. Mulimuli ane, ina ua galue Alexandrescu i le Facebook, i lana fautuaga, sa faaaoga ai se laina i le afi Facebook lea sa galue i luga o mataupu faavae faapena (tagai i le faletusi valea).

O la matou laina na faʻaaogaina ni tekinolosi faʻapitoa e lua:

  1. Mo tau fa'apuupuu, o lo'o fa'aogaina se pa'u i totonu o le manoa lava ia (e le mana'omia se fa'asoaga fa'aopoopo manatua).
  2. Mo isi uma, e faʻaaogaina masini Kopi i luga Tusi. O le tau o le manoa e teuina i se nofoaga e tasi, ma o se faʻamaufaʻailoga e faʻaaoga i le taimi o tofiga / suiga.

Ina ia faʻavavevave le tuʻufaʻatasia, matou te le aofia ai le faʻatinoina o le vaitafe mai la matou STLPort variant (lea matou te leʻi faʻaaogaina), na matou maua ai le 20% vave faʻapipiʻi. Mulimuli ane sa tatau ona matou fa'agata le fa'aoga faʻailoaga. Boost e faʻaaogaina tele le vaitafe, aemaise lava i lana auʻaunaga APIs (mo se faʻataʻitaʻiga, mo le taina), o lea na tatau ai ona matou suia e aveese le faʻaogaina o le vaitafe. O le mea lea, na fa'afaigata ai ona matou malaga atu i fa'aliliuga fou o le Boost.

Auala lona tolu

A o agai i le C ++ 14 tulaga, matou mafaufau i filifiliga nei:

  1. Faʻaleleia le STLPort na matou faʻaleleia i le C ++ 14 tulaga. E faigata tele le filifiliga, aua... lagolago mo STLPort na fa'agata i le 2010, ma e tatau ona matou fausia uma ana tulafono e i matou lava.
  2. Suiga ile isi STL fa'atinoga e fetaui ma le C++14. E matua mana'omia tele lenei fa'atinoga mo Windows ma Linux.
  3. A fa'apipi'i mo OS ta'itasi, fa'aoga le faletusi ua fausia i totonu o le tu'ufa'atasi talafeagai.

O le filifiliga muamua na teena sa'o ona o le tele o galuega.

Sa matou mafaufau i le filifiliga lona lua mo sina taimi; manatu ose sui tauva libc++, ae i lena taimi e leʻi galue i lalo o Windows. Ina ia faʻapipiʻi le libc ++ i Windows, e tatau ona e faia le tele o galuega - mo se faʻataʻitaʻiga, tusi mea uma e te faia i filo, filo faʻatasi ma atomicity, talu ai o le libc ++ na faʻaaogaina i nei vaega. POSIX API.

Ma sa matou filifilia le auala lona tolu.

Sui

O lea la, e tatau ona suia le faʻaogaina o le STLPort ma faletusi o faʻapipiʻi tutusa (Visual Studio 2015 mo Windows, gcc 7 mo Linux, clang 8 mo macOS).

O le mea e lelei ai, o la matou tulafono na tusia e tusa ai ma taʻiala ma e leʻi faʻaaogaina ituaiga uma o togafiti poto, o lea na sologa lelei ai le femalagaaʻi i faletusi fou, faatasi ai ma le fesoasoani a tusitusiga na suia ai igoa o ituaiga, vasega, igoa avanoa ma aofia ai i le puna. faila. O le femalagaiga na aafia ai le 10 faila faila (mai le 000). wchar_t na suia i le char14_t; na matou filifili e lafoai le faʻaaogaina o le wchar_t, ona char000_t ave 16 bytes i OSes uma ma e le fa'aleagaina le feso'ota'iga code i le va o Windows ma Linux.

Sa i ai ni nai mea laiti. Mo se faʻataʻitaʻiga, i totonu o le STLPort e mafai ona tuʻuina atu se tagata suʻesuʻe i se faʻailoga i se elemene, ma i nisi o nofoaga i la matou tulafono na faʻaaogaina ai. I faletusi fou ua le toe mafai ona faia lenei mea, ma o nei fuaitau sa tatau ona suʻesuʻeina ma toe tusia ma le lima.

O lea la, ua maeʻa le femalagaiga code, ua tuʻufaʻatasia le code mo faiga faʻaoga uma. Ua oo i le taimi mo suega.

O suʻega ina ua maeʻa le suiga na faʻaalia ai le pa'ū o le faʻatinoga (i nisi o nofoaga e oʻo atu i le 20-30%) ma le faʻateleina o le faʻaaogaina o le mafaufau (e oʻo atu i le 10-15%) faʻatusatusa i le tuai o le code. O lenei mea, aemaise lava, ona o le faʻatinoina o le faʻaogaina o manoa masani. O le mea lea, sa tatau ai ona matou toe faʻaaogaina la matou lava laina, ua fai sina suiga.

O se mea manaia o le faʻatinoina o koneteina i totonu o faletusi faʻapipiʻi na faʻaalia foi: gaogao (e aunoa ma elemene) std :: map ma std :: seti mai faletusi faʻapipiʻi faʻasoa manatua. Ma ona o le faʻatinoga o faʻatinoga, i nisi o nofoaga i totonu o le code e tele naua avanoa gaogao o lenei ituaiga ua faia. O pusa faʻamautu masani e tuʻufaʻatasia laʻititi, mo le tasi elemene aʻa, ae mo i matou na foliga mai e taua tele - i le tele o faʻataʻitaʻiga, o la matou faʻatinoga na pa'ū tele ma faʻateleina le mafaufau (faʻatusatusa i le STLPort). O le mea lea, i totonu o la matou tulafono, na matou suia ai nei ituaiga koneteina e lua mai faletusi ua fausia ma latou faʻatinoina mai le Boost, lea e leʻi i ai i nei koneteina lenei tulaga, ma na foia ai le faʻafitauli i le faʻagesegese ma le faʻateleina o le mafaufau.

E pei ona masani ona tupu pe a maeʻa suiga tetele i galuega tetele, o le suʻesuʻega muamua o le code source e leʻi galue e aunoa ma ni faʻafitauli, ma o iinei, aemaise lava, o le lagolago mo le faʻaogaina o le faʻaaogaina o le Windows na oʻo mai. Laasaga ma lea laasaga na matou agai i luma, ma e oo atu i le tautotogo o le 2017 (version 8.3.11 1C:Enterprise) ua maeʻa le femalagaiga.

O taunuʻuga

O le suiga ile C++14 fa'ata'ita'iga e tusa ma le 6 masina. O le tele o taimi, o le tasi (ae sili ona agavaa) le atinaʻe na galue i luga o le poloketi, ma i le tulaga mulimuli o sui o 'au e nafa ma vaega faʻapitoa na auai i totonu - UI, faʻapipiʻi server, atinaʻe ma meafaigaluega tau pulega, ma isi.

O le suiga na matua faafaigofieina ai la matou galuega i le siitia atu i lomiga aupito lata mai o le tulaga masani. O le mea lea, o le version 1C: Enterprise 8.3.14 (i le atinaʻe, faʻasalalauga faʻatulagaina mo le amataga o le tausaga a sau) ua uma ona faʻafeiloaʻi i le tulaga masani. C++17.

A maeʻa le femalagaiga, e tele atu filifiliga a le au atinaʻe. Afai na i ai muamua a matou lava suiga fou o le STL ma le tasi std namespace, o lea ua i ai a matou vasega masani mai faletusi tuʻufaʻatasia i totonu o le std namespace, i le stdx namespace - o matou laina ma koneteina ua sili ona lelei mo a matou galuega, i le faʻaleleia - le lomiga aupito lata mai o le fa'aleleia. Ma e faʻaaogaina e le tagata faʻapitoa na vasega e fetaui lelei e foia ai ona faʻafitauli.

O le faʻatinoina o le faʻatinoga o le faʻaogaina o le faufale e fesoasoani foi i le atinaʻe (fesiitai faufale) mo le tele o vasega. Afai o se vasega o loʻo i ai se faumea faʻanofo ma tuʻu lenei vasega i totonu o se atigipusa, ona faʻaleleia lea e le STL le kopiina o elemene i totonu o le atigipusa (mo se faʻataʻitaʻiga, pe a faʻalauteleina le koneteina ma e tatau ona suia le gafatia ma toe faʻaleleia le manatua).

Se sipuni ta

Masalo o le taunuuga sili ona le fiafia (ae le taua) o le femalagaiga o le tatou feagai lea ma le faateleina o le voluma. obj faila, ma o le taunuuga atoa o le fausiaina ma faila vavalalata uma na amata ona ave le 60-70 GB. O lenei amioga e mafua ona o uiga faʻapitoa o faletusi faʻaonaponei, lea ua faʻaitiitia ai le faitioina o le tele o faila o auaunaga. E le afaina ai le faʻaogaina o le tuʻufaʻatasia o le talosaga, ae e mafua ai le tele o faʻalavelave i le atinaʻe, aemaise lava, e faʻateleina ai le taimi faʻapipiʻi. O manaʻoga mo avanoa avanoa faʻapipiʻi i luga o faufale faufale ma luga o masini faʻapipiʻi ua faʻateleina foi. O matou tagata atinaʻe o loʻo galulue i luga o le tele o faʻasalalauga o le tulaga tutusa, ma le faitau selau o gigabytes o faila vaeluaga o nisi taimi e faʻalavelave ai a latou galuega. O le faafitauli e le manaia, ae e le taua; ua matou tolopoina lana fofo mo le taimi nei. O loʻo matou mafaufauina tekinolosi o se tasi o filifiliga mo le foia fausia le lotogatasi (aemaise lava, Google faʻaaogaina pe a atiaʻe le Chrome browser).

puna: www.habr.com

Faaopoopo i ai se faamatalaga