Mashandurirwo atakaita mitsara miriyoni gumi yeC++ kodhi kuC++10 standard (uyezve kuC++14)

Imwe nguva yapfuura (mukuwa kwe2016), panguva yekuvandudzwa kweiyo inotevera vhezheni ye1C:Enterprise tekinoroji chikuva, mubvunzo wakamuka mukati meboka rekusimudzira nezve kutsigira chiyero chitsva. C ++ 14 mukodhi yedu. Shanduko kuenda kune imwe chiyero, sezvataifungidzira, yaizotitendera kunyora zvinhu zvakawanda zvine mutsindo, zviri nyore uye zvakavimbika, uye zvaizorerutsa rutsigiro nekuchengetedza kodhi. Uye zvinoratidzika kunge pasina chinhu chinoshamisa mushanduro, kana isiri yechiyero chekodhi yekodhi uye chaiwo maficha ekodhi yedu.

Kune avo vasingazive, 1C:Enterprise inzvimbo yekukurumidza kusimudzira kwemuchinjika-platform bhizinesi maapplication uye yekumhanyisa nguva yekuuraya kwavo pamaOS akasiyana uye maDBMS. Kazhinji, chigadzirwa chine:

  • Application Server Cluster, inoshanda paWindows neLinux
  • Mutengi, kushanda nesevha kuburikidza ne http (s) kana yayo bhinari protocol, inoshanda paWindows, Linux, macOS
  • Web client, inoshanda muChrome, Internet Explorer, Microsoft Edge, Firefox, Safari browsers (yakanyorwa muJavaScript)
  • Development environment (Configurator), inoshanda paWindows, Linux, macOS
  • Zvishandiso zvekutonga maseva ekushandisa, anomhanya paWindows, Linux, macOS
  • Mobile client, ichibatanidza kune server kuburikidza ne http(s), inoshanda panharembozha dzinomhanya Android, iOS, Windows
  • Nharembozha - dhizaini yekugadzira nharembozha dzisiri pamhepo nekugona kuwiriranisa, inoshanda pa Android, iOS, Windows
  • Development environment 1C:Enterprise Development Tools, yakanyorwa muJava
  • Server Kudyidzana Systems

Isu tinoedza kunyora iyo imwechete kodhi yeakasiyana masisitimu ekushandisa zvakanyanya sezvinobvira - iyo server kodhi base ndeye 99% yakajairika, iyo yeklayiti kodhi base inosvika 95%. Iyo 1C:Enterprise tekinoroji tekinoroji inonyanya kunyorwa muC ++ uye fungidziro yekodhi hunhu inopihwa pazasi:

  • 10 miriyoni mitsetse yeC ++ kodhi,
  • 14 zviuru zvemafaira,
  • 60 zviuru zvekirasi,
  • hafu yemiriyoni nzira.

Uye zvese izvi zvinhu zvaifanira kushandurirwa muC++14. Nhasi tichakuudza kuti takaita sei izvi uye zvatakasangana nazvo mukuita.

Mashandurirwo atakaita mitsara miriyoni gumi yeC++ kodhi kuC++10 standard (uyezve kuC++14)

Disclaimer

Zvese zvakanyorwa pazasi nezve basa rinononoka/nekukurumidza, (kwete) hombe ndangariro kushandiswa nekushandiswa kwemakirasi akajairwa mumaraibhurari akasiyana-siyana zvinoreva chinhu chimwe: ichi ichokwadi KWAtiri. Zvinogoneka kuti mashandisirwo akajairwa anove akanyatsokodzera mabasa ako. Takatanga kubva kumabasa edu pachedu: takatora data raive rakajairwa nevatengi vedu, takamhanyisa mamiriro pavari, takatarisa mashandiro, huwandu hwendangariro dzakadyiwa, nezvimwewo, uye tikaongorora kana isu nevatengi vedu takagutsikana nemhedzisiro yakadai kana kwete. . Uye vakaita zvinoenderana.

Zvataiva nazvo

Pakutanga, takanyora kodhi ye1C:Enterprise 8 chikuva muMicrosoft Visual Studio. Iyo purojekiti yakatanga mukutanga 2000s uye isu taive neWindows-chete vhezheni. Nomuzvarirwo, kubvira ipapo iyo kodhi yakave yakanyatso kugadzirwa, nzira dzakawanda dzave dzakanyorwa zvachose. Asi iyo kodhi yakanyorwa zvinoenderana neyakajairwa 1998, uye, semuenzaniso, mabhureki edu ekurudyi akapatsanurwa nenzvimbo kuitira kuti kuunganidzwa kubudirire, seizvi:

vector<vector<int> > IntV;

Muna 2006, nekuburitswa kwepuratifomu vhezheni 8.1, takatanga kutsigira Linux uye nekuchinjira kune yechitatu-bato standard raibhurari. STLPort. Chimwe chezvikonzero zveshanduko yaive yekushanda nemitsetse yakafara. Mune kodhi yedu, isu tinoshandisa std :: wstring, iyo yakavakirwa paiyo wchar_t mhando, mukati. Saizi yayo muWindows ndeye 2 bytes, uye muLinux iyo default ndeye 4 bytes. Izvi zvakakonzera kusapindirana kwemabhinari maprotocol pakati pemutengi neseva, pamwe neakasiyana-siyana anoramba data. Uchishandisa iyo gcc sarudzo, unogona kutsanangura kuti saizi ye wchar_t panguva yekubatanidza zvakare 2 bytes, asi ipapo unogona kukanganwa nezve kushandisa raibhurari yakajairwa kubva kune compiler, nekuti. inoshandisa glibc, iyo inogadzirirwa 4-byte wchar_t. Zvimwe zvikonzero kwaive kuita zvirinani kwemakirasi akajairwa, tsigiro yematafura ehashi, uye kunyangwe kutevedzera semantics yekufamba mukati memidziyo, yataishandisa nesimba. Uye chimwe chikonzero, sezvavanotaura chekupedzisira asi chisiri chidiki, kwaive kuita kwetambo. Taive nekirasi yedu yetambo, nekuti... Nekuda kwekutsanangurwa kwesoftware yedu, tambo mashandiro anoshandiswa zvakanyanya uye kwatiri izvi zvakakosha.

Tambo yedu yakavakirwa patambo optimization mazano akataurwa kumashure mukutanga 2000s Andrei Alexandrescu. Gare gare, apo Alexandrescu akashanda paFacebook, pakurudziro yake, mutsara wakashandiswa muinjini yeFacebook iyo yakashanda pamisimboti yakafanana (ona raibhurari. upenzi).

Mutsetse wedu wakashandisa maviri makuru optimization matekinoroji:

  1. Kune hupfupi hupfupi, buffer yemukati muchinhu chetambo pachayo inoshandiswa (isingade yakawedzera ndangariro kugoverwa).
  2. Kune vamwe vese, makanika anoshandiswa Kopa Pakunyora. Iko kukosha kwetambo inochengetwa munzvimbo imwechete, uye referensi counter inoshandiswa panguva yekugovera/kugadzirisa.

Kuti tikurumidze kuunganidzwa kwepuratifomu, isu takabvisa kuitiswa kwerukova kubva kune yedu STLPort musiyano (iyo yatisina kushandisa), izvi zvakatipa nezve 20% nekukurumidza kuunganidza. Zvadaro taifanira kushandisa zvishoma wedzera. Boost inoshandisa zvakanyanya kuyerera, kunyanya mumasevhisi ayo APIs (semuenzaniso, yekucheka matanda), saka taifanira kuigadzirisa kuti ibvise kushandiswa kwerukova. Izviwo zvakaita kuti zvitiomere kutamira kune dzimwe shanduro dzeBoost.

Nzira yechitatu

Pakuenda kuC ++ 14 standard, takafunga zvinotevera sarudzo:

  1. Simudzira iyo STLPort yatakagadziridza kune iyo C ++ 14 standard. Iyo sarudzo yakaoma kwazvo, nekuti ... Tsigiro yeSTLPort yakamiswa muna 2010, uye isu taizofanira kuvaka kodhi yayo yese isu pachedu.
  2. Shanduko kune imwe STL kuita inoenderana neC++14. Zvinonyanya kudiwa kuti kuita uku kuve kweWindows neLinux.
  3. Paunenge uchigadzira yega yega OS, shandisa raibhurari yakavakirwa mukati inoenderana compiler.

Sarudzo yekutanga yakarambwa zvachose nekuda kwebasa rakawandisa.

Takafunga nezvechisarudzo chechipiri kwenguva yakati; achitorwa semumiriri libc++, asi panguva iyoyo haina kushanda pasi peWindows. Kuisa libc ++ kuWindows, iwe unofanirwa kuita basa rakawanda - semuenzaniso, nyora zvese iwe zvine chekuita neshinda, tambo yekubatanidza uye atomicity, sezvo libc ++ inoshandiswa munzvimbo idzi. Purogiramu inonzi POSIX.

Uye takasarudza nzira yechitatu.

Shanduko

Saka, taifanira kutsiva kushandiswa kweSTLPort nemaraibhurari evanosanganisa compilers (Visual Studio 2015 yeWindows, gcc 7 yeLinux, clang 8 yeMacOS).

Sezvineiwo, kodhi yedu yakanyorwa zvakanyanya maererano nemirairo uye haina kushandisa marudzi ese ehungwaru, saka kutamira kumaraibhurari matsva kwakafamba zvakanaka, nerubatsiro rwezvinyorwa zvakatsiva mazita emhando, makirasi, nzvimbo dzezita uye anosanganisira mune sosi. mafaira. Kutama kwacho kwakakanganisa 10 source mafaira (kunze kwegumi nemana). wchar_t yakatsiviwa nechar000_t; isu takasarudza kusiya kushandiswa kwewchar_t, nekuti char14_t inotora 000 bytes pane ese maOS uye haina kukanganisa kodhi kuenderana pakati peWindows neLinux.

Paive netumwe tunhu tudiki. Semuyenzaniso, muSTLPort iterator inogona kukandwa zvisina kujeka kune chinongedzo kune chimwe chinhu, uye mune dzimwe nzvimbo mukodhi yedu izvi zvakashandiswa. Mumaraibhurari matsva zvakanga zvisisakwanisike kuita izvi, uye ndima idzi dzaifanira kuongororwa uye kunyorwazve nemaoko.

Saka, kutama kwekodhi kwapera, iyo code inobatanidzwa kune ese anoshanda masisitimu. Yasvika nguva yemiedzo.

Miedzo mushure mekuchinja kwakaratidza kudonha kwekuita (mune dzimwe nzvimbo kusvika ku20-30%) uye kuwedzera kwekuyeuka kushandiswa (kusvika ku10-15%) kana ichienzaniswa neshanduro yekare yekodhi. Izvi zvaive, kunyanya, nekuda kweiyo suboptimal performance ye standard tambo. Naizvozvo, taifanira zvakare kushandisa mutsara wedu, wakagadziridzwa zvishoma.

Chinhu chinonakidza chekuitwa kwemidziyo mumaraibhurari akadzamirirwa chakaburitswa zvakare: isina (isina zvinhu) std::mepu uye std::seti kubva mumabhuku akavakirwa-mukati anogovera ndangariro. Uye nekuda kwekuita maficha, mune dzimwe nzvimbo mune kodhi yakawanda isina chinhu midziyo yerudzi urwu inogadzirwa. Standard memory midziyo yakagovaniswa zvishoma, kune imwe mudzi chinhu, asi kwatiri izvi zvakazonetsa - mune akati wandei mamiriro, kuita kwedu kwakadzikira zvakanyanya uye kushandiswa kwendangariro kwakawedzera (zvichienzaniswa neSTLPort). Naizvozvo, mukodhi yedu takatsiva aya marudzi maviri emidziyo kubva mumaraibhurari akavakirwa-mukati nekuita kwavo kubva kuBoost, uko midziyo iyi yakanga isina chimiro ichi, uye izvi zvakagadzirisa dambudziko nekuderera uye kuwedzera ndangariro kushandiswa.

Sezvinowanzoitika mushure mekuchinja kukuru mumapurojekiti makuru, iyo yekutanga iteration yekodhi kodhi haina kushanda pasina matambudziko, uye pano, kunyanya, tsigiro yedebugging iterators muWindows kuita yakauya inobatsira. Nhanho nhanho takaenderera mberi, uye nechirimo che2017 (vhezheni 8.3.11 1C: Bhizinesi) kutama kwakapedzwa.

Migumisiro

Shanduko kuenda kuC++14 standard yakatitorera inenge mwedzi mitanhatu. Nguva zhinji, mugadziri mumwe (asi ane hunyanzvi kwazvo) akashanda pachirongwa ichi, uye padanho rekupedzisira vamiriri vezvikwata zvine chekuita nenzvimbo dzakabatanidzwa - UI, server cluster, kusimudzira uye maturusi ekutonga, nezvimwe.

Shanduko iyi yakarerutsa basa redu rekutamira kune yazvino vhezheni yechiyero. Saka, vhezheni 1C:Enterprise 8.3.14 (mukuvandudza, kuburitswa kwakarongerwa kutanga kwegore rinouya) yakatoendeswa kune mwero. C++17.

Mushure mekutama, vagadziri vane zvimwe zvingasarudzwa. Kana pakutanga taive neyedu yakagadziridzwa vhezheni yeSTL uye imwe std namespace, ikozvino tine makirasi akajairwa kubva kune akavakirwa-mukati compiler raibhurari mune std namespace, mune stdx namespace - mitsara yedu nemidziyo zvakagadziridzwa kumabasa edu, mukuwedzera - the yazvino vhezheni yeboost. Uye mugadziri anoshandisa iwo makirasi akanyatsokodzera kugadzirisa matambudziko ake.

Iyo "yekuzvarwa" kuitiswa kwevanofambisa vanovaka inobatsirawo mukusimudzira (fambisa vanovaka) kune akati wandei emakirasi. Kana kirasi ine mugadziri wekufambisa uye kirasi iyi yakaiswa mumudziyo, ipapo iyo STL inokwenenzvera kukopa kwezvinhu mukati memudziyo (semuenzaniso, kana mudziyo wawedzerwa uye zvichidikanwa kuchinja huwandu uye kugoverazve ndangariro).

Chipunu chetara

Zvichida zvisingafadzi (asi zvisiri kutsoropodza) mhedzisiro yekutama ndeyekuti takatarisana nekuwedzera kwevhoriyamu. obj mafaira, uye mugumisiro wakakwana wekuvaka nemafaira ose epakati akatanga kutora 60-70 GB. Maitiro aya anokonzerwa neakasarudzika emaraibhurari akajairwa emazuva ano, ayo ave kushomeka pahukuru hwemafaira ebasa anogadzirwa. Izvi hazvikanganisi mashandiro echikumbiro chakaunganidzwa, asi zvinokonzeresa kuwanda kwekukanganisika mukusimudzira, kunyanya, inowedzera nguva yekubatanidza. Zvinodiwa zvemahara dhisiki nzvimbo pamaseva ekuvaka uye pamichina yekuvandudza zviri kuwedzerawo. Vagadziri vedu vanoshanda pane akati wandei epuratifomu nenzira yakafanana, uye mazana emagigabytes emafaira epakati dzimwe nguva anogadzira matambudziko mubasa ravo. Dambudziko harinakidze, asi kwete kutsoropodza; isu takamisa mhinduro yaro ikozvino. Isu tiri kutarisa tekinoroji seimwe yesarudzo yekuigadzirisa kubatana kuvaka (kunyanya, Google inoishandisa pakugadzira Chrome browser).

Source: www.habr.com

Voeg