Bii a ṣe tumọ awọn laini miliọnu 10 ti koodu C ++ si boṣewa C ++14 (ati lẹhinna si C ++17)

Ni akoko diẹ sẹhin (ni Igba Irẹdanu Ewe ti 2016), lakoko idagbasoke ti ẹya atẹle ti 1C: Syeed imọ-ẹrọ ti ile-iṣẹ, ibeere naa dide laarin ẹgbẹ idagbasoke nipa atilẹyin boṣewa tuntun. C ++ 14 ninu koodu wa. Iyipada si boṣewa tuntun, bi a ti ro, yoo gba wa laaye lati kọ ọpọlọpọ awọn nkan diẹ sii ni ẹwa, ni irọrun ati ni igbẹkẹle, ati pe yoo jẹ ki atilẹyin ati itọju koodu rọrun. Ati pe ko si ohun ti o ṣe pataki ni itumọ, ti kii ṣe fun iwọn ti ipilẹ koodu ati awọn ẹya pato ti koodu wa.

Fun awọn ti ko mọ, 1C: Idawọlẹ jẹ agbegbe fun idagbasoke iyara ti awọn ohun elo iṣowo agbekọja ati akoko asiko fun ipaniyan wọn lori awọn OS ati awọn DBMS oriṣiriṣi. Ni awọn ofin gbogbogbo, ọja naa ni:

A gbiyanju lati kọ koodu kanna fun awọn ọna ṣiṣe oriṣiriṣi bi o ti ṣee ṣe - ipilẹ koodu olupin jẹ 99% wọpọ, ipilẹ koodu alabara jẹ nipa 95%. 1C: Syeed imọ-ẹrọ Idawọlẹ jẹ kikọ ni akọkọ ni C++ ati pe awọn abuda koodu isunmọ ni a fun ni isalẹ:

  • Awọn laini miliọnu 10 ti koodu C ++,
  • 14 ẹgbẹrun awọn faili,
  • 60 ẹgbẹrun kilasi,
  • idaji milionu awọn ọna.

Ati pe gbogbo nkan wọnyi ni lati tumọ si C++14. Loni a yoo sọ fun ọ bi a ṣe ṣe eyi ati ohun ti a pade ninu ilana naa.

Bii a ṣe tumọ awọn laini miliọnu 10 ti koodu C ++ si boṣewa C ++14 (ati lẹhinna si C ++17)

AlAIgBA

Ohun gbogbo ti a kọ ni isalẹ nipa iṣẹ iyara / iyara, (kii ṣe) agbara iranti nla nipasẹ awọn imuse ti awọn kilasi boṣewa ni awọn ile-ikawe pupọ tumọ si ohun kan: otitọ ni fun AMẸRIKA. O ṣee ṣe pupọ pe awọn imuse boṣewa yoo dara julọ fun awọn iṣẹ ṣiṣe rẹ. A bẹrẹ lati awọn iṣẹ ṣiṣe tiwa: a mu data ti o jẹ aṣoju fun awọn alabara wa, ṣiṣe awọn oju iṣẹlẹ aṣoju lori wọn, wo iṣẹ ṣiṣe, iye iranti ti o jẹ, ati bẹbẹ lọ, ati ṣe itupalẹ boya awa ati awọn alabara wa ni itẹlọrun pẹlu iru awọn abajade tabi rara. . Ati pe wọn ṣe da lori.

Ohun ti a ni

Ni ibẹrẹ, a ko koodu fun 1C:Iṣẹ 8 Syeed ni Microsoft Visual Studio. Ise agbese na bẹrẹ ni ibẹrẹ ọdun 2000 ati pe a ni ẹya Windows-nikan. Nipa ti, lati igba naa koodu naa ti ni idagbasoke ni itara, ọpọlọpọ awọn ọna ṣiṣe ni a ti tun kọ patapata. Ṣugbọn koodu naa ni a kọ ni ibamu si boṣewa 1998, ati, fun apẹẹrẹ, awọn biraketi igun ọtun wa niya nipasẹ awọn aaye ki akopọ yoo ṣaṣeyọri, bii eyi:

vector<vector<int> > IntV;

Ni ọdun 2006, pẹlu itusilẹ ti ẹya Syeed 8.1, a bẹrẹ atilẹyin Linux ati yipada si ile-ikawe boṣewa ti ẹnikẹta STLPort. Ọkan ninu awọn idi fun iyipada ni lati ṣiṣẹ pẹlu awọn ila gbooro. Ninu koodu wa, a lo std :: wstring, eyiti o da lori iru wchar_t, jakejado. Iwọn rẹ ni Windows jẹ awọn baiti 2, ati ni Linux aiyipada jẹ awọn baiti 4. Eyi yori si aibaramu ti awọn ilana alakomeji wa laarin alabara ati olupin, bakanna bi ọpọlọpọ data itẹramọṣẹ. Lilo awọn aṣayan gcc, o le pato pe iwọn wchar_t lakoko iṣakojọpọ tun jẹ awọn baiti 2, ṣugbọn lẹhinna o le gbagbe nipa lilo ile-ikawe boṣewa lati akopọ, nitori o nlo glibc, eyiti o jẹ akopọ fun 4-baiti wchar_t. Awọn idi miiran jẹ imuse to dara julọ ti awọn kilasi boṣewa, atilẹyin fun awọn tabili hash, ati paapaa apẹẹrẹ ti awọn atunmọ ti gbigbe inu awọn apoti, eyiti a lo ni itara. Ati idi kan diẹ sii, bi wọn ṣe sọ kẹhin ṣugbọn kii kere ju, jẹ iṣẹ ṣiṣe okun. A ni kilasi tiwa fun awọn okun, nitori ... Nitori awọn pato ti sọfitiwia wa, awọn iṣẹ ṣiṣe okun ni a lo lọpọlọpọ ati fun wa eyi ṣe pataki.

Okun wa da lori awọn imọran iṣapeye okun ti a fihan ni ibẹrẹ awọn ọdun 2000 Andrei Alexandrescu. Nigbamii, nigbati Alexandrescu ṣiṣẹ ni Facebook, ni imọran rẹ, a lo ila kan ninu ẹrọ Facebook ti o ṣiṣẹ lori awọn ilana ti o jọra (wo ile-ikawe. were).

Laini wa lo awọn imọ-ẹrọ iṣapeye akọkọ meji:

  1. Fun awọn iye kukuru, ifipamọ inu inu ohun okun funrararẹ ni a lo (ko nilo ipin iranti afikun).
  2. Fun gbogbo awọn miiran, mekaniki ti wa ni lilo Daakọ Lori Kọ. Iye okun ti wa ni ipamọ ni aaye kan, ati pe a lo counter itọkasi lakoko iṣẹ iyansilẹ / iyipada.

Lati mu ikojọpọ Syeed yarayara, a yọkuro imuse ṣiṣan lati iyatọ STLPort wa (eyiti a ko lo), eyi fun wa ni iwọn 20% akopọ yiyara. Lẹhinna a ni lati lo opin didn. Igbelaruge ṣe lilo ṣiṣan ti o wuwo, pataki ni awọn API iṣẹ rẹ (fun apẹẹrẹ, fun gedu), nitorinaa a ni lati yipada lati yọ lilo ṣiṣan kuro. Eyi, lapapọ, jẹ ki o nira fun wa lati jade lọ si awọn ẹya tuntun ti Igbelaruge.

Ọna kẹta

Nigbati o ba nlọ si boṣewa C ++ 14, a gbero awọn aṣayan wọnyi:

  1. Igbesoke STLPort ti a yipada si C ++ 14 bošewa. Aṣayan naa nira pupọ, nitori ... atilẹyin fun SLTPort ti dawọ ni ọdun 2010, ati pe a yoo ni lati kọ gbogbo koodu rẹ funrararẹ.
  2. Iyipada si imuse STL miiran ti o ni ibamu pẹlu C ++ 14. O jẹ iwunilori pupọ pe imuse yii jẹ fun Windows ati Lainos.
  3. Nigbati o ba n ṣajọ fun OS kọọkan, lo ile-ikawe ti a ṣe sinu akopọ ti o baamu.

Aṣayan akọkọ ti kọ ni pipe nitori iṣẹ ti o pọ ju.

A ro nipa aṣayan keji fun igba diẹ; kà bi oludije libc++, ṣugbọn ni akoko yẹn ko ṣiṣẹ labẹ Windows. Lati gbe libc++ si Windows, iwọ yoo ni lati ṣe ọpọlọpọ iṣẹ - fun apẹẹrẹ, kọ ohun gbogbo funrararẹ ti o ni ibatan pẹlu awọn okun, amuṣiṣẹpọ okun ati atomity, niwon libc ++ ti a lo ni awọn agbegbe wọnyi. POSIX API.

Ati pe a yan ọna kẹta.

Orilede

Nitorinaa, a ni lati rọpo lilo SLTPort pẹlu awọn ile-ikawe ti awọn alakojọ ti o baamu (Visual Studio 2015 fun Windows, gcc 7 fun Linux, clang 8 fun macOS).

Ni akoko, koodu wa ti kọ ni pataki ni ibamu si awọn itọnisọna ati pe ko lo gbogbo iru awọn ẹtan onilàkaye, nitorinaa iṣiwa si awọn ile-ikawe tuntun tẹsiwaju ni irọrun, pẹlu iranlọwọ ti awọn iwe afọwọkọ ti o rọpo awọn orukọ ti awọn oriṣi, awọn kilasi, awọn aaye orukọ ati pẹlu ninu orisun. awọn faili. Iṣilọ naa kan awọn faili orisun 10 (lati inu 000). wchar_t ti rọpo nipasẹ char14_t; a pinnu lati fi kọ awọn lilo ti wchar_t, nitori char000_t gba awọn baiti 16 lori gbogbo awọn OS ati pe ko ṣe ibajẹ ibamu koodu laarin Windows ati Lainos.

Nibẹ wà diẹ ninu awọn kekere seresere. Fun apẹẹrẹ, ni STLPort oluṣeto kan le jẹ simẹnti laisọtọ si itọka si ohun elo kan, ati ni awọn aaye kan ninu koodu wa eyi ni a lo. Ni awọn ile-ikawe tuntun ko ṣee ṣe lati ṣe eyi mọ, ati pe awọn aye wọnyi ni lati ṣe itupalẹ ati tunkọ pẹlu ọwọ.

Nitorinaa, iṣipopada koodu ti pari, koodu naa ti ṣajọ fun gbogbo awọn ọna ṣiṣe. O to akoko fun awọn idanwo.

Awọn idanwo lẹhin iyipada fihan idinku ninu iṣẹ (ni awọn aaye kan to 20-30%) ati ilosoke ninu lilo iranti (to 10-15%) ni akawe si ẹya atijọ ti koodu naa. Eyi jẹ, ni pataki, nitori iṣẹ ṣiṣe suboptimal ti awọn okun boṣewa. Nitorinaa, a tun ni lati lo laini tiwa, ti a yipada diẹ.

Ẹya ti o nifẹ si imuse ti awọn apoti ni awọn ile-ikawe ifibọ tun ṣafihan: ofo (laisi awọn eroja) std :: maapu ati std :: ṣeto lati awọn ile-ikawe ti a ṣe sinu sọtọ iranti. Ati nitori awọn ẹya imuse, ni diẹ ninu awọn aaye ni koodu pupọ ọpọlọpọ awọn apoti ofo ti iru yii ni a ṣẹda. Awọn apoti iranti boṣewa ti pin diẹ diẹ, fun ipin root kan, ṣugbọn fun wa eyi ti jade lati jẹ pataki - ni nọmba awọn oju iṣẹlẹ, iṣẹ wa ti lọ silẹ ni pataki ati agbara iranti pọ si (akawe si STLPort). Nitorinaa, ninu koodu wa a rọpo awọn iru awọn apoti meji wọnyi lati awọn ile-ikawe ti a ṣe sinu pẹlu imuse wọn lati Boost, nibiti awọn apoti wọnyi ko ni ẹya yii, ati pe eyi yanju iṣoro naa pẹlu idinku ati alekun agbara iranti.

Bii igbagbogbo ti o ṣẹlẹ lẹhin awọn ayipada iwọn-nla ni awọn iṣẹ akanṣe nla, aṣetunṣe akọkọ ti koodu orisun ko ṣiṣẹ laisi awọn iṣoro, ati nibi, ni pataki, atilẹyin fun awọn olutọpa n ṣatunṣe aṣiṣe ni imuse Windows wa ni ọwọ. Igbese nipa igbese a gbe siwaju, ati nipa awọn orisun omi ti 2017 (version 8.3.11 1C: Enterprise) awọn ijira ti pari.

Awọn esi

Iyipada si boṣewa C ++ 14 gba wa nipa awọn oṣu 6. Ni pupọ julọ akoko naa, olupilẹṣẹ kan (ṣugbọn ti o ni oye pupọ) ṣiṣẹ lori iṣẹ akanṣe naa, ati ni ipele ikẹhin awọn aṣoju ti awọn ẹgbẹ ti o ni iduro fun awọn agbegbe kan pato ti o darapọ mọ - UI, iṣupọ olupin, idagbasoke ati awọn irinṣẹ iṣakoso, ati bẹbẹ lọ.

Iyipada naa jẹ ki iṣẹ wa rọrun pupọ lori iṣikiri si awọn ẹya tuntun ti boṣewa. Nitorinaa, ẹya 1C: Idawọlẹ 8.3.14 (ni idagbasoke, itusilẹ ti a ṣeto fun ibẹrẹ ọdun ti n bọ) ti ti gbe tẹlẹ si boṣewa C ++17.

Lẹhin ijira, awọn olupilẹṣẹ ni awọn aṣayan diẹ sii. Ti o ba jẹ tẹlẹ a ni ẹya tiwa ti STL ti a yipada ati aaye orukọ std kan, ni bayi a ni awọn kilasi boṣewa lati awọn ile-ikawe alakojọ ti a ṣe sinu aaye orukọ std, ni aaye orukọ stdx - awọn laini wa ati awọn apoti iṣapeye fun awọn iṣẹ ṣiṣe wa, ni igbelaruge - awọn titun ti ikede igbelaruge. Ati pe olupilẹṣẹ lo awọn kilasi wọnyẹn ti o baamu ni aipe lati yanju awọn iṣoro rẹ.

Imuse “abinibi” ti awọn oluṣe gbigbe tun ṣe iranlọwọ ninu idagbasoke (gbe constructors) fun nọmba kan ti awọn kilasi. Ti kilasi kan ba ni olupilẹṣẹ gbigbe ati kilasi yii ni a gbe sinu apo eiyan kan, lẹhinna STL ṣe iṣapeye didaakọ awọn eroja inu inu eiyan naa (fun apẹẹrẹ, nigbati eiyan naa ba gbooro ati pe o jẹ dandan lati yi agbara pada ati tunto iranti).

Sibi ti oda

Boya aibalẹ julọ (ṣugbọn kii ṣe pataki) abajade ti ijira ni pe a dojuko pẹlu ilosoke ninu iwọn didun. obj awọn faili, ati abajade kikun ti kikọ pẹlu gbogbo awọn faili agbedemeji bẹrẹ lati gba 60-70 GB. Ihuwasi yii jẹ nitori awọn iyasọtọ ti awọn ile-ikawe boṣewa ode oni, eyiti o ti di iwunilori ti iwọn awọn faili iṣẹ ti ipilẹṣẹ. Eyi ko ni ipa lori iṣẹ ti ohun elo ti a ṣajọpọ, ṣugbọn o fa nọmba kan ti awọn aiṣedeede ni idagbasoke, ni pataki, o mu akoko akopọ pọ si. Awọn ibeere fun aaye disiki ọfẹ lori awọn olupin kikọ ati lori awọn ẹrọ idagbasoke tun n pọ si. Awọn olupilẹṣẹ wa ṣiṣẹ lori awọn ẹya pupọ ti pẹpẹ ni afiwe, ati awọn ọgọọgọrun gigabytes ti awọn faili agbedemeji nigbakan ṣẹda awọn iṣoro ninu iṣẹ wọn. Iṣoro naa ko dun, ṣugbọn kii ṣe pataki; a ti sun ojutu rẹ siwaju fun bayi. A n gbero imọ-ẹrọ bi ọkan ninu awọn aṣayan fun ipinnu rẹ isokan kọ (ni pataki, Google nlo nigbati o ba n dagbasoke ẹrọ aṣawakiri Chrome).

orisun: www.habr.com

Fi ọrọìwòye kun