Ny fomba nandikanay andalana C++ 10 tapitrisa amin'ny fenitra C++ 14 (ary avy eo amin'ny C++ 17)

Fotoana vitsy lasa izay (tamin'ny fararano 2016), nandritra ny fampivoarana ny dikan-teny manaraka amin'ny sehatra teknolojia 1C: Enterprise, dia nipoitra ny fanontaniana tao amin'ny ekipa fampandrosoana momba ny fanohanana ny fenitra vaovao. C ++ 14 amin'ny kaodinay. Ny fifindrana mankany amin'ny fenitra vaovao, araka ny noheverinay, dia ahafahantsika manoratra zavatra maro amin'ny fomba kanto kokoa, tsotra ary azo ianteherana, ary hanamora ny fanohanana sy fikojakojana ny kaody. Ary toa tsy misy zavatra miavaka amin'ny fandikan-teny, raha tsy noho ny haben'ny fototry ny code sy ny endri-javatra manokana amin'ny code.

Ho an'ireo izay tsy mahalala, 1C: Enterprise dia tontolo iray ho an'ny fampivoarana haingana ny rindranasa fandraharahana cross-platform sy ny fotoam-pamokarana azy ireo amin'ny OS sy DBMS samihafa. Amin'ny ankapobeny, ny vokatra dia misy:

  • Application Server Cluster, mandeha amin'ny Windows sy Linux
  • mpanjifa, miasa amin'ny mpizara amin'ny alΓ lan'ny http(s) na ny protocol binary azy manokana, miasa amin'ny Windows, Linux, macOS
  • Web client, mandeha amin'ny Chrome, Internet Explorer, Microsoft Edge, Firefox, Safari browsers (voasoratra amin'ny JavaScript)
  • tontolo iainana fampandrosoana (Configurator), miasa amin'ny Windows, Linux, macOS
  • Fitaovana fitantanana mpizara fampiharana, mandeha amin'ny Windows, Linux, macOS
  • Mpanjifa finday, mifandray amin'ny mpizara amin'ny alalan'ny http(s), miasa amin'ny fitaovana finday mandeha Android, iOS, Windows
  • Sehatra finday β€” rafitra hamoronana rindranasa finday ivelan'ny aterineto miaraka amin'ny fahafahana mampiray, mandeha amin'ny Android, iOS, Windows
  • Tontolo iainana fampandrosoana 1C: Fitaovam-pampandrosoana orinasa, voasoratra amin'ny Java
  • mpizara Rafitra fifandraisana

Miezaka manoratra fehezan-dalΓ na mitovy amin'ny rafitra fiasa samihafa araka izay azo atao izahay - ny fototry ny kaody mpizara dia 99% mahazatra, ny fototry ny kaody mpanjifa dia eo amin'ny 95%. Ny sehatra teknolojia 1C: Enterprise dia voasoratra voalohany amin'ny C ++ ary omena eto ambany ny toetra mampiavaka ny code:

  • 10 tapitrisa andalana C++ code,
  • 14 arivo rakitra,
  • kilasy 60 arivo,
  • fomba antsasaky ny tapitrisa.

Ary tsy maintsy nadika ho C++14 ireo zavatra rehetra ireo. Androany dia holazainay aminao ny fomba nanaovanay izany sy ny zavatra sendra anay tamin'ny dingana.

Ny fomba nandikanay andalana C++ 10 tapitrisa amin'ny fenitra C++ 14 (ary avy eo amin'ny C++ 17)

Disclaimer

Ny zavatra rehetra voasoratra etsy ambany momba ny asa miadana/faingana, (fa tsy) fanjifana fitadidiana lehibe amin'ny fampiharana ny kilasy manara-penitra amin'ny tranomboky isan-karazany dia midika zavatra iray: marina izany HO ANTSIKA. Azo inoana fa ny fampiharana manara-penitra no mety indrindra amin'ny asanao. Nanomboka tamin'ny asanay manokana izahay: naka angon-drakitra mahazatra ho an'ny mpanjifanay, nihazakazaka scenario mahazatra momba azy ireo, nijery ny zava-bita, ny habetsaky ny fahatsiarovana lanina, sns., ary nandinika raha afa-po tamin'ny vokatra toy izany izahay sy ny mpanjifanay na tsia. . Ary nihetsika izy ireo arakaraka ny.

Izay nanananay

Tamin'ny voalohany, nanoratra ny kaody ho an'ny sehatra 1C: Enterprise 8 izahay tamin'ny fampiasana Microsoft Visual Studio. Nanomboka tamin'ny fiandohan'ny taona 2000 ny tetikasa ary nanana dikan-Windows irery izahay. Mazava ho azy, nanomboka teo ny fehezan-dalΓ na dia mavitrika novolavolaina, mekanika maro no naverina nosoratana tanteraka. Saingy ny kaody dia nosoratana araka ny fenitra 1998, ary, ohatra, ny brackets zoro havanana dia nosarahan'ny habaka mba hahombiazan'ny fanangonana, toy izao:

vector<vector<int> > IntV;

Tamin'ny 2006, tamin'ny famoahana ny sehatra version 8.1, dia nanomboka nanohana Linux izahay ary nifindra tany amin'ny tranomboky mahazatra an'ny antoko fahatelo. STLPort. Anisan'ny anton'ny tetezamita ny fiasana amin'ny tsipika midadasika. Ao amin'ny code, mampiasa std::wstring izahay, izay mifototra amin'ny karazana wchar_t, manerana. Ny habeny amin'ny Windows dia 2 bytes, ary amin'ny Linux ny default dia 4 bytes. Izany dia nitarika ho amin'ny tsy mifanaraka amin'ny protocols binary eo amin'ny mpanjifa sy ny mpizara, ary koa ny angona maharitra isan-karazany. Amin'ny fampiasana ny safidy gcc, azonao atao ny mamaritra fa ny haben'ny wchar_t mandritra ny fanangonana dia 2 bytes ihany koa, saingy azonao atao ny manadino ny fampiasana ny tranomboky mahazatra avy amin'ny compiler, satria mampiasa glibc izy io, izay natambatra ho 4-byte wchar_t. Ny antony hafa dia ny fampiharana tsara kokoa ny kilasy manara-penitra, ny fanohanana ny latabatra hash, ary na dia ny fanahafana ny semantika amin'ny fifindran'ny kaontenera, izay nampiasainay mavitrika. Ary antony iray hafa, araka ny filazan'izy ireo farany fa tsy ny kely indrindra, dia ny fahombiazan'ny string. Nanana kilasy ho an'ny tady izahay, satria... Noho ny mari-pamantarana manokana amin'ny rindrambaiko, dia ampiasaina betsaka ny fampandehanana tady ary zava-dehibe ho anay izany.

Ny tadynay dia mifototra amin'ny hevitra fanatsarana ny tady naseho tany am-piandohan'ireo taona 2000 Andrei Alexandrescu. Taty aoriana, rehefa niasa tao amin'ny Facebook i Alexandrescu, araka ny soso-keviny, dia nisy tsipika iray nampiasaina tao amin'ny motera Facebook izay niasa tamin'ny fitsipika mitovy amin'izany (jereo ny tranomboky fahadalana).

Nampiasa teknolojia fanatsarana roa lehibe ny laharanay:

  1. Ho an'ny soatoavina fohy, ny buffer anatiny ao amin'ny zavatra tady mihitsy no ampiasaina (tsy mila fitadidiana fanampiny).
  2. Ho an'ny hafa rehetra, mekanika no ampiasaina Copy On Write. Ny sandan'ny tady dia voatahiry amin'ny toerana iray, ary ny kaontera fanondro dia ampiasaina mandritra ny fanendrena/fanovΓ na.

Mba hanafainganana ny fanangonana sehatra dia nesorinay tamin'ny variana STLPort anay ny fampiharana ny stream (izay tsy nampiasainay), nanome anay 20% haingana kokoa izany. Taty aoriana dia tsy maintsy nampiasa voafetra ihany izahay tosika. Ny Boost dia mampiasa be dia be ny stream, indrindra amin'ny serivisy API (ohatra, amin'ny logging), noho izany dia tsy maintsy nanova azy io izahay mba hanesorana ny fampiasana stream. Izany, indray, dia nanasarotra anay ny nifindra monina tany amin'ny dikan-teny Boost vaovao.

Fomba fahatelo

Rehefa nifindra tany amin'ny fenitra C ++ 14 izahay dia nandinika ireto safidy manaraka ireto:

  1. Havaozina ny STLPort novanay amin'ny fenitra C++14. Sarotra be ny safidy, satria... Ny fanohanana ny STLPort dia natsahatra tamin'ny 2010, ary tsy maintsy nanangana ny kaody rehetra ao aminy izahay.
  2. Tetezamita amin'ny fampiharana STL hafa mifanaraka amin'ny C++14. Tena irina fa ho an'ny Windows sy Linux ity fampiharana ity.
  3. Rehefa manangona ho an'ny OS tsirairay dia ampiasao ny tranomboky natsangana ao amin'ny compiler mifanaraka aminy.

Nolavina tanteraka ny safidy voalohany noho ny asa be loatra.

Nieritreritra ny safidy faharoa izahay nandritra ny fotoana kelikely; heverina ho kandida libc++, fa tamin'izany fotoana izany dia tsy niasa tao ambanin'ny Windows. Mba hampidirana libc ++ amin'ny Windows dia mila manao asa be dia be ianao - ohatra, soraty ny zavatra rehetra mifandraika amin'ny kofehy, ny fampifanarahana ny kofehy ary ny atomika, satria ny libc++ dia ampiasaina amin'ireo faritra ireo. POSIX API.

Ary nisafidy ny lalana fahatelo izahay.

Tetezamita

Noho izany, tsy maintsy nosoloinay ny fampiasana STLPort miaraka amin'ny tranombokin'ireo mpamoron-kira mifanaraka amin'izany (Visual Studio 2015 ho an'ny Windows, gcc 7 ho an'ny Linux, clang 8 ho an'ny macOS).

Soa ihany fa nosoratana araka ny toromarika indrindra ny kaodinay ary tsy nampiasa karazana hafetsena isan-karazany, noho izany dia nandeha tsara ny fifindra-monina tany amin'ny tranomboky vaovao, miaraka amin'ny fanampian'ny script izay nisolo ny anaran'ny karazana, kilasy, namespaces ary tafiditra ao amin'ny loharano. rakitra. Ny fifindra-monina dia nisy fiantraikany tamin'ny rakitra loharano 10 (amin'ny 000). wchar_t dia nosoloina char14_t; nanapa-kevitra izahay ny handao ny fampiasana ny wchar_t, satria char000_t dia maka 16 bytes amin'ny OS rehetra ary tsy manimba ny fifanarahana code eo amin'ny Windows sy Linux.

Nisy aventure kely. Ohatra, ao amin'ny STLPort dia azo alefa mivantana amin'ny tondro mankany amin'ny singa iray ny mpizara iray, ary amin'ny toerana sasany ao amin'ny code misy antsika dia nampiasaina izany. Ao amin'ny trano famakiam-boky vaovao dia tsy azo atao intsony ny manao izany, ary ireo andalana ireo dia tsy maintsy nodinihina sy nosoratana tamin'ny tanana.

Noho izany, ny fifindra-monina kaody dia vita, ny kaody dia natambatra ho an'ny rafitra miasa rehetra. Fotoana hanaovana fitiliana izao.

Ny fitsapana taorian'ny tetezamita dia mampiseho ny fihenan'ny fampisehoana (amin'ny toerana sasany hatramin'ny 20-30%) ary ny fitomboan'ny fanjifana fahatsiarovana (hatramin'ny 10-15%) raha oharina amin'ny dikan-teny taloha. Izany dia, indrindra indrindra, noho ny tsy fahombiazan'ny tady mahazatra. Noho izany dia tsy maintsy nampiasa ny tsipikay manokana indray izahay, novana kely.

Naseho ihany koa ny endri-javatra mahaliana iray amin'ny fampiharana ny kaontenera ao amin'ny trano famakiam-boky tafiditra: tsy misy na inona na inona (tsy misy singa) std::map ary std::set avy amin'ny trano famakiam-boky naorina dia manome fahatsiarovana. Ary noho ny endri-javatra fampiharana, any amin'ny toerana sasany ao amin'ny kaody, dia be dia be ny fitoeran-javatra tsy misy an'io karazana io no noforonina. Ny fitahirizana fitadidiana mahazatra dia atokana kely, ho an'ny singa fototra iray, fa ho antsika dia nivadika ho fanakianana izany - amin'ny toe-javatra maromaro dia nihena be ny fahombiazantsika ary nitombo ny fanjifana fahatsiarovana (raha oharina amin'ny STLPort). Noho izany, ao amin'ny kaody ataonay dia nosoloinay ireo karazana kaontenera roa ireo avy amin'ny tranomboky naorina miaraka amin'ny fampiharana azy ireo avy amin'ny Boost, izay tsy nananan'ireo kaontenera ireo an'io endri-javatra io, ary izany dia namaha ny olana amin'ny fihenan-dΓ lana sy ny fitomboan'ny fanjifana fahatsiarovana.

Toy ny nitranga matetika taorian'ny fiovana lehibe amin'ny tetikasa lehibe, ny famerimberenana voalohany ny kaody loharano dia tsy niasa tsy nisy olana, ary eto, indrindra, ny fanohanana ny debugging iterators amin'ny fampiharana Windows dia azo ampiasaina. Nandroso tsikelikely izahay, ary tamin'ny lohataonan'ny 2017 (version 8.3.11 1C:Enterprise) dia vita ny fifindra-monina.

vokatra

Naharitra 14 volana teo ho eo ny fifindrana mankany amin'ny fenitra C++6. Ny ankamaroan'ny fotoana dia iray (saingy tena mahafeno fepetra) mpamorona no niasa tamin'ny tetikasa, ary tamin'ny dingana farany dia nisy solontenan'ny ekipa tompon'andraikitra amin'ny faritra manokana nanatevin-daharana - UI, cluster server, fitaovana fampandrosoana sy fitantanana, sns.

Nanamora ny asanay momba ny fifindrana mankany amin'ny dikan-teny farany amin'ny fenitra ny tetezamita. Noho izany, ny version 1C: Enterprise 8.3.14 (eo amin'ny fampandrosoana, ny famoahana voalahatra ho amin'ny fiandohan'ny taona manaraka) dia efa nafindra tany amin'ny fenitra. C++ 17.

Aorian'ny fifindra-monina dia manana safidy bebe kokoa ny mpamorona. Raha teo aloha isika dia nanana ny dikan-teny STL novaina sy ny std namespace iray, ankehitriny dia manana kilasy mahazatra avy amin'ny tranomboky compiler naorina ao amin'ny std namespace, ao amin'ny stdx namespace - ny tsipika sy ny fitoeran'entana natao ho an'ny asantsika, amin'ny boost - ny dikan-teny farany amin'ny boost. Ary ny mpamorona dia mampiasa ireo kilasy izay mifanaraka tsara indrindra amin'ny famahana ny olany.

Manampy amin'ny fampandrosoana ihany koa ny fampiharana "native" amin'ireo mpamorona hetsika (mihetsika constructors) ho an'ny kilasy maromaro. Raha toa ka manana constructor mihetsika ny kilasy iray ary apetraka ao anaty container ity kilasy ity, ny STL dia manatsara ny kopia ireo singa ao anatin'ny container (ohatra, rehefa miitatra ny container ary ilaina ny manova ny fahafaha-manao sy mamerina ny fahatsiarovana).

Mialatsiny ao anaty menaka

Angamba ny voka-dratsin'ny fifindra-monina tsy mahafinaritra indrindra (fa tsy manakiana) dia ny fiatrehana ny fitomboan'ny habetsahana. obj rakitra, ary ny vokatra feno tamin'ny fananganana miaraka amin'ireo rakitra manelanelana rehetra dia nanomboka naka 60-70 GB. Izany fihetsika izany dia noho ny mampiavaka ny trano famakiam-boky manara-penitra maoderina, izay nanjary tsy dia nanakiana loatra ny haben'ny rakitra serivisy natsangana. Tsy misy fiantraikany amin'ny fampandehanana ny fampiharana natambatra izany, fa miteraka fahasahiranana maro amin'ny fampandrosoana, indrindra fa mampitombo ny fotoana fanangonana. Mitombo ihany koa ny fepetra takiana amin'ny habaka kapila maimaim-poana amin'ny serivisy fananganana sy amin'ny milina mpamorona. Ny mpamorona anay dia miasa amin'ny dikan-teny maromaro amin'ny sehatra mifanitsy, ary ny gigabytes an-jatony amin'ny rakitra mpanelanelana indraindray dia miteraka fahasahiranana amin'ny asany. Ny olana dia tsy mahafinaritra, fa tsy mitsikera; nahemotra amin'izao fotoana izao ny vahaolana. Heverinay ho iray amin'ireo safidy hamahana izany ny teknolojia fananganana firaisankina (indrindra indrindra, ampiasain'i Google izany rehefa mamolavola ny navigateur Chrome).

Source: www.habr.com

Add a comment