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:

  • Taupānga Pūmau Tūmau, ka rere i runga i Windows me Linux
  • Kaihoko, mahi tahi me te tūmau mā http(s) tana ake kawa rua ranei, ka mahi i runga i Windows, Linux, macOS
  • Kiritaki Tukutuku, rere i roto i te Chrome, Internet Explorer, Microsoft Edge, Firefox, Safari pūtirotiro (i tuhia ki te JavaScript)
  • Te taiao whanaketanga (Whirihora), mahi i runga i Windows, Linux, macOS
  • Nga taputapu whakahaere tūmau tono, rere i runga i Windows, Linux, macOS
  • Kiritaki pūkoro, te hono ki te tūmau mā te (ngā) http, ka mahi i runga i ngā pūrere pūkoro e whakahaere ana i te Android, iOS, Windows
  • Pūhara Pūkoro — he anga mo te hanga tono pūkoro tuimotu me te kaha ki te tukutahi, rere i runga i te Android, iOS, Windows
  • Te taiao whanaketanga 1C: Utauta Whakawhanake Pakihi, tuhia ki Java
  • Tūmau Pūnaha Whakawhitiwhiti

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.

Me pehea ta matou whakamaoritanga 10 miriona rarangi o te waehere C++ ki te paerewa C++14 (katahi ki C++17)

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:

  1. Mo nga uara poto, ka whakamahia he parepare o roto o te ahanoa aho (kaore e hiahia toha atu mahara).
  2. 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:

  1. 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.
  2. 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.
  3. 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).

Source: will.com

Tāpiri i te kōrero