ProHoster > Блог > Whakahaerenga > Me pehea ta matou whakamaoritanga 10 miriona rarangi o te waehere C++ ki te paerewa C++14 (katahi ki C++17)
Me pehea ta matou whakamaoritanga 10 miriona rarangi o te waehere C++ ki te paerewa C++14 (katahi ki C++17)
I etahi wa i mua (i te ngahuru o te tau 2016), i te wa o te whakawhanaketanga o te waahanga o muri mai o te 1C: Te turanga hangarau Enterprise, i puta ake te patai i roto i te roopu whanaketanga mo te tautoko i te paerewa hou. C ++ 14 i roto i to tatou waehere. Ko te whakawhiti ki tetahi paerewa hou, i whakaarohia e matou, ka taea e matou te tuhi i nga mea maha ake i te huatau, te ngawari me te pono, me te whakangawari i te tautoko me te tiaki i te waehere. A kaore he mea whakamiharo i roto i te whakamaoritanga, mena karekau mo te tauine o te turanga waehere me nga ahuatanga motuhake o to taatau waehere.
Mo te hunga kaore i te mohio, ko te 1C:Enterprise he taiao mo te whakawhanaketanga tere o nga tono pakihi whakawhiti-whakawhiti me te wa mahi mo o raatau mahi i runga i nga OS rereke me nga DBMS. I roto i nga tikanga whanui, kei roto i te hua:
Ka ngana matou ki te tuhi i te waehere kotahi mo nga punaha whakahaere rereke ka taea - ko te turanga waehere tūmau he 99% noa, ko te turanga waehere kiritaki kei te 95%. Ko te 1C:Ko te papahanga hangarau hinonga kua tuhia ki te C++ me nga tohu tohu tohu kei raro nei:
10 miriona raina o te waehere C++,
14 mano nga konae,
60 mano nga karaehe,
te hawhe miriona tikanga.
A ko enei mea katoa me whakamaori ki C++14. I tenei ra ka korero matou ki a koe me pehea i mahi ai matou me nga mea i pa ki a matou i roto i te tukanga.
Whakakahoretanga
Ko nga mea katoa i tuhia i raro nei mo te mahi puhoi/tere, (kaore) te nui o te kohi mahara ma te whakatinanatanga o nga karaehe paerewa i roto i nga momo whare pukapuka he mea kotahi: he pono tenei mo tatou. Ka taea pea ko nga whakatinanatanga paerewa ka tino pai mo o mahi. I timata mai i a maatau ake mahi: i tango i nga raraunga e tino rite ana mo o taatau kiritaki, i whakahaere i nga ahuatanga angamaheni ki runga i a raatau, i titiro ki nga mahi, te nui o te mahara i pau, me era atu, ka tātarihia mena i makona matou ko o taatau kaihoko ki enei hua kaore ranei. . A i mahi ratou i runga i.
Ko nga mea i a matou
I te timatanga, i tuhia e matou te waehere mo te 1C:Enterprise 8 turanga i roto i te Microsoft Visual Studio. I timata te kaupapa i te timatanga o te 2000s a he putanga Windows-anake ta matou. Ko te tikanga, mai i tera wa kua kaha te whakawhanaketanga o te waehere, he maha nga tikanga kua oti te tuhi ano. Engari i tuhia te waehere i runga i te paerewa 1998, a, hei tauira, i wehea o tatou taiapa koki matau e nga mokowhiti kia angitu ai te whakahiato, penei:
vector<vector<int> > IntV;
I te tau 2006, me te tukunga o te tüäpapa putanga 8.1, i timata mätou ki te tautoko i a Linux ka huri ki te whare pukapuka paerewa tuatoru. STLPort. Ko tetahi take mo te whakawhiti ko te mahi me nga raina whanui. I roto i ta maatau waehere, ka whakamahia e matou te std::wstring, i runga i te momo wchar_t, puta noa. Ko tona rahi i roto i te Matapihi he 2 paita, kei Linux te taunoa he 4 paita. Na tenei i kore e hototahi o a maatau kawa-rua i waenga i te kaihoko me te kaimau, tae atu ki nga momo raraunga pumau. Ma te whakamahi i nga whiringa gcc, ka taea e koe te tohu ko te rahi o te wchar_t i te wa o te whakahiato he 2 paita, engari ka wareware koe ki te whakamahi i te whare pukapuka paerewa mai i te kaitoi, na te mea ka whakamahia te glibc, ka whakahiatohia mo te 4-paita wchar_t. Ko etahi atu take he pai ake te whakatinanatanga o nga karaehe paerewa, te tautoko mo nga ripanga hash, tae atu ki te peehi i nga kupu o te neke ki roto ipu, i kaha whakamahia e matou. A ko tetahi atu take, ko ta ratou e kii nei ko te mahi aho. I a matou ake akomanga mo nga aho, na te mea... Na nga mea motuhake o a maatau rorohiko, he tino whanui te whakamahi i nga mahi aho, a, he mea nui tenei ki a matou.
Ko ta matou aho i ahu mai i nga whakaaro arotautanga aho i whakapuakihia i nga tau tuatahi o te 2000 Andrei Alexandrescu. I muri mai, i te wa e mahi ana a Alexandrescu ki Facebook, i runga i tana whakaaro, i whakamahia he raina i roto i te miihini Facebook e mahi ana i runga i nga tikanga rite (tirohia te whare pukapuka. wairangi).
I whakamahia e ta maatau raina nga hangarau arotautanga matua e rua:
Mo nga uara poto, ka whakamahia he parepare o roto o te ahanoa aho (kaore e hiahia toha atu mahara).
Mo etahi atu katoa, ka whakamahia nga miihini Tārua ki te Tuhituhi. Ka penapenahia te uara aho ki te waahi kotahi, ka whakamahia he porotiti tohutoro i te waa taumahi/whakarereketanga.
Kia tere ake te whakahiato papaaho, ka whakakorehia e matou te whakatinanatanga o te awa mai i ta maatau momo STLPort (kaore i whakamahia e matou), na tenei i nui ake te 20% o te whakahiato. I muri mai he iti noa ta matou whakamahi whakanui. He kaha te whakamahi a Boost i te awa, ina koa i roto i ana API ratonga (hei tauira, mo te takiuru), no reira me whakarereke e matou ki te tango i te whakamahi i te awa. Na tenei, he uaua ki a maatau te heke ki nga momo putanga hou o Boost.
Ara tuatoru
I te neke ki te paerewa C++14, i whakaarohia e matou nga whiringa e whai ake nei:
Whakapai ake i te STLPort i whakarereketia e matou ki te paerewa C++14. He tino uaua te whiringa, no te mea... i whakamutua te tautoko mo STLPort i te tau 2010, a ma matou ano e hanga ona waehere katoa.
Te whakawhiti ki tetahi atu whakatinanatanga STL e hototahi ana ki te C++14. Ko te tino hiahia mo tenei whakatinanatanga mo Windows me Linux.
I te wa e whakahiato ana mo ia OS, whakamahia te whare pukapuka i hangaia ki roto i te whakahiato e rite ana.
Ko te whiringa tuatahi i paopao tonu na te nui o te mahi.
I whakaaro matou mo te waahanga tuarua mo etahi wa; ka whakaarohia hei kaitono libc++, engari i taua wa kaore i mahi i raro i te Matapihi. Hei kawe i te libc++ ki Windows, he maha nga mahi - hei tauira, tuhia nga mea katoa e pa ana ki nga miro, te tukutahi miro me te atomicity, i te mea ka whakamahia te libc++ ki enei waahi. API POSIX.
A i whiriwhiria e matou te huarahi tuatoru.
Whakawhitinga
Na, me whakakapi e matou te whakamahi i te STLPort me nga whare pukapuka o nga kaitoi e rite ana (Visual Studio 2015 mo Windows, gcc 7 mo Linux, clang 8 mo macOS).
Waimarie, ko ta matou waehere i tuhia te nuinga i runga i nga aratohu me te kore i whakamahi i nga momo tinihanga mohio katoa, no reira he pai te haere o te heke ki nga whare pukapuka hou, me te awhina o nga tuhinga tuhi i whakakapi i nga ingoa o nga momo, nga karaehe, nga waahi ingoa me te whakauru ki te puna. kōnae. I pa te hekenga ki te 10 nga konae puna (mai i te 000). wchar_t i whakakapihia e char14_t; i whakatau matou ki te whakarere i te whakamahi wchar_t, na te mea char000_t e 16 paita i runga i nga OS katoa kaore e pahuatia te hototahitanga waehere i waenga i a Windows me Linux.
I reira etahi haerenga iti. Hei tauira, i roto i te STLPort ka taea te tuku i tetahi kaitoro ki tetahi tohutoro ki tetahi huānga, a i etahi waahi i roto i ta maatau waehere i whakamahia tenei. I roto i nga whare pukapuka hou kua kore e taea te mahi, a me wetewetehia enei waahanga me te tuhi ano i a ringa.
Na, kua oti te hekenga waehere, kua whakaemihia te waehere mo nga punaha whakahaere katoa. Kua tae ki te wa mo nga whakamatautau.
Ko nga whakamatautau i muri i te whakawhitinga i whakaatu i te heke o te mahi (i etahi waahi ki te 20-30%) me te piki ake o te kai mahara (tae atu ki te 10-15%) i whakaritea ki te putanga tawhito o te waehere. Ko tenei, ina koa, na te mahi iti o nga aho paerewa. No reira, me whakamahi ano i a maatau ake raina, paku whakarereketia.
I kitea ano tetahi ahuatanga whakamere o te whakatinanatanga o nga ipu ki roto i nga whare pukapuka whakauru: kau (kaore he huānga) std::map me te std::set mai i nga wharepukapuka kua whakauruhia ka toha te mahara. Na na nga ahuatanga whakatinanatanga, i etahi waahi kei roto i te waehere he maha nga ipu kore o tenei momo ka hangaia. He iti te tohatoha o nga ipu mahara, mo te huanga pakiaka kotahi, engari mo matou he mea tino nui tenei - i roto i te maha o nga ahuatanga, ka tino heke a maatau mahi, ka piki te kai mahara (whakaritea ki te STLPort). Na reira, i roto i ta maatau waehere i whakakapihia e matou enei momo ipu e rua mai i nga whare pukapuka kua oti te hanga me o raatau whakatinanatanga mai i te Boost, kaore he ahuatanga o enei ipu, a na tenei i whakaoti te raru o te puhoi me te piki haere o te mahara.
I te nuinga o nga wa i muri i nga huringa nui i roto i nga kaupapa nui, kaore i pai te mahi tuatahi o te waehere puna me te kore he raru, a, i konei, ina koa, ko te tautoko mo te whakakore i nga kaitoro i roto i te whakatinanatanga Windows i uru mai. Ma te hikoi i te anga whakamua, ka tae ki te puna o te tau 2017 (putanga 8.3.11 1C:Enterprise) kua oti te heke.
Ngā putanga
Ko te whakawhiti ki te paerewa C++ 14 i pau te 6 marama. Ko te nuinga o nga wa, kotahi (engari tino tino tohu) te kaiwhakawhanake i mahi ki te kaupapa, a, i te wa whakamutunga, ko nga mangai o nga roopu e whakahaere ana i nga waahanga motuhake i uru atu ki roto - UI, kahui tūmau, taputapu whanaketanga me te whakahaere, aha atu.
Na te whakawhitinga i tino whakangwarihia a maatau mahi mo te heke ki nga putanga hou o te paerewa. No reira, ko te putanga 1C:Enterprise 8.3.14 (kei te whakawhanaketanga, kua whakaritea mo te timatanga o te tau e whai ake nei) kua whakawhitia ki te paerewa C++17.
I muri i te hekenga, he maha atu nga whiringa a nga kaihanga. Mena i mua ake nei i a maatau ake te putanga whakarereke o STL me tetahi mokowāingoa std, inaianei kei a matou nga karaehe paerewa mai i nga whare pukapuka whakahiato i hangaia i roto i te mokowāingoa std, i roto i te mokowāingoa stdx - ko o maatau raina me nga ipu kua arotauhia mo a maatau mahi, hei whakanui - te putanga hou o te whakanui. A ka whakamahia e te kaiwhakawhanake nga karaehe e tino pai ana ki te whakaoti i ona raru.
Ko te whakatinanatanga "maori" o nga kaihanga nekehanga ka awhina ano i te whanaketanga (neke nga kaihanga) mo te maha o nga karaehe. Mēnā he kaihanga nekehanga tētahi karaehe, ā, ka tukuna tēnei karaehe ki roto i te ipu, ka arotauhia e te STL te kape o nga huānga o roto o te ipu (hei tauira, ina whakawhanuihia te ipu, me whakarereke te kaha me te huri i te mahara).
Pupuhi i te hinu
Akene ko te mea tino kino (engari ehara i te mea tino nui) o te hekenga ko te pikinga o te rōrahi. obj kōnae, a ko te hua katoa o te hanga me nga konae takawaenga katoa ka tiimata te 60-70 GB. Ko tenei whanonga na nga ahuatanga o nga whare pukapuka paerewa hou, kua iti ake te aro ki te rahi o nga konae ratonga kua hangaia. Kaore tenei e pa ki te mahi o te tono kua whakaemihia, engari he maha nga raruraru i roto i te whakawhanaketanga, ina koa, ka piki ake te wa whakahiato. Kei te piki haere hoki nga whakaritenga mo te mokowā kōpae kore utu i runga i nga kaiwhakarato hanga me nga miihini kaiwhakawhanake. E mahi ana a maatau kaiwhakawhanake i runga i nga momo putanga maha o te papaahoa whakarara, a he maha nga rau gigabytes o nga konae takawaenga i etahi wa ka raru i a raatau mahi. He kino te raru, engari ehara i te mea nui; kua hikitia e matou tana otinga mo naianei. Kei te whakaarohia e matou ko te hangarau tetahi o nga whiringa hei whakaoti hanga kotahitanga (ina koa, ka whakamahia e Google i te wa e whakawhanake ana i te tirotiro Chrome).