Hacker News

Na'a mau interfaced 'a e C ++ 'oku 'i ai 'a e filo 'e taha mo e 'ume'umea 'oku 'i ai 'a e filo lahi .

Na'a mau interfaced 'a e C ++ 'oku 'i ai 'a e filo 'e taha mo e 'ume'umea 'oku 'i ai 'a e filo lahi . 'Oku 'omi 'e he 'analaiso kakato ko 'eni 'o e interfaced 'a e sivi fakaikiiki 'o hono ngaahi konga tefito mo e ngaahi nunu'a 'oku lahi ange. Ngaahi Feitu'u Tefito 'o e Tokanga ʻOku fakatefito ʻa e fealēleaʻakí ʻi he: Tefito mech...

12 min read Via antithesis.com

Mewayz Team

Editorial Team

Hacker News
Ko e pou blog kakato 'eni 'a e SEO:

Na'a mau fakafehokotaki 'a e C++ 'oku 'i ai 'a e filo 'e taha mo e 'ume'umea 'oku 'i ai 'a e filo lahi

Ko hono fakafehokotaki 'o e code C++ 'oku 'i ai 'a e filo 'e taha mo e Rust 'oku 'i ai 'a e filo lahi 'oku 'ikai ngata pe 'i he malava — ko e taha ia 'o e ngaahi founga 'aonga taha ke fakaonopooni'i 'a e ngaahi sisitemi tukufakaholo 'o 'ikai ha toe tohi kakato. 'I he Mewayz, Na'a mau tau'i 'a e pole pau ko 'eni 'i he taimi 'oku scaling 'etau 207-module pisinisi OS ke tauhi 'a e kau faka'aonga'i 'o e 138,000, pea na'e liliu fakalukufua 'e he ngaahi ola 'a e founga 'oku tau fakakaukau ai ki he ngaahi sisitemi interoperability.

Ko e hā te ke fakafehokotaki ai ʻa e C++ ʻoku ʻi ai hono ngaahi filo ʻe taha mo e ʻumeʻumea ʻoku ʻi ai hono ngaahi filo lahi?

Ko e lahi taha 'o e ngaahi sisitemi ngaohi 'oku nau 'ave 'a e ngaahi ta'u 'o e C++ code kuo sivi'i 'i he tau. Ko hono toe tohi ʻo e meʻa kotoa pē ʻi he Rust ʻoku ongo fakamānako ʻi he pepá, ka ʻokú ne fakafeʻiloaki mai ha fakatuʻutāmaki lahi mo ha ngaahi māhina ʻo e taimi ʻenisiniá. Ko e founga pragmatic ko e fakalahi 'o e ohi — takai 'oku 'i ai 'a e C ++ logic lolotonga hono offloading 'o e ngaahi ngaue concurrency-mamafa ki he sipinga 'o e 'ea 'o e 'ume'umea.

'I he'etau me'a, na'e lele falala'anga 'a e ngaahi modules 'o e pisinisi tefito 'i he C ++ 'o e threaded 'e taha 'i he ngaahi ta'u. Naʻa nau tokangaʻi ʻa e fakahokohoko ʻo e ngaahi ngāué, faʻu ʻo e ngaahi tohí, mo e ngaahi fakafuofua fakapaʻangá. Ka 'i he tupulaki 'etau user base 'o fakalaka 'i he 100K, na'a mau fie ma'u 'a e ngaue 'a e fakamatala fakafehoanaki, tokanga'i 'o e API concurrent, mo e pule'i malu 'o e vahevahe-siteiti. Na'e 'omi 'e he ngaahi 'ulungaanga 'o e Send mo e Sync 'a e Rust 'a e ngaahi fakapapau'i 'o e taimi fakatahataha'i 'oku 'ikai lava ke 'oatu 'e he C++ ta'e 'i ai ha 'atita tohi lahi.

Ko e tefito'i fakalotolahi ko e fakasi'isi'i 'o e fakatu'utamaki. 'Oku ke tauhi 'a e me'a 'oku ngaue, pea 'oku ke tanaki atu 'a e me'a 'oku me'afua — 'o 'ikai ke va'inga pa'anga ho'o codebase kotoa 'i ha hiki 'e 'ikai nai ke 'osi.

'Oku anga fefe 'a e ngaue mo'oni 'a e Fakangatangata 'o e FFI?

Ko e Interface 'o e Ngaue 'i Muli (FFI) 'i he vaha'a 'o e C ++ mo e 'ume'umea 'oku ngaue 'o fakafou 'i he ngaahi fakamo'oni hingoa 'o e ngaue 'oku fe'unga mo e C. 'Oku fakahaa'i 'e he ngaahi poloka 'o e tu'a "C" 'a e Rust 'a e ngaahi ngaue 'e lava ke ui fakahangatonu 'e he C++, pea mo e vice versa. 'Oku 'asi mai 'a e pole mahu'inga 'i he taimi 'oku fie ma'u ai 'e he taimi lele 'o e Rust 'a e ngaahi filo lahi ke ui malu 'a e code C++ 'o e filo 'e taha.

Na'a mau solova 'eni 'o faka'aonga'i ha 'atakai fakatapui:

  • Ko e fakahoko 'o e C++ 'oku fakangatangata 'e he filo: 'Oku funneled 'a e ngaahi ui kotoa pe 'o e C++ 'o fakafou 'i ha filo fakatapui 'e taha 'o faka'aonga'i ha founga 'oku paasi 'a e fekau, 'o fakapapau'i 'oku 'ikai 'aupito ke maumau'i 'a e invariant 'o e filo 'e taha.
  • Layer 'o e halafakakavakava 'o e 'ume'umea: 'Oku fakahu 'e he ngaahi ngaue 'a e Tokio 'a e ngaue ki he fakahoko 'o e C++ pea tatali ki he ola 'o fakafou 'i he ngaahi halanga 'o e oneshot, 'o tauhi 'a e tafa'aki 'o e 'ume'umea ke asynchronous kakato.
  • Pule'i 'o e faka'ilonga 'o e Opaque: 'Oku takai 'a e ngaahi me'a 'o e C++ 'i he ngaahi fokotu'utu'u 'o e Rust 'oku nau fakahoko 'a e Drop ki he fakama'a fakapapau'i, 'o ta'ofi 'a e ngaahi 'uhinga 'o e manatu 'i he tafa'aki 'o e ngata'anga 'o e lea.
  • Fakahokohoko 'i he ngata'anga: 'Oku fakahokohoko 'a e ngaahi fokotu'utu'u 'o e fakamatala faingata'a ki he FlatBuffers 'i he la'i FFI, faka'ehi'ehi mei he fakafehoanaki 'o e fokotu'utu'u 'o e struct vaivai mo faka'ata 'a e tupulaki tau'ataina 'o e tafa'aki takitaha.
  • Ko e fakamavahe'i 'o e manavasi'i: 'Oku takai 'e he catch_unwind 'a e Rust 'a e poini hū kotoa pe 'o e FFI koe'uhi ke 'oua na'a teitei kolosi ha manavasi'i 'i he ngata'anga 'o e lea, 'a ia 'e hoko ko ha 'ulungaanga ta'efaka'uhinga'i.

Na'e 'omi 'e he sipinga ko 'eni 'a e throughput 'o e multi-threaded Rust mo e falala'anga 'o e fakamo'oni'i 'o e C++ logic — 'o 'ikai toe tohi ha laine 'e taha 'o e ngaahi tu'utu'uni pisinisi 'uluaki.

Ko e hā ‘a e ngaahi tauhele lalahi taha ke faka‘ehi‘ehi mei aí?

Ko e fehalaaki fakatu'utamaki taha ko e fakakaukau 'oku thread-safe 'a e code C++ ka 'oku 'ikai. 'E fakatupu 'e he tu'unga fakamamani lahi, ngaahi kehekehe static, mo e ngaahi ui 'o e laipeli 'ikai reentrant 'a e ngaahi fe'auhi 'o e fakamatala 'oku 'ikai lava ke 'ilo'i 'e he compiler 'o e Rust 'i he tafa'aki 'o e ngata'anga 'o e FFI. ʻOku tuʻu ʻa e ngaahi fakapapau malu ʻa e Rust ʻi he poloka ʻoku ʻikai malu — ko e meʻa kotoa pē ʻi lotó ko hoʻo fatongia ia.

'Ilo mahu'inga: 'Oku fakapapau'i 'e he 'ume'umea 'a e malu 'o e manatu 'i loto 'i hono code 'o'ona, ka ko e momeniti 'oku ke kolosi ai ha ngata'anga 'o e FFI ki he C ++, 'Oku ke ma'u tofi'a 'i he palopalema kotoa pe 'o e thread-malu 'oku ma'u 'e he C ++. Ko e 'atakai 'oku takatakai 'i he ngata'anga ko ia 'oku mahu'inga ange ia 'i he code 'i he ongo tafa'aki 'o ia.

💡 DID YOU KNOW?

Mewayz replaces 8+ business tools in one platform

CRM · Invoicing · HR · Projects · Booking · eCommerce · POS · Analytics. Free forever plan available.

Start Free →

Ko e tauhele angamaheni 'e taha ko e pule'i 'o e mo'ui. 'Oku 'ikai ke kau 'a e ngaahi me'a C ++ 'i he sivi 'o e no 'a e Rust. Kapau 'oku tuku hifo 'e he 'ume'umea ha fakamo'oni lolotonga 'oku kei pukepuke 'e he C ++ ha faka'ilonga, 'Oku ke ma'u 'a e faka'aonga'i-hili-ta'etotongi 'a e ngaahi bugs 'oku brutally faingata'a ke fakatotolo'i. Na'a mau fakafepaki'i 'eni 'aki hono fakamālohi'i 'o e semantics 'o e 'ea fefeka: 'Oku ma'u ma'u pe 'e he ngaahi me'a 'o e C ++ 'a e takai 'o e 'ume'umea 'e taha tonu, pea 'oku 'alu 'a e hū vahevahe 'i he Arc-fakava'e 'i he lau 'o e lave 'i he tafa'aki 'o e 'ume'umea.

Fakahoko-poto, 'oku fakatupu 'e he ngaahi ui FFI 'oku fu'u lahi 'a e 'olunga mei he liliu 'o e tu'unga mo e serialization. 'Oku mau batch 'a e ngaahi ngaue 'i ha feitu'u pe 'e lava, 'o 'ave ha laine 'o e ngaahi me'a ngaue ki he C ++ executor kae 'ikai ko hono fai 'o e ngaahi ui fakafo'ituitui 'o e kolosi-lea.

Na'e anga fefe 'a e ngaue 'a e founga ko 'eni 'i he ngaohi'anga koloa?

Hili hono fakahoko 'o e hybrid 'o e 'atakai 'i he tafa'aki 'o 'etau tu'unga, na'a mau fua 'a e ngaahi fakalelei'i sima. Kole throughput fakalahi 'e he 3.4x ki he ngaahi modules na'e bottlenecked kimu'a 'i he hokohoko 'o e C ++ ngaue. Na'e holo hifo 'a e latency 'o e hiku (p99) 'aki 'a e 61% koe'uhi ko e taimi lele 'o e async 'o e 'ume'umea 'e lava ke ne fakahoko 'a e ngaahi kole tau'ataina 'i he taimi tatau lolotonga ia 'oku tokanga'i 'e he C ++ 'a e ngaahi ngaue 'o e computation-mamafa 'i hono filo fakatapui.

Ko e me'a 'oku mahu'inga ange, na'e 'ikai ha'amau ngaahi bugs fekau'aki mo e concurrency 'i he 'uluaki mahina 'e ono 'o e ngaohi. Na'e hanga 'e he sipinga 'o e filo-confinement 'o 'ai ke structurally 'ikai lava ke ui 'a e C ++ code mei he ngaahi filo lahi, lolotonga ia 'oku ta'ofi 'e he sisitemi fa'ahinga 'o e 'ume'umea 'a e ngaahi fe'auhi 'o e fakamatala 'i hono tafa'aki 'o e ngata'anga. Ko ha fakalakalaka lahi 'eni 'i he'etau founga kimu'a 'o e feinga ke tanaki atu 'a e threading ki he C ++ mo e mutexes, 'a ia na'e fakatupu 'e he ngaahi me'a na'e hoko 'i he tu'unga 'o e fe'auhi 'e tolu 'i ha kuata 'e taha.

Na'e lipooti foki 'e he timi 'enisinia 'a e ngaahi siakale iteration vave ange. Na'e lava ke langa ha ngaahi fotunga fo'ou 'i he 'uli mo e poupou kakato 'o e concurrency, lolotonga ia 'oku 'i ai 'a e C ++ modules hokohoko atu 'a e lele 'o 'ikai ha fakalelei'i. Ko e founga fakalahi ko 'eni na'e 'uhinga ia na'e 'ikai ke tau ma'u ha hiki "big bang" 'oku fakatu'utamaki lahi — ko e fakalakalaka tu'uma'u pe, 'oku lava ke fua.

Ngaahi Fehuʻi ʻoku Faʻa ʻEke

'E lava ke ui 'e he Rust 'a e ngaahi laipeli C++ 'oku 'i ai hono filo 'e taha 'o 'ikai ha fakalelei'i?

'Io, ka kuo pau ke ke fakapapau'i 'oku hoko 'a e ngaahi ui kotoa pe ki he laipeli ko ia mei ha filo 'e taha. Ko e sipinga angamaheni ko hono fa'u ha filo executor fakatapui 'oku serializes 'a e ngaahi ui kotoa pe 'a e C ++ 'o fakafou 'i ha halanga. 'Oku 'oatu 'e he ngaahi ngaue async 'a e 'ume'umea 'a e ngaahi kole pea tatali ki he ngaahi tali 'o 'ikai ke ta'ofi 'a e taimi lele 'o e ngaahi filo lahi. Ko e C++ code 'iate ia pe 'oku 'ikai fie ma'u ha ngaahi liliu — 'oku fakahoko kakato 'a e fakangatangata 'o e malu 'i he tafa'aki 'o e Rust.

'Oku mahu'inga fe'unga 'a e totongi 'o e FFI ke ne uesia 'a e fakahoko 'o e polokalama?

Ko e ngaahi ui fakafo'ituitui FFI 'oku si'isi'i taha 'a e 'olunga — 'oku angamaheni 'aki 'i lalo 'i he 10 nanoseconds ki ha ui ngaue faingofua. Ka neongo ia, serialization 'o e ngaahi fokotu'utu'u 'o e fakamatala faingata'a mo e synchronization 'o e filo 'i he ngata'anga 'oku tanaki atu kapau 'oku ke fai ha ngaahi ui 'e lauiafe 'o e fine-grained. Ko e ngaahi ngaue 'o e batching mo hono faka'aonga'i 'o e ngaahi fotunga 'o e serialization 'o e tatau 'o e zero hange ko e FlatBuffers pe Cap'n Proto 'oku ne tauhi 'a e 'olunga 'o e ta'e'aonga na'a mo e 'i he fua.

'Oku totonu ke tau toe tohi 'etau C++ codebase 'i he Rust kae 'ikai ko e fakafehokotaki?

Ki he lahi taha 'o e ngaahi timi, ko e interfacing fakalahi ko e hala malu mo vave ange ia. 'Oku fakafe'iloaki 'e ha toe tohi kakato 'a e ngaahi mahina 'o e fakatu'utamaki 'o e 'enisinia 'oku 'ikai ha mahu'inga 'oku fehangahangai mo e tokotaha faka'aonga'i kae 'oua kuo fakakakato. 'Oku faka'ata 'e he interfacing ke ke vaka 'a e ngaahi fakalelei'i 'i he taimi pe ko ia, fakamo'oni'i 'a e founga 'o e 'ume'umea 'i he ngaohi, pea hiki modules 'i he taimi 'e taha 'o makatu'unga 'i he feitu'u 'oku 'omi ai 'e he concurrency 'a e uesia lahi taha. Toe tohi pe 'a e ngaahi module 'oku lahi ange ai 'a e fakamole ki hono tauhi 'o e ngata'anga 'o e FFI 'i he fakamole ki hono toe tohi.

'I he Mewayz, 'Oku mau langa 'a e ngaahi langa fakalakalaka 'oku scales — fakatou'osi 'i he fakatekinikale mo e fakangaue. 'Oku tokoni 'etau 207-module pisinisi OS 138,000 ngaahi timi ke fakalele 'a e ngaahi ngaue 'atamai lelei ange 'o kamata 'i he $19/mahina. Pe 'oku ke pule'i 'a e ngaahi poloseki, faka'otometiki 'a e ngaahi ngaue, pe scaling ho'o pisinisi, 'Oku fe'unga 'a e Mewayz mo e founga 'oku ke ngaue ai. Kamata ho'o 'ahi'ahi ta'etotongi 'i he app.mewayz.com pea vakai ki he me'a 'e lava ke fai 'e ha OS pisinisi fakaonopooni ma'a ho'o timi.

'E lava ke ui 'e he 'ume'umea 'a e ngaahi laipeli C ++ 'oku 'i ai 'a e filo 'e taha 'o 'ikai ha fakalelei'i?","tali Tali":{"@fa'ahinga":"Tali","tohi":"'Io, ka kuo pau ke ke fakapapau'i 'oku hoko 'a e ngaahi ui kotoa pe ki he laipeli ko ia mei ha filo 'e taha. Ko e sipinga angamaheni ko hono fa'u ha filo fakahoko fakatapui 'oku serializes 'a e ngaahi ui kotoa pe 'a e C ++ 'o fakafou 'i ha reponses mo e awaync'. multi-threaded runtime. Ko e C ++ code 'iate ia pe 'oku 'ikai fie ma'u ha ngaahi liliu \u2014 'oku fakahoko kakato 'a e fakangatangata 'o e malu 'i he tafa'aki 'o e Rust."}},{"@type":"Fehu'i","hingoa":"'Oku mahu'inga fe'unga 'a e FFI 'o e 'olunga ke ne uesia 'a e tohi kole fakahoko?","talitali":{"@fa'ahinga":"Tali","tohi":"Ko e ngaahi ui FFI fakafo'ituitui 'oku 'i ai 'a e si'isi'i taha 'o e 'olunga \u2014 angamaheni 'i lalo 'i he 10 nanoseconds ki ha ui ngaue faingofua Ka neongo ia, serialization 'o e ngaahi fokotu'utu'u 'o e fakamatala faingata'a mo e synchronization 'o e filo 'i he ngata'anga 'o e ca- thousand. 'oku faka'aonga'i 'a e ngaahi fotunga 'o e serialization 'o e zero-kape hange ko e FlatBuffers pe Cap'n Proto 'oku ne tauhi 'a e 'olunga 'o e 'olunga 'oku 'ikai ke fu'u mahu'inga na'a mo e 'i he me'afua." incremental interfacing ko e hala malu ange mo vave ange.' tauhi"}}]}

Try Mewayz Free

All-in-one platform for CRM, invoicing, projects, HR & more. No credit card required.

Related Guide

HR Management Guide →

Manage your team effectively: employee profiles, leave management, payroll, and performance reviews.

Start managing your business smarter today

Join 30,000+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 30,000+ businesses using Mewayz. Free forever plan — no credit card required.

Start Free Trial →

Ready to take action?

Start your free Mewayz trial today

All-in-one business platform. No credit card required.

Start Free →

14-day free trial · No credit card · Cancel anytime