Siguqule njani izigidi ezili-10 zemigca yekhowudi ye-C++ ukuya kumgangatho we-C++14 (kwaye emva koko ukuya ku-C++17)

Ngexesha elidlulileyo (ekwindla ka-2016), ngexesha lokuphuhliswa kwenguqu elandelayo ye-1C: I-platform ye-teknoloji ye-Enterprise, kwavela umbuzo ngaphakathi kweqela lophuhliso malunga nokuxhasa umgangatho omtsha. C ++ 14 kwikhowudi yethu. Ukutshintshela kumgangatho omtsha, njengoko besicinga, kuya kusivumela ukuba sibhale izinto ezininzi ngobuhle, ngokulula nangokuthembekileyo, kwaye kuya kwenza lula ukuxhaswa kunye nokugcinwa kwekhowudi. Kwaye kubonakala ngathi akukho nto ingaqhelekanga ekuguquleleni, ukuba kungekhona kwisikali sesiseko sekhowudi kunye neempawu ezithile zekhowudi yethu.

Kulabo abangaziyo, i-1C: I-Enterprise yindawo yokuphuhliswa ngokukhawuleza kwezicelo zoshishino ze-cross-platform kunye nexesha lokuqhuba ukubulawa kwazo kwii-OS ezahlukeneyo kunye ne-DBMS. Ngokubanzi, imveliso iqulethe:

  • Iqela leseva yosetyenziso, isebenza kwiiWindows kunye neLinux
  • Umthengi, ukusebenza nomncedisi nge http(s) okanye eyakhe iprotocol yokubini, isebenza kwiWindows, Linux, macOS
  • Umxhasi wewebhu, esebenza kwiChrome, Internet Explorer, Microsoft Edge, Firefox, Safari browsers (ebhalwe kwiJavaScript)
  • Indawo yophuhliso (Umqwalaseli), isebenza kwiWindows, Linux, macOS
  • Izixhobo zolawulo iiseva zesicelo, zisebenza kwiWindows, Linux, macOS
  • Umxhasi weselula, ukudibanisa kumncedisi nge http(s), isebenza kwizixhobo eziphathwayo ezisebenzisa i-Android, iOS, Windows
  • Iqonga leselula -isakhelo sokwenza usetyenziso lweselula olungaxhunyiwe kwi-intanethi olunamandla okuvumelanisa, olusebenza kwi-Android, iOS, Windows
  • Indawo yophuhliso 1C:Izixhobo zoPhuhliso lweShishini, ebhalwe kwiJava
  • UmSebenzi IiNkqubo zokuSebenza

Sizama ukubhala ikhowudi efanayo kwiinkqubo ezahlukeneyo zokusebenza kangangoko kunokwenzeka - isiseko sekhowudi yeseva si-99% esiqhelekileyo, isiseko sekhowudi yomxhasi malunga ne-95%. I-1C:Iqonga letekhnoloji yeShishini libhalwe ikakhulu kwi-C++ kunye neempawu eziqikelelwayo zekhowudi zinikwe ngezantsi:

  • Imigca ye-10 yezigidi zekhowudi ye-C ++,
  • 14 amawaka iifayile,
  • Iiklasi ezingama-60 amawaka,
  • iindlela isiqingatha sesigidi.

Kwaye zonke ezi zinto kwafuneka ziguqulelwe kwi-C ++14. Namhlanje siza kukuxelela ukuba sikwenze njani oku kunye nento esiye sadibana nayo kwinkqubo.

Siguqule njani izigidi ezili-10 zemigca yekhowudi ye-C++ ukuya kumgangatho we-C++14 (kwaye emva koko ukuya ku-C++17)

Ukuzihlangula

Yonke into ebhalwe ngezantsi malunga nomsebenzi ocothayo/okhawulezayo, (hayi) ukusetyenziswa kwenkumbulo enkulu ngokuphunyezwa kweeklasi ezisemgangathweni kumathala eencwadi ahlukeneyo kuthetha into enye: oku kuyinyani KUTHI. Kuyenzeka ukuba uphumezo olusemgangathweni luya kuyilungela imisebenzi yakho. Saqala kwimisebenzi yethu: sithathe idatha eyayiqhelekile kubathengi bethu, saqhuba iimeko eziqhelekileyo kubo, sajonga ukusebenza, ubungakanani bememori esetyenzisiweyo, njl. . Kwaye benza ngokuxhomekeke.

Into esasinayo

Ekuqaleni, sabhala ikhowudi ye-1C: I-Enterprise 8 iqonga kwi-Microsoft Visual Studio. Iprojekthi yaqala ekuqaleni kweminyaka yoo-2000 kwaye sasinoguqulelo lweWindows kuphela. Ngokwemvelo, ukususela ngoko ikhowudi iye yaphuhliswa ngokusebenzayo, iindlela ezininzi zibhalwe ngokutsha ngokupheleleyo. Kodwa ikhowudi yabhalwa ngokwemigangatho ye-1998, kwaye, umzekelo, iibrakethi zethu ze-angle zasekunene zahlulwa zizithuba ukuze ukuhlanganiswa kuphumelele, ngolu hlobo:

vector<vector<int> > IntV;

Ngo-2006, ngokukhululwa kwe-platform ye-8.1, saqala ukuxhasa i-Linux kwaye satshintshela kwithala leencwadi eliqhelekileyo lomntu wesithathu. STLPort. Esinye sezizathu zenguqu yayikukusebenza ngemigca ebanzi. Kwikhowudi yethu, sisebenzisa i-std::wstring, esekwe kuhlobo lwe-wchar_t, kuyo yonke loo nto. Ubungakanani bayo kwi-Windows yi-bytes ezi-2, kwaye kwi-Linux i-default yi-4 bytes. Oku kukhokelele ekungahambelani kwemigaqo yethu yokubini phakathi komxhasi kunye nomncedisi, kunye nedatha eyahlukileyo eqhubekayo. Usebenzisa iinketho ze-gcc, ungakhankanya ukuba ubungakanani be-wchar_t ngexesha lokuqulunqwa bukwayi-2 bytes, kodwa ke unokulibala malunga nokusebenzisa ilayibrari eqhelekileyo kumqokeleli, kuba isebenzisa i-glibc, ethi yona ihlanganiselwe i-4-byte wchar_t. Ezinye izizathu ibikukuphunyezwa ngcono kweeklasi ezisemgangathweni, inkxaso yeetafile zehash, kunye nokulinganisa i-semantics yokuhamba ngaphakathi kwezikhongozeli, esazisebenzisa ngokukhutheleyo. Kwaye esinye isizathu, njengoko besitsho okokugqibela kodwa kungancinci, ibikukusebenza komtya. Sasineklasi yethu yeentambo, kuba... Ngenxa yeenkcukacha zesoftware yethu, imisebenzi yomtya isetyenziswa kakhulu kwaye kuthi oku kubalulekile.

Umtya wethu usekwe kwiingcinga zokuphucula umtya ezichazwe emva kwiminyaka yoo-2000s UAndrei Alexandrescu. Kamva, xa u-Alexandrescu esebenza kwi-Facebook, kwisiphakamiso sakhe, umgca wawusetyenziswa kwi-injini ye-Facebook eyayisebenza kwimigaqo efanayo (jonga ilayibrari ubudenge).

Umgca wethu usebenzise itekhnoloji ezimbini eziphambili zokusebenzisa:

  1. Kumaxabiso amafutshane, isithinteli sangaphakathi kwinto yomtya ngokwawo iyasetyenziswa (ayifuni ulwabiwo lwenkumbulo eyongezelelweyo).
  2. Kubo bonke abanye, kusetyenziswa oomatshini Kopa Ukubhala. Ixabiso lomtya ligcinwe kwindawo enye, kwaye ikhawunta yereferensi isetyenziswa ngexesha lokunikezelwa/ukuguqulwa.

Ukukhawulezisa ukuhlanganiswa kweqonga, asibandakanyi ukuphunyezwa komjelo kukwahluka kwethu kwe-STLPort (esingayisebenzisanga), oku kusinike malunga ne-20% yokudibanisa ngokukhawuleza. Emva koko kwafuneka sisebenzise kancinci inkxaso. I-Boost isebenzisa kakhulu umjelo, ngakumbi kwiinkonzo zayo ze-APIs (umzekelo, ukugawulwa kwemithi), ngoko kuye kwafuneka siyiguqule ukuze sisuse ukusetyenziswa komsinga. Oku, kwenze kwanzima kuthi ukufudukela kwiinguqulelo ezintsha ze-Boost.

Indlela yesithathu

Xa usiya kumgangatho we-C++14, sithathele ingqalelo ezi ndlela zilandelayo:

  1. Phucula i-STLPort esiyitshintshele kumgangatho we-C++14. Inketho inzima kakhulu, kuba... inkxaso ye-STLPort yayekwa ngo-2010, kwaye kuya kufuneka sizakhele ngokwethu yonke ikhowudi yayo.
  2. Ukutshintshela kolunye ukuphunyezwa kwe-STL ehambelana ne-C++14. Kunqweneleka kakhulu ukuba olu phunyezo lube lweWindows kunye neLinux.
  3. Xa uqulunqa i-OS nganye, sebenzisa ithala leencwadi elakhelwe kumqokeleli ohambelanayo.

Inketho yokuqala yaliwe ngenxa yomsebenzi omninzi.

Sacinga ngokhetho lwesibini kangangexesha elithile; ithathwa njengomgqatswa libc++, kodwa ngelo xesha ayizange isebenze phantsi kweWindows. Ukufaka i-libc++ kwi-Windows, kuya kufuneka wenze umsebenzi omninzi-umzekelo, bhala yonke into ngokwakho enento yokwenza nemisonto, ungqamaniso lwentambo kunye ne-atomicity, ekubeni i-libc++ isetyenziswa kwezi ndawo. POSIX API.

Kwaye sakhetha indlela yesithathu.

Utshintsho

Ngoko ke, kwafuneka ukuba sitshintshe ukusetyenziswa kwe-STLPort kunye neelayibrari zabaqulunqi abahambelanayo (i-Visual Studio 2015 ye-Windows, i-gcc 7 ye-Linux, i-clang 8 ye-macOS).

Ngethamsanqa, ikhowudi yethu yabhalwa ngokukodwa ngokwezikhokelo kwaye ayizange isebenzise zonke iintlobo zamaqhinga ahlakaniphile, ngoko ke ukufudukela kumathala eencwadi amatsha kwaqhubeka kakuhle, ngoncedo lwemibhalo ethathe indawo yamagama eentlobo, iiklasi, iindawo zamagama kunye nokubandakanya kumthombo. iifayile. Ukufuduka kwachaphazela iifayile ze-10 zomthombo (ngaphandle kwe-000). I-wchar_t yathatyathelwa indawo ngu-char14_t; sagqiba kwelokuba sikuyeke ukusetyenziswa kwe-wchar_t, kuba i-char000_t ithatha ii-bytes ezi-16 kuzo zonke ii-OS kwaye ayonakalisi ukuhambelana kwekhowudi phakathi kweWindows kunye neLinux.

Kwakukho ama-adventure amancinci. Umzekelo, kwi-STLPort i-iterator inokuphoswa ngokufihlakeleyo kwisalathiso sento, kwaye kwezinye iindawo kwikhowudi yethu oku kusetyenzisiwe. Kumathala eencwadi amatsha kwakungasenakwenzeka ukwenza oku, kwaye ezi ndinyana kwakufuneka zihlalutywe kwaye zibhalwe ngokutsha ngesandla.

Ngoko, ukufuduka kwekhowudi kugqityiwe, ikhowudi ihlanganiswe kuzo zonke iinkqubo zokusebenza. Lixesha leemvavanyo.

Uvavanyo emva kokuba utshintsho lubonise ukuhla kwentsebenzo (kwezinye iindawo ukuya kwi-20-30%) kunye nokunyuka kokusetyenziswa kwememori (ukuya kwi-10-15%) xa kuthelekiswa nenguqulo endala yekhowudi. Oku kwaba, ngokukodwa, ngenxa yokusebenza okungaphantsi komgangatho weentambo eziqhelekileyo. Ke ngoko, kuye kwafuneka siphinde sisebenzise owethu umgca, oguqulwe kancinane.

Uphawu olunomdla lomiliselo lwezikhongozeli kumathala eencwadi ahlonyelweyo nalo libonakaliswe: elingenanto (ngaphandle kweempawu) std::map kunye ne-std::seti ukusuka kumathala eencwadi abelwe inkumbulo. Kwaye ngenxa yokuphunyezwa kweempawu, kwezinye iindawo kwikhowudi zininzi izikhongozeli ezingenanto zolu hlobo zenziwe. Izikhongozeli zememori eziqhelekileyo zabelwe kancinci, kwingcambu enye, kodwa kuthi oku kuye kwabonakala kubaluleke kakhulu - kwiimeko ezininzi, ukusebenza kwethu kwehle kakhulu kwaye ukusetyenziswa kwememori kunyukile (xa kuthelekiswa ne-STLPort). Ke ngoko, kwikhowudi yethu sitshintshe ezi ntlobo zimbini zezikhongozeli kwiilayibrari ezakhelwe ngaphakathi kunye nokuphunyezwa kwazo kwi-Boost, apho ezi zikhongozeli zingenalo olu phawu, kwaye oku kwasombulula ingxaki ngokucotha kunye nokwanda kokusetyenziswa kwememori.

Njengoko kwenzeka rhoqo emva kweenguqu ezinkulu kwiiprojekthi ezinkulu, ukuphindaphinda kokuqala kwekhowudi yomthombo akuzange kusebenze ngaphandle kweengxaki, kwaye apha, ngokukodwa, inkxaso yokulungisa i-iterators ekuphunyezweni kweWindows yafika ngokufanelekileyo. Inyathelo ngenyathelo saya phambili, kwaye ngentwasahlobo ka-2017 (inguqulo 8.3.11 1C: Ishishini) ukufuduka kwagqitywa.

Iziphumo

Ukutshintshela kumgangatho we-C ++ 14 kusithathe malunga neenyanga ezi-6. Amaxesha amaninzi, umphuhlisi omnye (kodwa oqeqeshwe kakhulu) wayesebenza kwiprojekthi, kwaye kwinqanaba lokugqibela abameli bamaqela anoxanduva lweendawo ezithile ezidibeneyo - i-UI, i-server cluster, uphuhliso kunye nezixhobo zolawulo, njl.

Utshintsho lwenza lula kakhulu umsebenzi wethu wokufudukela kwiinguqulelo zamva nje zomgangatho. Ngaloo ndlela, inguqulo ye-1C: I-Enterprise 8.3.14 (ekuphuhlisweni, ukukhutshwa okucwangciselwe ekuqaleni konyaka ozayo) sele idluliselwe kumgangatho. C++17.

Emva kokufuduka, abaphuhlisi banokhetho oluninzi. Ukuba ngaphambili besineyethu inguqulelo elungisiweyo ye-STL kunye ne-std namespace enye, ngoku sineeklasi eziqhelekileyo ukusuka kwiilayibrari eziqokelelweyo ezakhelwe ngaphakathi kwindawo yegama le-std, kwindawo yegama le-stdx - imigca yethu kunye nezikhongozeli ezilungiselelwe imisebenzi yethu, ekunyuseni inguqulelo yamva nje yokunyusa. Kwaye umphuhlisi usebenzisa ezo klasi zifaneleke ngokupheleleyo ukusombulula iingxaki zakhe.

Ukuphunyezwa β€œkomthonyama” kwabakhi abahambayo kukwanceda kuphuhliso (hambisa abakhi) kwinani leeklasi. Ukuba iklasi inomakhi oshukumayo kwaye le klasi ifakwe kwisikhongozeli, ngoko i-STL ilungiselela ukukopishwa kwezinto ngaphakathi kwesikhongozeli (umzekelo, xa isitya sandiswa kwaye kuyimfuneko ukutshintsha umthamo kunye nokubuyisela kwakhona imemori).

Icephe letha

Mhlawumbi eyona nto ingathandekiyo (kodwa ayibalulekanga) isiphumo sokufuduka kukuba sijongene nokunyuka komthamo. obj iifayile, kunye nesiphumo esipheleleyo sokwakhiwa kunye nazo zonke iifayile eziphakathi zaqala ukuthatha i-60-70 GB. Oku kuziphatha kubangelwa kwizinto ezikhethekileyo zamathala eencwadi asemgangathweni anamhlanje, athe abaluleke kakhulu kubungakanani beefayile zenkonzo ezenziweyo. Oku akuchaphazeli ukusebenza kwesicelo esihlanganisiweyo, kodwa kubangela inani lokuphazamiseka ekuphuhlisweni, ngokukodwa, kwandisa ixesha lokuhlanganisa. Iimfuno zesithuba sediski sasimahla kwiiseva zokwakha kunye nakumatshini womphuhlisi nazo ziyanda. Abaphuhlisi bethu basebenza kwiinguqulelo ezininzi zeqonga ngokufanayo, kwaye amakhulu eegigabhayithi zeefayile eziphakathi ngamanye amaxesha adala ubunzima emsebenzini wabo. Ingxaki ayimnandanga, kodwa ayigxeki; sisihlehlise isisombululo sayo okwangoku. Sithathela ingqalelo itekhnoloji njengenye yeendlela zokuyicombulula ukwakha umanyano (ngokukodwa, iGoogle iyisebenzisa xa iphuhlisa isiphequluli seChrome).

umthombo: www.habr.com

Yongeza izimvo