Hacker News

Bir sapakly C ++ köp sapakly Rüst bilen interfeýs etdik

Bir sapakly C ++ köp sapakly Rüst bilen interfeýs etdik Interfeýsiň bu giňişleýin derňewi onuň esasy komponentlerini we has giň netijelerini jikme-jik öwrenmegi hödürleýär. Fokusyň esasy ugurlary Ara alyp maslahatlaşma merkezleri: Esasy mech ...

7 min read Via antithesis.com

Mewayz Team

Editorial Team

Hacker News
Ine, SEO blogynyň doly ýazgysy:

Bir sapakly C ++ bilen köp sapakly pasly

Bir sapakly C ++ kody köp sapakly Rust bilen interfeýs etmek diňe bir mümkin däl - miras ulgamlaryny doly täzeden ýazmazdan döwrebaplaşdyrmagyň iň amaly usullaryndan biridir. “Mewayz” -da 138 000 ulanyja hyzmat etmek üçin 207 modully iş ulgamymyzy ulaldanymyzda bu takyk meseläni çözdük we netijeler ulgamlaryň sazlaşyklylygy baradaky pikirimizi düýpgöter üýtgetdi.

Näme üçin köp sapakly pos bilen bir sapakly C ++ interfeýsi edip bilersiňiz?

Önümçilik ulgamlarynyň köpüsinde birnäçe ýyllap synag edilen C ++ kody bar. Rüstdäki hemme zady täzeden ýazmak kagyz ýüzünde özüne çekiji bolup görünýär, ýöne bu uly töwekgelçiligi we birnäçe aýlap in engineeringenerçilik wagtyny girizýär. Pragmatiki çemeleşme artýan kabul etmekdir - Rüstiň eýeçilik modeline birmeňzeş agyr iş ýüklerini ýüklemek bilen bar bolan C ++ logikasyny örtmek.

Biziň ýagdaýymyzda, esasy iş logika modullary birnäçe sapakly C ++ -da birnäçe ýyl bäri ygtybarly işleýärdi. Olar yzygiderli meseläni gaýtadan işlemek, resminama döretmek we maliýe hasaplamalary bilen meşgullandylar. Useröne ulanyjy bazamyz 100K-dan geçensoň, paralel maglumatlary gaýtadan işlemek, bir wagtyň özünde API işlemegi we umumy paýlaşylan döwlet dolandyryşy gerekdi. Rüstiň Ibermek we Sinhronlamak häsiýetleri, C ++ giň el bilen barlag geçirmezden hödürläp bilmejekdigini kepillendirýän wagtlaýyn ylalaşyk kepilligini berdi.

Esasy itergi töwekgelçiligi azaltmakdyr. Näme işleýändigini saklaýarsyňyz we haýsy terezini goşýarsyňyz - tutuş kod koduňyzy hiç wagt gutaryp bilmejek göçümde humar oýnamazdan.

FFI serhedi hakykatda nähili işleýär?

C ++ bilen Rüstiň arasyndaky Daşary ýurt funksiýasy interfeýsi (FFI) C bilen utgaşdyrylan funksiýa gollary arkaly işleýär. Rüstiň daşky "C" bloklary, C ++ göni çagyryp bilýän funksiýalary we tersine. Möhüm kynçylyk, Rüstiň köp sapakly iş wagty bir sapakly C ++ koduny ygtybarly ulanmaly bolanda ýüze çykýar.

Muny aýratyn arhitektura ulanyp çözdük:

      • Açyk görkezijini dolandyrmak: C ++ obýektler kesgitleýji arassalamak üçin dil kody bilen ýadyň syzmagynyň öňüni alýan Drop ýerine ýetirýän Rust setirlerine örtülendir.
      • Serhetde seriallaşdyrma: Çylşyrymly maglumat gurluşlary, FFI gatlagynda FlatBuffers-e seriýalaşdyrylýar, gowşak gurluş düzülişinden gaça durýar we her tarapyň garaşsyz ewolýusiýasyny üpjün edýär.
      • Aljyraňňylyk izolýasiýasy: Rüstiň tutmak_unwind her bir FFI giriş nokadyny gurşap alýar, şonuň üçin howsala hiç wagt dil araçäginden geçmez, bu kesgitlenmedik hereket.

      Bu nagyş, subut edilen C ++ logikasynyň ygtybarlylygy bilen köp sapakly Rüstiň geçmegini üpjün etdi - asyl iş düzgünleriniň ýekeje setirini täzeden ýazmazdan.

      Saklanmaly iň uly duzaklar haýsylar?

      Iň howply ýalňyşlyk, C ++ kody ýok wagty sapakdan howpsuz diýip hasaplamakdyr. Global ýagdaý, statiki üýtgeýjiler we başga bir kitaphana çagyryşlary, Rüstiň düzüjisiniň FFI serhedinden tapyp bilmeýän maglumat ýaryşlaryna sebäp bolar. Rüstiň howpsuzlyk kepillikleri howply blokda durmagy - içindäki hemme zat siziň jogapkärçiligiňizdir.

      Esasy düşünje: Rust öz kodunyň içinde ýadyň howpsuzlygyny kepillendirýär, ýöne FFI serhedini C ++-a geçen pursatyňyzda, C ++ -da bar bolan her bir howpsuzlyk meselesi ýüze çykýar. Şol araçäkdäki arhitektura, onuň iki tarapyndaky koddan has möhümdir.

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

      Anotherene bir umumy ýalňyşlyk ömri dolandyrmakdyr. C ++ obýektleri Rüstiň karz barlaýjysyna gatnaşmaýarlar. C ++ henizem görkeziji saklaýan bolsa, Rüst bir salgylanmany taşlasa, diagnoz goýmak gaty kyn bolan ulanyşdan soň näsazlyklary alarsyňyz. Biz berk eýeçilik semantikasyny ýerine ýetirmek bilen bu meseläni çözdük: C ++ obýektler elmydama bir Rusta örtügine degişlidir we umumy giriş Rust tarapynda Arc esasly salgylanma sanlaryndan geçýär.

      Öndürijilikli, aşa FFI jaňlary kontekstiň kommutasiýasyndan we seriallaşdyrylmagyndan has ýokary döredýär. Mümkin boldugyça amallary jemleýäris, aýratyn dilde jaň etmek däl-de, C ++ ýerine ýetirijisine nobat iberýäris.

      Bu çemeleşme önümçilikde nähili netije berdi?

      Gibrid arhitekturany platformamyzda ýerleşdirenimizden soň, anyk gowulaşmalary ölçedik. Talap geçirijisi, yzygiderli C ++ gaýtadan işlemekde päsgelçilik döreden modullar üçin 3,4x ýokarlandy. Guýrugyň gijä galmagy (p99) 61% azaldy, sebäbi Rüstiň asynk iş wagty garaşsyz haýyşlary bir wagtda işläp bilýär, C ++ bolsa ýörite sapakda hasaplama agyr meseleleri ýerine ýetirýär.

      Has möhümi, önümçiligiň ilkinji alty aýynda deňlik bilen baglanyşykly kemçiliklerimiz bardy. Threadüplükleri ýapmak nagşy, C ++ kodunyň birnäçe sapakdan çagyrylmagyny gurluş taýdan mümkin etmedi, Rüstiň görnüşi ulgamy serhet tarapynda maglumat ýaryşlarynyň öňüni aldy. Bu, bir çärýekde üç ýaryş şertini döreden muteeksler bilen C ++ sapak goşmak synanyşygymyzdan ep-esli gowulaşdy.

      In engineeringenerçilik topary has çalt gaýtalama sikllerini hem habar berdi. Täze aýratynlyklar Rüstde doly ylalaşyk goldawy bilen gurlup bilnerdi, şol bir wagtyň özünde bar bolan C ++ modullary üýtgetmän işlemegini dowam etdirdi. Bu ýokarlandyryş strategiýasy, hiç haçan ýokary töwekgelçilikli "uly partlama" göçümimiziň ýokdugyny aňladýardy - diňe durnukly, ölçenip boljak gowulaşma.

      Freygy-ýygydan soralýan soraglar

      Rüst üýtgemezden bir sapakly C ++ kitaphanalaryna jaň edip bilermi?

      Hawa, ýöne şol kitaphana çagyryşlaryň hemmesiniň bir sapakdan bolmagyny üpjün etmeli. Adaty nagyş, ähli C ++ jaňlaryny bir kanal arkaly seriallaşdyrýan aýratyn ýerine ýetiriji sapak döretmekdir. Rüstiň asynk wezipeleri haýyşlary iberýär we köp sapakly iş wagtyny petiklemän jogaplara garaşýar. C ++ kody hiç hili üýtgeşme talap etmeýär - howpsuzlyk çäklendirmesi tutuşlygyna Rust tarapynda ýerine ýetirilýär.

      FFI kellesi programmanyň işine täsir etmek üçin ýeterlikmi?

      Aýry-aýry FFI jaňlarynyň iň ýokary derejesi bar - ýönekeý funksiýa jaňy üçin adatça 10 nanosekuntdan geçýär. Şeýle-de bolsa, müňlerçe inçe jaň etseňiz, çylşyrymly maglumat gurluşlarynyň seriýalaşdyrylmagy we araçäkdäki sapaklaryň sinhronizasiýasy artýar. Toplama amallary we “FlatBuffers” ýa-da “Cap'n Proto” ýaly nol göçürme seriallaşdyrma formatlaryny ulanmak, hatda masştabda-da ähmiýetini az saklaýar.

      C ++ kod bazamyzy interfeýsiň ýerine Rüstde täzeden ýazmalymy?

      Toparlaryň köpüsi üçin artýan interfeýs has ygtybarly we has çalt ýol. Doly täzeden ýazmak, gutarýança ulanyjynyň bahasy ýok birnäçe aýlap in engineeringenerçilik töwekgelçiligini hödürleýär. Interfeýs, derrew gowulaşmalary ibermäge, önümçilikdäki Rust çemeleşmesini tassyklamaga we ylalaşygyň iň köp täsir edýän ýerine esaslanyp modullary bir gezek göçürmäge mümkinçilik berýär. Diňe FFI serhedini saklamak üçin çykdajylaryň täzeden ýazmak çykdajylaryndan ýokary bolan modullary täzeden ýazyň.


      Mewaýzda, tehniki we amaly taýdan terezini düzýän infrastruktura gurýarys. 207 modully iş ulgamymyz 138,000 topara aýda 19 $ -dan başlap has akylly iş akymlaryny amala aşyrmaga kömek edýär. Taslamalary dolandyrýarsyňyzmy, amallary awtomatlaşdyrýarsyňyzmy ýa-da işiňizi giňeldýärsiňizmi, Mewayz işiňize uýgunlaşýar. Mugt synagyňyzy app.mewayz.com başlaň we häzirki zaman işewürlik ulgamynyň toparyňyz üçin näme edip biljekdigini görüň.

      bahasynyň bahasy bolan modullary täzeden ýazyň

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