Hacker News

Nou koòdone yon sèl-threaded C++ ak milti-threaded Rust

Nou koòdone yon sèl-threaded C++ ak milti-threaded Rust Analiz konplè sa a nan koòdone ofri egzamen detaye sou eleman debaz li yo ak enplikasyon pi laj. Zòn kle nan konsantre Diskisyon an santre sou: Nwayo mech ...

8 min read Via antithesis.com

Mewayz Team

Editorial Team

Hacker News
Men pòs blog SEO konplè a:

Nou koòdone yon sèl-Threaded C++ ak milti-Threaded Rust

Entèfas kòd C++ yon sèl-thread ak milti-thread Rust se pa sèlman posib - li se youn nan fason ki pi pratik yo modènize sistèm eritaj san yon re-ekri konplè. Nan Mewayz, nou te abòde defi egzak sa a lè nou te monte eksplwatasyon biznis 207 modil nou an pou sèvi 138,000 itilizatè, e rezilta yo te chanje fondamantalman fason nou panse sou entèoperabilite sistèm yo.

Poukisa ou ta koòdone yon sèl-Threaded C++ ak milti-Threaded rouye?

Pifò sistèm pwodiksyon pote plizyè ane nan kòd C++ ki teste batay la. Reekri tout bagay nan Rust son atiran sou papye, men li prezante gwo risk ak mwa nan tan jeni. Apwòch pragmatik la se adopsyon incrémentielle — vlope lojik C++ ki deja egziste pandan y ap dechaje kantite travay ki chaje ak konkourans nan modèl posesyon Rust la.

Nan ka nou an, modil lojik biznis debaz yo te kouri seryezman nan yon sèl-threaded C++ pou plizyè ane. Yo te okipe pwosesis travay sekans, jenerasyon dokiman, ak kalkil finansye. Men, kòm baz itilizatè nou an te grandi pase 100K, nou te bezwen tretman done paralèl, manyen API konkouran, ak jesyon sekirite pataje eta. Karakteristik Voye ak Senkronize Rust te ban nou garanti konkou tan konpile ke C++ tou senpleman pa t 'kapab ofri san odit manyèl anpil.

Motivasyon kle a se rediksyon risk. Ou kenbe sa ki fonksyone, epi ou ajoute sa ki echèl - san yo pa jwe tout kod ou sou yon migrasyon ki ta ka pa janm fini.

Kijan FFI Boundary la travay aktyèlman?

Entèfas Fonksyon Etranjè (FFI) ant C++ ak Rust opere atravè siyati fonksyon C-konpatib. Blòk ekstèn "C" Rust yo ekspoze fonksyon ke C++ ka rele dirèkteman, ak vis vèrsa. Defi kritik la parèt lè exécution milti-threaded Rust bezwen envoke kòd C++ yon sèl-threaded san danje.

Nou rezoud sa a lè l sèvi avèk yon achitekti devwe:

  • Ekzekitè C++ ki limite nan fil la: Tout apèl C++ yo kondui atravè yon sèl fil dedye lè l sèvi avèk yon chanèl ki pase mesaj, pou asire invariant yon sèl fil pa janm vyole.
  • Rust async bridge layer: Travay Tokio soumèt travay bay egzekitè C++ la epi tann rezilta atravè chanèl oneshot, kenbe bò Rust konplètman asynchrone.
  • Jesyon pointeur opak: Objè C++ yo vlope nan estrikti Rust ki aplike Drop pou netwayaj detèminist, pou anpeche koule memwa atravè fwontyè langaj la.
  • Serializasyon nan fwontyè a: Estrikti done konplèks yo serialize nan FlatBuffers nan kouch FFI a, pou evite matche estrikti frajil ak pèmèt evolisyon endepandan nan chak bò.
  • Izolasyon panik: catch_unwind Rust anvlope chak pwen antre FFI pou yon panik pa janm travèse fwontyè lang lan, ki ta yon konpòtman ki pa defini.

Modèl sa a te ban nou pwodiksyon milti-threaded Rust ak fyab nan lojik C++ ki pwouve - san yo pa reekri yon sèl liy nan règ biznis orijinal yo.

Ki pi gwo enkonvenyans pou evite?

Erè ki pi danjere a se sipoze kòd C++ san danje lè li pa. Eta mondyal, varyab estatik, ak apèl bibliyotèk ki pa reantre yo pral lakòz kous done ke du Rust a pa ka detekte atravè fwontyè FFI a. Garanti sekirite Rust kanpe nan blòk ensekirite — tout bagay ki andedan se responsablite w.

Insight kle: Rust garanti sekirite memwa nan pwòp kòd li a, men moman ou travèse yon fwontyè FFI nan C++, ou eritye tout pwoblèm sekirite fil ke C++ genyen. Achitekti alantou fwontyè sa a enpòtan plis pase kòd ki sou chak bò li a.

💡 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 →

Yon lòt enkonvenyans komen se jesyon tout lavi. Objè C++ yo pa patisipe nan chèk prete Rust la. Si Rust lage yon referans pandan C++ toujou kenbe yon endikasyon, ou jwenn ensèk itilize apre-gratis ki brital difisil pou fè dyagnostik. Nou abòde sa a lè nou aplike semantik pwopriyetè strik: objè C++ yo toujou posede pa egzakteman yon sèl wrapper Rust, ak aksè pataje ale nan konte referans ki baze sou Arc sou bò Rust.

Anpèfòmans ki gen bon konprann, apèl FFI twòp kreye anlè nan chanjman kontèks ak seri. Nou pakèt operasyon chak fwa sa posib, voye yon keu nan atik travay bay egzekitè C++ a olye ke nou fè apèl endividyèl nan plizyè lang.

Kijan apwòch sa a te fè nan pwodiksyon?

Apre deplwaye achitekti ibrid la atravè platfòm nou an, nou mezire amelyorasyon konkrè. Debi demann ogmante pa 3.4x pou modil ki te deja bloke sou pwosesis sekans C++. Latansi ke (p99) te bese pa 61% paske Runtime async Rust a te kapab trete demann endepandan ansanm pandan y ap C++ te okipe travay ki gen anpil kalkil sou fil dedye li a.

Sa ki pi enpòtan, nou te gen zewo pinèz ki gen rapò ak konkourans nan premye sis mwa pwodiksyon yo. Modèl fil-konfinasyon an te fè li enposib estriktirèl pou kòd C++ yo dwe rele nan plizyè fil, pandan y ap sistèm tip Rust a anpeche ras done sou bò li yo nan fwontyè a. Sa a te yon amelyorasyon siyifikatif sou apwòch anvan nou an nan eseye ajoute threading nan C++ ak mutexes, ki te pwodui twa ensidan kondisyon ras nan yon sèl trimès.

Ekip jeni an rapòte tou sik iterasyon pi rapid. Nouvo karakteristik yo ka bati nan Rust ak sipò konkou plen, pandan y ap modil C++ ki deja egziste yo kontinye ap kouri san modifikasyon. Estrateji incrémentielle sa a te vle di nou pa janm te gen yon gwo risk "gwo bang" migrasyon - jis fiks, amelyorasyon mezirab.

Kesyon yo poze souvan

Èske Rust ka rele bibliyotèk C++ ki gen yon sèl fil san okenn modifikasyon?

Wi, men ou dwe asire tout apèl nan bibliyotèk sa a soti nan yon sèl fil. Modèl estanda a se kreye yon fil egzekitè devwe ki seri tout apèl C++ atravè yon kanal. Travay async Rust yo soumèt demann epi tann repons san yo pa bloke tan an milti-threaded. Kòd C++ la li menm pa mande okenn chanjman - kontrent sekirite a aplike antyèman sou bò Rust la.

Èske tèt FFI a ase enpòtan pou afekte pèfòmans aplikasyon an?

Apèl FFI endividyèl yo gen minimòm sou tèt yo - anjeneral anba 10 nanosegond pou yon apèl fonksyon senp. Sepandan, serializasyon estrikti done konplèks ak senkronizasyon fil nan fwontyè a ajoute si ou fè dè milye de apèl amann. Operasyon pakèt ak itilizasyon fòma serializasyon zewo kopi tankou FlatBuffers oswa Cap'n Proto kenbe tèt yo neglijab menm nan echèl la.

Èske nou ta dwe reekri kod C++ nou an nan Rust olye pou nou entèfas?

Pou pifò ekip, entèfas incrémentielle se chemen ki pi an sekirite ak pi rapid. Yon reekri konplè entwodui mwa nan risk jeni ki pa gen okenn valè itilizatè-fè fas a jiskaske fini. Entèfas pèmèt ou anbake amelyorasyon imedyatman, valide apwòch Rust nan pwodiksyon, ak imigre modil youn pa youn dapre kote konkou bay plis enpak la. Reekri modil yo sèlman kote pri pou kenbe fwontyè FFI a depase pri pou reekri.


Nan Mewayz, nou bati enfrastrikti ki echèl - tou de teknikman ak operasyonèl. OS biznis 207-modil nou an ede 138,000 ekip dirije workflows pi entelijan apati $19/mwa. Kit ou ap jere pwojè, otomatize operasyon yo, oswa ou ap ogmante biznis ou, Mewayz adapte ak fason w ap travay. Kòmanse esè gratis ou sou app.mewayz.com epi wè sa yon eksplwatasyon biznis modèn ka fè pou ekip ou a.