Yuav ua li cas peb txhais 10 lab kab ntawm C ++ code rau C ++ 14 tus qauv (thiab tom qab ntawd mus rau C ++ 17)

Qee lub sij hawm dhau los (thaum lub caij nplooj zeeg xyoo 2016), thaum lub sij hawm kev txhim kho tom ntej ntawm 1C: Kev Lag Luam thev naus laus zis platform, cov lus nug tshwm sim hauv pab pawg txhim kho txog kev txhawb nqa tus qauv tshiab. C ++ 14 nyob rau hauv peb cov cai. Kev hloov mus rau tus qauv tshiab, raws li peb xav, yuav tso cai rau peb sau ntau yam zoo nkauj dua, yooj yim thiab ntseeg tau, thiab yuav ua kom yooj yim rau kev txhawb nqa thiab kev saib xyuas cov cai. Thiab zoo li tsis muaj dab tsi txawv tshaj plaw hauv kev txhais lus, yog tias tsis yog rau qhov ntsuas ntawm lub hauv paus code thiab cov yam ntxwv tshwj xeeb ntawm peb cov cai.

Rau cov neeg uas tsis paub, 1C: Kev Lag Luam yog ib puag ncig rau kev txhim kho sai ntawm cov ntawv thov kev lag luam hla kev lag luam thiab lub sijhawm ua haujlwm rau lawv cov kev ua tiav ntawm ntau OSes thiab DBMSs. Nyob rau hauv dav dav, cov khoom muaj xws li:

Peb sim sau tib txoj cai rau cov kev khiav hauj lwm sib txawv kom ntau li ntau tau - server code puag yog 99% ntau, tus neeg siv code puag yog li 95%. Lub 1C: Kev lag luam thev naus laus zis platform feem ntau yog sau rau hauv C ++ thiab kwv yees tus lej code tau muab hauv qab no:

  • 10 lab kab ntawm C ++ code,
  • 14 cov ntaub ntawv,
  • 60 txhiab chav kawm,
  • ib nrab lab txoj kev.

Thiab tag nrho cov khoom no yuav tsum tau muab txhais ua C ++ 14. Niaj hnub no peb yuav qhia koj seb peb tau ua li cas thiab peb tau ntsib dab tsi hauv cov txheej txheem.

Yuav ua li cas peb txhais 10 lab kab ntawm C ++ code rau C ++ 14 tus qauv (thiab tom qab ntawd mus rau C ++ 17)

Tsis lees paub

Txhua yam sau tseg hauv qab no hais txog kev ua haujlwm qeeb / nrawm, (tsis yog) kev siv lub cim xeeb loj los ntawm kev siv cov chav kawm hauv ntau lub tsev qiv ntawv txhais tau tias ib yam: qhov no yog qhov tseeb rau Asmeskas. Nws yog qhov ua tau heev uas cov qauv siv yuav ua tau zoo tshaj plaws rau koj cov dej num. Peb pib los ntawm peb tus kheej cov dej num: peb coj cov ntaub ntawv uas raug rau peb cov neeg siv khoom, khiav cov xwm txheej ntawm lawv, saib cov kev ua tau zoo, cov cim xeeb noj, thiab lwm yam, thiab tshuaj xyuas seb peb thiab peb cov neeg tau txais kev txaus siab rau cov txiaj ntsig zoo li cas lossis tsis. . Thiab lawv ua raws li.

Peb muaj dab tsi

Thaum pib, peb tau sau cov cai rau 1C: Enterprise 8 platform hauv Microsoft Visual Studio. Qhov project pib thaum ntxov 2000s thiab peb muaj Windows nkaus xwb version. Lawm, txij thaum ntawd los cov cai tau nquag tsim, ntau cov txheej txheem tau rov sau dua tshiab. Tab sis txoj cai tau sau raws li 1998 tus qauv, thiab, piv txwv li, peb lub kaum sab xis ntawm lub kaum sab xis tau muab cais los ntawm qhov chaw kom muab tso ua ke ua tiav, zoo li qhov no:

vector<vector<int> > IntV;

Xyoo 2006, nrog rau kev tso tawm ntawm lub platform version 8.1, peb pib txhawb Linux thiab hloov mus rau lub tsev qiv ntawv thib peb. STLPport. Ib qho laj thawj ntawm kev hloov pauv yog ua haujlwm nrog cov kab dav. Hauv peb cov cai, peb siv std::wstring, uas yog raws li hom wchar_t, thoob plaws. Nws qhov loj me hauv Windows yog 2 bytes, thiab hauv Linux lub neej ntawd yog 4 bytes. Qhov no ua rau tsis sib haum xeeb ntawm peb cov kev cai binary ntawm cov neeg siv khoom thiab cov neeg rau zaub mov, nrog rau ntau cov ntaub ntawv tsis tu ncua. Siv cov kev xaiv gcc, koj tuaj yeem qhia meej tias qhov luaj li cas ntawm wchar_t thaum muab tso ua ke kuj yog 2 bytes, tab sis tom qab ntawd koj tuaj yeem tsis nco qab txog kev siv lub tsev qiv ntawv txheem los ntawm lub compiler, vim nws siv glibc, uas nyob rau hauv lem yog compiled rau ib tug 4-byte wchar_t. Lwm qhov laj thawj yog kev ua kom zoo dua ntawm cov chav kawm, kev txhawb nqa rau cov rooj hash, thiab txawm tias emulation ntawm cov ntsiab lus ntawm kev txav mus rau hauv cov thawv, uas peb nquag siv. Thiab ib qho laj thawj ntxiv, raws li lawv hais kawg tab sis tsis kawg, yog txoj hlua ua haujlwm. Peb muaj peb tus kheej chav kawm rau cov hlua, vim ... Vim qhov tshwj xeeb ntawm peb cov software, txoj hlua ua haujlwm tau siv dav heev thiab rau peb qhov no tseem ceeb heev.

Peb txoj hlua yog raws li txoj hlua optimization tswv yim qhia rov qab rau thaum ntxov 2000s Andrei Alexandrescu: koj puas xav tau ntau tus thwjtim?. Tom qab ntawd, thaum Alexandrescu ua haujlwm ntawm Facebook, ntawm nws qhov kev xav, ib kab tau siv hauv Facebook lub cav uas ua haujlwm ntawm cov ntsiab lus zoo sib xws (saib lub tsev qiv ntawv niag ruam).

Peb kab siv ob lub ntsiab optimization technologies:

  1. Rau qhov tseem ceeb luv luv, ib qho kev tsis sib xws hauv cov khoom siv nws tus kheej yog siv (tsis tas yuav tsum tau faib lub cim xeeb ntxiv).
  2. Rau txhua lwm yam, mechanics yog siv Luam rau Sau. Txoj hlua tus nqi yog khaws cia rau hauv ib qho chaw, thiab siv lub txee siv thaum ua haujlwm / hloov kho.

Txhawm rau ua kom lub platform muab tso ua ke, peb tsis suav nrog kev siv kwj los ntawm peb qhov sib txawv ntawm STLPport (uas peb tsis tau siv), qhov no tau muab rau peb txog 20% ​​nrawm dua. Tom qab ntawd peb yuav tsum tau siv tsawg boost. Boost ua rau hnyav siv cov kwj dej, tshwj xeeb tshaj yog nyob rau hauv nws cov kev pabcuam APIs (piv txwv li, rau kev txiav), yog li peb yuav tsum tau hloov kho kom tshem tawm kev siv kwj. Qhov no, nyob rau hauv lem, ua rau nws nyuaj rau peb tsiv mus nyob rau tshiab versions ntawm Boost.

Peb txoj kev

Thaum tsiv mus rau C ++ 14 tus qauv, peb xav txog cov kev xaiv hauv qab no:

  1. Hloov kho STLPport peb hloov kho rau C ++ 14 tus qauv. Qhov kev xaiv yog qhov nyuaj heev, vim tias ... kev txhawb nqa rau STLPport tau txiav tawm xyoo 2010, thiab peb yuav tsum tsim tag nrho nws cov cai ntawm peb tus kheej.
  2. Hloov mus rau lwm qhov kev siv STL tau tshaj C ++ 14. Nws yog qhov xav tau tias qhov kev siv no yog rau Windows thiab Linux.
  3. Thaum muab tso ua ke rau txhua OS, siv lub tsev qiv ntawv tsim rau hauv cov compiler sib raug.

Thawj qhov kev xaiv tau raug tsis lees paub tag nrho vim muaj kev ua haujlwm ntau dhau.

Peb xav txog qhov kev xaiv thib ob rau qee lub sijhawm; suav tias yog tus neeg sib tw libc++, tab sis lub sijhawm ntawd nws tsis ua haujlwm hauv Windows. Txhawm rau chaw nres nkoj libc ++ rau Windows, koj yuav tsum tau ua haujlwm ntau - piv txwv li, sau txhua yam koj tus kheej uas tau ua nrog cov xov, xov synchronization thiab atomicity, txij li libc ++ siv hauv cov cheeb tsam no. POSIX API.

Thiab peb xaiv txoj kev thib peb.

Kev Pauv Hloov

Yog li, peb yuav tsum tau hloov kev siv STLPort nrog cov tsev qiv ntawv ntawm cov khoom sib txuas (Visual Studio 2015 rau Windows, gcc 7 rau Linux, clang 8 rau macOS).

Hmoov zoo, peb cov cai tau sau feem ntau raws li cov lus qhia thiab tsis siv txhua hom kev txawj ntse, yog li kev tsiv mus rau cov tsev qiv ntawv tshiab tau ua tiav zoo, nrog kev pab los ntawm cov ntawv sau uas hloov cov npe ntawm hom, chav kawm, namespaces thiab suav nrog hauv qhov chaw. cov ntaub ntawv. Kev tsiv teb tsaws cuam tshuam txog 10 cov ntaub ntawv (tawm ntawm 000). wchar_t tau hloov los ntawm char14_t; peb txiav txim siab tso tseg kev siv wchar_t, vim char000_t siv 16 bytes ntawm txhua OSes thiab tsis ua txhaum cai sib raug ntawm Windows thiab Linux.

Muaj qee qhov kev lom zem me me. Piv txwv li, hauv STLPPort ib qho iterator tuaj yeem cuam tshuam rau tus taw tes rau lub ntsiab lus, thiab hauv qee qhov chaw hauv peb cov cai no tau siv. Hauv cov tsev qiv ntawv tshiab nws tsis tuaj yeem ua qhov no ntxiv lawm, thiab cov nqe lus no yuav tsum tau txheeb xyuas thiab rov sau dua manually.

Yog li, txoj cai tsiv teb tsaws yog ua tiav, cov cai tau muab tso ua ke rau txhua qhov kev khiav haujlwm. Nws yog lub sijhawm rau kev xeem.

Kev ntsuam xyuas tom qab kev hloov pauv tau pom tias qhov kev poob qis hauv kev ua tau zoo (hauv qee qhov chaw mus txog 20-30%) thiab nce kev nco noj (txog 10-15%) piv rau cov lej qub. Qhov no yog, tshwj xeeb tshaj yog vim qhov kev ua tau zoo ntawm cov hlua txheem. Yog li ntawd, peb rov tau siv peb tus kheej, hloov kho me ntsis kab.

Ib qho nthuav tshwj xeeb ntawm kev siv cov ntim hauv cov tsev qiv ntawv kos tau tshwm sim: khoob (tsis muaj cov ntsiab lus) std:: daim ntawv qhia thiab std:: teeb tsa los ntawm cov tsev qiv ntawv built-in faib cov cim xeeb. Thiab vim qhov kev siv cov yam ntxwv, nyob rau hauv qee qhov chaw hauv cov cai heev ntau ntawm cov ntim khoob ntawm hom no yog tsim. Standard nco ntim tau faib me ntsis, rau ib lub hauv paus ntsiab lus, tab sis rau peb qhov no yog qhov tseem ceeb - nyob rau hauv ib tug xov tooj ntawm cov xwm txheej, peb qhov kev ua tau zoo poob qis thiab nco tau nce (piv rau STLPort). Yog li ntawd, hauv peb cov cai peb tau hloov ob hom ntim ntawm cov tsev qiv ntawv built-in nrog lawv cov kev siv los ntawm Boost, qhov twg cov thawv no tsis muaj qhov tshwj xeeb, thiab qhov no daws qhov teeb meem nrog qeeb thiab nce kev nco noj.

Raws li feem ntau tshwm sim tom qab kev hloov pauv loj hauv cov haujlwm loj, thawj qhov kev ua haujlwm ntawm qhov chaws tsis ua haujlwm yam tsis muaj teeb meem, thiab ntawm no, tshwj xeeb, kev txhawb nqa rau kev debugging iterators hauv Windows kev siv tau los ua ke. Ib kauj ruam dhau los peb tau txav mus tom ntej, thiab los ntawm lub caij nplooj ntoo hlav xyoo 2017 (version 8.3.11 1C: Kev Lag Luam) kev tsiv teb tsaws tau tiav.

Cov txiaj ntsim tau los

Kev hloov mus rau C ++ 14 tus qauv coj peb txog 6 lub hlis. Feem ntau, ib tus neeg tsim khoom (tab sis tsim nyog heev) tau ua haujlwm ntawm qhov project, thiab nyob rau theem kawg cov neeg sawv cev ntawm pab pawg ua haujlwm rau cov chaw tshwj xeeb koom nrog - UI, pawg neeg rau zaub mov, kev txhim kho thiab kev tswj hwm cov cuab yeej, thiab lwm yam.

Txoj kev hloov pauv tau yooj yim heev rau peb txoj haujlwm ntawm kev tsiv mus rau qhov tseeb versions ntawm tus qauv. Yog li, version 1C:Enterprise 8.3.14 (hauv kev txhim kho, tso tawm tau teem tseg rau xyoo tom ntej) twb raug xa mus rau tus qauv C++ 17.

Tom qab kev tsiv teb tsaws chaw, cov neeg tsim khoom muaj ntau txoj kev xaiv. Yog tias ua ntej peb muaj peb tus kheej hloov kho version ntawm STL thiab ib lub npe std, tam sim no peb muaj cov chav kawm ntawv los ntawm cov tsev qiv ntawv built-in compiler hauv std namespace, hauv stdx namespace - peb cov kab thiab ntim tau zoo rau peb cov dej num, hauv kev txhawb nqa - lub qhov tseeb version ntawm boost. Thiab tus tsim tawm siv cov chav kawm uas tsim nyog los daws nws cov teeb meem.

Kev siv "native" ntawm cov neeg tsim qauv txav kuj tseem pab txhim kho (txav constructors) rau ntau chav kawm. Yog tias ib chav kawm muaj tus tsim qauv txav mus thiab cov chav kawm no tau muab tso rau hauv lub thawv, ces STL ua kom zoo dua qhov kev luam ntawm cov khoom hauv lub thawv (piv txwv li, thaum lub thawv nthuav dav thiab nws yuav tsum tau hloov lub peev xwm thiab rov nrhiav dua lub cim xeeb).

Ya hauv cov tshuaj pleev

Tej zaum qhov tsis txaus siab tshaj plaws (tab sis tsis yog qhov tseem ceeb) qhov tshwm sim ntawm kev tsiv teb tsaws yog tias peb tau ntsib nrog kev nce hauv ntim ob files, thiab tag nrho cov txiaj ntsig ntawm kev tsim nrog tag nrho cov ntaub ntawv nruab nrab pib coj mus txog 60-70 GB. Qhov kev coj cwj pwm no yog vim qhov peculiarities ntawm cov tsev qiv ntawv niaj hnub txheem, uas tau dhau los ua qhov tseem ceeb ntawm qhov loj ntawm cov ntaub ntawv tsim tawm. Qhov no tsis cuam tshuam rau kev ua haujlwm ntawm daim ntawv thov sau ua ke, tab sis nws ua rau ntau qhov tsis yooj yim hauv kev txhim kho, tshwj xeeb, nws ua rau lub sijhawm sib sau ua ke. Cov kev cai rau qhov chaw dawb disk ntawm kev tsim cov servers thiab ntawm cov tshuab tsim tawm kuj nce ntxiv. Peb cov neeg tsim khoom ua haujlwm ntawm ob peb lub platform ntawm tib lub sijhawm, thiab ntau pua gigabytes ntawm cov ntaub ntawv nruab nrab qee zaum tsim teeb meem hauv lawv txoj haujlwm. Qhov teeb meem tsis txaus siab, tab sis tsis yog qhov tseem ceeb; peb tau ncua nws txoj kev daws rau tam sim no. Peb tab tom txiav txim siab thev naus laus zis ua ib qho kev xaiv rau kev daws nws kev sib sau ua ke (tshwj xeeb, Google siv nws thaum tsim Chrome browser).

Tau qhov twg los: www.hab.com

Ntxiv ib saib