Sida aan 10 milyan oo xariiq oo C++ ah ugu tarjunnay heerka C++14 (ka dibna C++17)

Waqti ka hor (dayrtii 2016), inta lagu guda jiro horumarinta nooca xiga ee 1C: Madal tignoolajiyada ganacsiga, su'aasha ayaa ka dhex dhalatay kooxda horumarinta ee ku saabsan taageeridda heerka cusub. C ++ 14 in our code. U gudubka halbeeg cusub, sidii aan u malaysanay, waxay noo ogolaanaysaa inaan wax badan u qorno si xarrago leh, fudud oo la isku halleyn karo, waxayna fududayn doontaa taageerada iyo ilaalinta xeerka. Oo waxay u muuqataa in aysan jirin wax aan caadi ahayn oo ku jira tarjumaadda, haddii aysan ahayn miisaanka saldhigga koodhka iyo sifooyinka gaarka ah ee koodkayaga.

Kuwa aan garanayn, 1C: Shirkadu waa jawi loogu talagalay horumarinta degdega ah ee codsiyada ganacsiga iskutallaabta ah iyo wakhtiga ay ku fulinayaan OS-yada kala duwan iyo DBMS-yada. Guud ahaan, alaabtu waxay ka kooban tahay:

  • Kooxda Adeegga Codsiga, oo ku shaqeeya Windows iyo Linux
  • Macaamiil, la shaqaynta serverka iyada oo loo marayo http(-yada) ama borotokoolkeeda binary, waxay ka shaqeysaa Windows, Linux, macOS
  • Macmiilka shabakadda, ku shaqeeya Chrome, Internet Explorer, Microsoft Edge, Firefox, Safari browsers (oo ku qoran JavaScript)
  • Deegaanka horumarinta (Isku xidhaha), wuxuu ka shaqeeyaa Windows, Linux, macOS
  • Qalabka Maamulka adeegayaasha codsiyada, waxay ku shaqeeyaan Windows, Linux, macOS
  • Macmiilka mobilada, ku xidhidhiyaha server-ka iyada oo loo sii marayo http(-yada), waxa ay ka shaqeysaa aaladaha mobaylada ee ku shaqeeya Android, iOS, Windows
  • Madal wareega - qaab dhismeed loogu talagalay abuurista codsiyada moobilka ee khadka tooska ah ee leh awoodda isku-xidhka, ku shaqeeya Android, iOS, Windows
  • Deegaanka horumarinta 1C:Aaladaha Horumarinta Ganacsiga, oo ku qoran Java
  • Server Nidaamyada Is-dhexgalka

Waxaan isku dayeynaa inaan qorno kood isku mid ah nidaamyada hawlgalka kala duwan intii suurtagal ah - saldhigga koodhka server-ka waa 99% caadi ah, saldhigga koodhka macmiilku wuxuu ku saabsan yahay 95%. Tignoolajiyada 1C:Madal tignoolajiyada ganacsigu waxay ugu horrayn ku qoran tahay C++ iyo qiyaasaha koodka ayaa lagu bixiyaa hoos:

  • 10 milyan oo xariiq oo C++ ah,
  • 14 kun oo fayl,
  • 60 kun oo fasal,
  • nus milyan habab.

Oo waxaas oo dhan waxay ahayd in loo tarjumo C++14. Maanta waxaan kuu sheegi doonaa sidaan u sameynay tan iyo wixii aan la kulannay howsha.

Sida aan 10 milyan oo xariiq oo C++ ah ugu tarjunnay heerka C++14 (ka dibna C++17)

Afeef

Wax kasta oo hoos ku qoran oo ku saabsan shaqada tartiib tartiib ah / degdegga ah, (ma aha) isticmaalka xusuusta weyn ee hirgelinta fasallada caadiga ah ee maktabadaha kala duwan macnaheedu waa hal shay: tani waa run annaga. Waa suurtogal in fulinta caadiga ahi ay ku habboonaato hawlahaaga. Waxaan ka bilownay hawlaheenna: waxaanu qaadnay xog u ahayd macaamiisheena, waxaanu ku samaynay xaalado caadi ah, waxaanu eegnay waxqabadka, qadarka xusuusta la isticmaalo, iwm., waxaanu falanqeeyay in anaga iyo macaamiisheena aanu ku qanacsanahay natiijooyinkaas iyo in kale. . Waxayna u dhaqmeen hadba siday tahay.

Waxaan haysanay

Markii hore, waxaan u qornay koodka 1C:Enterprise 8 madal ee Microsoft Visual Studio. Mashruucu waxa uu bilaabmay horraantii 2000-aadkii waxaana aanu haysanay nooc Windows-kaliya ah. Dabcan, tan iyo markaas koodhka ayaa si firfircoon loo horumariyay, habab badan ayaa si buuxda dib loo qoray. Laakiin koodka waxa loo qoray si waafaqsan halbeeggii 1998-kii, tusaale ahaan, xayndaabka xagasha midig waxa lagu kala saaray meelo bannaan si ururintu u guulaysato, sidan:

vector<vector<int> > IntV;

2006, markii la sii daayay nooca madal ee 8.1, waxaan bilownay inaan taageerno Linux waxaana u wareegnay maktabad heersare ah oo qolo saddexaad ah. STLPort. Mid ka mid ah sababaha isbeddelka ayaa ahaa in lagu shaqeeyo khadadka ballaaran. Koodhkayaga, waxaanu isticmaalnaa std :: wstring, kaas oo ku salaysan nooca wchar_t, oo dhan. Cabbirkeeda Windows waa 2 bytes, Linux-ka caadiga ah waa 4 bytes. Tani waxay keentay in aan waafaqsanayn borotokoolkayada binary-ga ee u dhexeeya macmiilka iyo server-ka, iyo sidoo kale xog kala duwan oo joogto ah. Isticmaalka ikhtiyaarrada gcc, waxaad cayimi kartaa in cabbirka wchar_t inta lagu guda jiro ururinta ay sidoo kale tahay 2 bytes, laakiin markaa waxaad illoobi kartaa isticmaalka maktabadda caadiga ah ee isku-duwaha, sababtoo ah waxay isticmaashaa glibc, taas oo iyana loo ururiyay 4-byte wchar_t. Sababaha kale waxay ahaayeen kuwo si wanaagsan loo hirgeliyay fasallada caadiga ah, taageerada miisaska xashiishka, iyo xitaa ku dayashada micnaha u guurista gudaha weelasha, taas oo aan si firfircoon u isticmaalnay. Iyo hal sabab oo kale, sida ay yiraahdaan ugu dambeyntii, laakiin ugu yaraan, waxay ahayd waxqabadka xargaha. Waxaan haysanay fasal noo gaar ah oo xadhig ah, sababtoo ah... Sababo gaar ah software-kayaga awgeed, hawlgallada xadhkaha ayaa si weyn loo isticmaalaa anaga tani waa mid muhiim ah.

Xadhigayagu wuxuu ku salaysan yahay fikradaha hagaajinta xargaha ee dib loo soo celiyay horraantii 2000-meeyadii Andrei Alexandrescu. Later, markii Alexandrescu uu ka shaqeeyay Facebook, soo jeedintiisa, khad ayaa loo adeegsaday mashiinka Facebook kaas oo ka shaqeynayay mabaadi'da la midka ah (eeg maktabadda nacasnimo).

Khadkayagu wuxuu isticmaalay laba tignoolajiyada kobcinta ugu weyn:

  1. Qiimaha gaaban, kayd gudaha ah oo ku jira shayga xargaha laftiisa ayaa la isticmaalaa (aan u baahnayn qoondaynta xusuusta dheeraadka ah).
  2. Dhammaan kuwa kale, makaanikada ayaa loo isticmaalaa Nuqul Ku Qor. Qiimaha xadhkaha waxaa lagu kaydiyaa hal meel, waxaana la isticmaalaa miiska tixraaca inta lagu jiro meelaynta/wax ka beddelka.

Si loo dedejiyo ururinta madal, waxaanu ka saarnay hirgelinta qulqulka kala duwanaanshahayaga STLPort (kaas oo aynaan isticmaalin), tani waxay na siisay 20% isku-dubarid degdeg ah. Ka dib waxay noqotay inaan isticmaalno xaddidan Yididiilo. Kobcinta waxay ka dhigtaa isticmaalka culus ee qulqulka, gaar ahaan adeeggeeda API-yada (tusaale ahaan, goynta), markaa waxay ahayd inaan wax ka bedelno si aan meesha uga saarno isticmaalka qulqulka. Tani, iyaduna, waxay nagu adkaysay inaan u haajiro noocyada cusub ee Boost.

Jidka saddexaad

Markii aan u guurnay heerka C++14, waxaan tixgelinnay xulashooyinka soo socda:

  1. Kor u qaad STLPort ee aanu wax ka bedelnay heerka C++14 Doorashada waa mid aad u adag, sababtoo ah ... Taageerada STLPort waa la joojiyay 2010, waana inaan dhisno dhammaan koodka lafteena.
  2. U gudubka fulinta STL kale oo la jaan qaadaya C++14. Waxaa aad loo jecel yahay in hirgelintani ay noqoto Windows iyo Linux.
  3. Marka la ururinayo OS kasta, isticmaal maktabadda lagu dhex dhisay isku xidhka u dhigma.

Doorashadii kowaad si toos ah ayaa loo diiday shaqo badan awgeed.

Waxaan ka fikirnay doorashada labaad in muddo ah; loo tixgeliyo musharax ahaan libc++, laakiin wakhtigaas kamay shaqayn Windows. Si aad libc++ ugu gudbiso Windows, waa inaad qabataa shaqo badan - tusaale ahaan, qor wax kasta oo adiga laftaadu la xidhiidha dunta, isku xidhka dunta iyo atomity, maadaama libc++ laga isticmaalo meelahan POSIX API.

Waxaana dooranay dariiqa saddexaad.

Kala guur

Marka, waxay ahayd inaan ku beddelno adeegsiga SLTPort maktabadaha isku-dubaridyada u dhigma (Visual Studio 2015 ee Windows, gcc 7 ee Linux, qabiilg 8 ee macOS).

Nasiib wanaag, koodhkayaga waxa loo qoray inta badan si waafaqsan habraacyada oo looma isticmaalin dhammaan noocyada xeeladaha xariifnimada leh, markaa u haajiridda maktabadaha cusub waxay u socotay si habsami leh, iyada oo la kaashanayo qoraallada beddelaya magacyada noocyada, fasallada, meelaha magacyada oo ay ku jiraan ilaha. faylasha. Socdaalku waxa uu saameeyay 10 faylal il (oo ka mid ah 000). wchar_t waxaa lagu badalay char14_t; waxaan go'aansanay inaan iska dhaafno isticmaalka wchar_t, sababtoo ah char000_t waxay ku qaadataa 16 bytes dhammaan OS-yada mana xumeeyaan waafaqsanaanta koodhka u dhexeeya Windows iyo Linux.

Waxaa jiray xoogaa tacaburro yaryar ah. Tusaale ahaan, STLPort tafatiraha waxa si badheedh ah loogu tuuri karaa tilmaame curiye, meelaha qaarkoodna koodkayaga ayaa la isticmaalay. Maktabadaha cusub hadda suurtagal ma ahayn in tan la sameeyo, tuducyadan waxay ahayd in la falanqeeyo oo dib loo qoro si gacanta ah.

Markaa, guuritaanka koodku waa dhammaystiran yahay, koodhka waxaa loo diyaariyey dhammaan nidaamyada hawlgalka. Waa waqtigii imtixaannada.

Tijaabooyin ka dib kala-guurka ayaa muujiyay hoos u dhac ku yimaada waxqabadka (meelaha qaarkood ilaa 20-30%) iyo korodhka isticmaalka xusuusta (ilaa 10-15%) marka loo eego nuqulkii hore ee koodhka. Tani waxay ahayd, gaar ahaan, sababtoo ah waxqabadka hoose ee xargaha caadiga ah. Sidaa darteed, waxay ahayd inaan mar kale isticmaalno khad noo gaar ah, oo waxyar laga beddelay.

Muuqaal xiiso leh oo ka mid ah hirgelinta weelasha ku jira maktabadaha ku dhex jira ayaa sidoo kale daaha laga qaaday: madhan (aan lahayn walxo) std :: khariidad iyo std :: oo laga sameeyay maktabadaha ku dhex jira ayaa qoondeeya xusuusta. Oo ay sabab u tahay sifooyinka fulinta, meelaha qaarkood ee code wax badan oo ka mid ah weelasha madhan ee noocan ah ayaa la abuuray. Weelasha xusuusta caadiga ah ayaa loo qoondeeyay wax yar, hal element oo xidid ah, laakiin annaga tani waxay noqotay mid muhiim ah - xaalado dhowr ah, waxqabadkayagu aad ayuu hoos ugu dhacay, isticmaalka xusuusta ayaa kordhay (marka la barbar dhigo STLPort). Haddaba, xeerkeena waxa aynu ku bedelnay labadan nooc ee weel ee ka soo baxay maktabadaha ku dhex jira, iyada oo hirgelintooda laga soo bilaabay Boost, halkaas oo aanay weeladaasi lahayn sifadaas, taasina waxa ay mushkiladdii ku xalisay hoos u dhac iyo korodhka isticmaalka xusuusta.

Sida inta badan dhacda ka dib markii isbedel weyn ee mashaariicda waaweyn, dib u soo celinta ugu horeysay ee code isha ma shaqayn dhibaato la'aan, iyo halkan, gaar ahaan, taageero debutting iterators ee hirgelinta Windows yimid anfacaya. Tilaabo talaabo ah ayaanu hore ugu soconay, gugii 2017-kii (nooca 8.3.11 1C:Enterprise) guurkii waa la dhameeyay.

Natiijooyinka

U gudubka heerka C++14 waxay nagu qaadatay qiyaastii 6 bilood. Inta badan, mid (laakiin aad u tayo sareya) horumariye ayaa ka shaqeeyay mashruuca, iyo heerkii ugu dambeeyay wakiilo ka socda kooxaha mas'uulka ka ah aagagga gaarka ah ee ku biiray - UI, kooxda server-ka, horumarinta iyo qalabka maamulka, iwm.

Kala-guurka ayaa si weyn u fududeeyay shaqadayada u haajiridda noocyadii ugu dambeeyay ee heerka. Haddaba, nooca 1C:Enterprise 8.3.14 (horumarka, sii daynta la qorsheeyay horraanta sanadka soo socda) ayaa mar hore loo wareejiyay heerka C++17.

Socdaalka ka dib, horumariyayaashu waxay leeyihiin doorashooyin badan. Haddii aan horay u haysanay noocayaga STL oo la beddelay iyo hal magac oo std ah, hadda waxaan leenahay fasallo heersare ah oo ka socda maktabadaha isku-darka ku dhex jira ee ku dhex jira magaca stdx - khadadkayada iyo weelashayada ayaa loo hagaajiyay hawlahayaga, kor u qaadista - version ugu dambeeyay ee boost. Horumariyuhuna wuxuu adeegsadaa fasalladaas sida ugu habboon ugu habboon si uu u xalliyo dhibaatooyinkiisa.

Hirgelinta "hooyo" ee dhisayaasha dhaqaaqa ayaa sidoo kale ka caawiya horumarinta (guurto dhisayaasha) dhowr fasal. Haddii fasalku leeyahay dhisme guure oo fasalkan lagu dhejiyo weel, markaa STL waxay wanaajisaa nuqul ka mid ah walxaha ku jira weelka (tusaale ahaan, marka weelka la ballaariyo oo ay lagama maarmaan tahay in la beddelo awoodda iyo dib u dejinta xusuusta).

Qaado daamur ah

Waxaa laga yaabaa in natiijada ugu xun (laakiin aan muhiimka ahayn) ee socdaalka ay tahay in aan la kulanno kororka mugga obj files, iyo natiijada buuxda ee dhismaha oo leh dhammaan faylasha dhexdhexaadka ah waxay bilaabeen inay qaataan 60-70 GB. Dabeecaddan waxaa sabab u ah waxyaabaha gaarka ah ee maktabadaha caadiga ah ee casriga ah, kuwaas oo noqday kuwo aad u dhib yar oo cabbirka faylalka adeegga la soo saaray. Tani ma saameynayso hawlgalka codsiga la soo ururiyey, laakiin waxay keenaysaa tiro ka mid ah dhibaatooyinka horumarinta, gaar ahaan, waxay kordhisaa wakhtiga isku-darka. Shuruudaha booska diskka bilaashka ah ee server-yada la dhiso iyo mashiinnada horumariya ayaa sidoo kale sii kordhaya. Horumarintayadu waxay ka shaqeeyaan dhowr nooc oo madal ah oo isbarbar socda, iyo boqolaal gigabytes ee faylasha dhexdhexaadka ah mararka qaarkood waxay abuuraan dhibaatooyin shaqadooda. Dhibaatadu waa wax aan fiicnayn, laakiin maaha mid muhiim ah; dib ayaan u dhignay xalkeeda hadda. Waxaan u tixgelineynaa tignoolajiyada mid ka mid ah fursadaha lagu xallinayo midnimo dhis (gaar ahaan, Google waxay isticmaashaa marka ay horumarinayso browserka Chrome).

Source: www.habr.com

Add a comment