Hacker News

Kaip Dada įgalina vidines nuorodas

Komentarai

11 min read Via smallcultfollowing.com

Mewayz Team

Editorial Team

Hacker News

Savęs nuorodos problema, kuri dešimtmečius persekiojo sistemų programavimą

Jei kada nors bandėte sudaryti grafiką, dvigubai susietą sąrašą ar stebėtojo modelį kalba, kuriai taikomos griežtos nuosavybės taisyklės, žinote, kaip skauda. Savarankiškas duomenų struktūras – kai vienoje struktūros dalyje yra rodyklė į kitą tos pačios struktūros dalį – yra žinoma, kad sunku saugiai išreikšti. Rūdžių kūrėjai kovojo su tuo daugelį metų, siekdami Smeigtuko, nesaugių blokų ar arenos skirstytuvų, kad galėtų modeliuoti šablonus, kurie atrodo nereikšmingi šiukšlių surinktomis kalbomis. Niko Matsakis sukurta eksperimentinė programavimo kalba Dada laikosi iš esmės kitokio požiūrio. Pergalvodama nuosavybės teises ir leidimus nuo pat pradžių, „Dada“ įgalina vidines nuorodas neprarandant atminties saugumo, o pasekmės gerokai viršija akademinį smalsumą.

Kas yra vidinės nuorodos ir kodėl jos svarbios?

Vidinė nuoroda atsiranda, kai duomenų struktūroje esantis laukas nurodo kitą tos pačios struktūros lauką. Apsvarstykite analizatorių, kuriame yra ir šaltinio eilutė, ir tos eilutės dalis, arba vartotojo sąsajos komponentą, kuriame saugomas antrinių valdiklių sąrašas kartu su žymekliu į šiuo metu sutelktą antrinį elementą. Šie modeliai nuolat atsiranda realaus pasaulio programinėje įrangoje: įvykių sistemos, dokumentų modeliai, konfigūracijos medžiai ir darbo eigos varikliai priklauso nuo tam tikros formos savireferencijos.

Kalbomis, tokiomis kaip Python ar JavaScript, šiukšlių surinkimas tvarko buhalteriją nepastebimai. Jūs sukuriate nuorodą, o vykdymo laikas užtikrina, kad atmintis išliktų tol, kol kas nors nukreipia į ją. Tačiau sistemų kalbose, kurios teikia pirmenybę nulinių sąnaudų abstrakcijoms ir deterministiniam išteklių valdymui, kompiliatoriui reikia įrodymų, kad nuoroda nepergyvens joje nurodytų duomenų. Čia viskas komplikuojasi – dauguma nuosavybės teise pagrįstų kalbų verčia kūrėjus ieškoti nepatogių sprendimų, kurie užgožia ketinimus ir įveda subtilių klaidų.

Iššūkis nėra vien teorinis. Komandos, kuriančios modulines platformas, pvz., Mewayz 207 modulių architektūrą, nuolat priklauso nuo vidinių nuorodų. CRM modulis, nurodantis įrašus tame pačiame duomenų kontekste, sąskaitų faktūrų variklis, susiejantis eilutės elementus atgal su pirminiu dokumentu, arba analizės prietaisų skydelis, nukreipiantis į tiesioginius duomenų srautus bendrinamo būsenos objekte: visa tai yra realūs vidinio nuorodos modelio, veikiančio dideliu mastu, egzemplioriai.

Kaip prarandami tradiciniai nuosavybės modeliai

Rust skolinimosi tikrintuvas yra viena garsiausių šiuolaikinės kalbos dizaino naujovių, pašalinanti ištisas atminties klaidų kategorijas kompiliavimo metu. Tačiau jo griežta vieno savininko, skolinkitės arba perkelkite semantika, daro vidines nuorodas tikrai skausmingas. Kai struktūra perkeliama į atmintį, bet kokia vidinė rodyklė tampa negaliojanti. Rusto atsakymas – 1.33 versijoje įdiegta Pin API – suteikia mechanizmą, užtikrinantį, kad vertė nepajudės, tačiau sudėtingumą sudaro tai, kas turėtų būti nesudėtinga modeliavimo užduotis.

Kūrėjai dažnai praneša, kad 30–40 % savo laiko praleidžia kovodami su skolinimosi tikrintoju modeliais, susijusiais su savireferencija. Arenos paskirstymo bibliotekos, pvz., typed-arena ir indeksu pagrįsti metodai (kai indeksai saugomi Vec, o ne faktinėse nuorodose), yra pragmatiški, bet netobuli sprendimai. Tiesioginių nuorodų išraiškingumą jie keičia netiesioginėmis nuorodomis, kurias kompiliatorius gali patikrinti, tačiau aiškumą taip pat keičia pagrindine plokštele.

"Geriausia kalbos ypatybė yra ta, kuri leidžia lengviausia parašyti teisingą šabloną. Kai kūrėjai imasi problemų sprendimo būdų, tai reiškia, kad kalbos modelis ir jų mentalinis modelis skiriasi." – Niko Matsakis apie Dada dizaino filosofiją

„Dada“ leidimais pagrįstas požiūris į nuosavybę

„Dada“ nuosavybės teises iš naujo įsivaizduoja ne kaip dvejetainį sprendimą turėti ar skolintis, o kaip leidimų spektrą. Užuot perdavusi nuosavybės teisę ar kurdama laikinas paskolas, „Dada“ leidžia vertėms turėti leidimo komentarus, nurodančius, ką galite su jomis daryti – skaityti, rašyti ar turėti – ir, svarbiausia, šie leidimai gali egzistuoti kartu persidengiančiose tos pačios duomenų struktūros dalyse.

Pagrindinė įžvalga yra nuomos sąvoka. Dada nuoma suteikia laikiną prieigą prie vertės, o pirminis savininkas išlaiko savo teises. Skirtingai nuo Rust skolinių, nuomos sutartys yra sudarytos natūraliai su vidine struktūra. Kai nuomojate struktūros lauką, „Dada“ tipo sistema supranta, kad nuoma taikoma pirminio laikotarpio laikotarpiui, nereikalaujant aiškių viso laikotarpio komentarų. Taip pašalinamos liūdnai pagarsėjusios 'a eksploatavimo trukmės parametrų grandinės, dėl kurių sunku nuskaityti „Rust“ funkcijos parašus.

Konkrečiai vidinėms nuorodoms „Dada“ pristato tai, ką kalba vadinama bendra nuoma su vidaus keliais. Struktūra gali turėti nuomos sutartį vienam iš savo laukų, nes kompiliatorius stebi ryšį tarp konteinerio ir esančių duomenų kaip pirmos klasės koncepcijos. Nereikia PIN kodo, nereikia nesaugių ir indeksu pagrįstų netiesioginių nurodymų. Jūs tiesiog parašykite kodą taip, kaip galvojate apie duomenis, o kompiliatorius jį patikrina.

Praktiniai modeliai, kurie Dadoje tampa nereikšmingi

Kai vidinės nuorodos įgalintos švariai, kelis istoriškai sudėtingus modelius tampa nesunku įgyvendinti. Tai yra modeliai, su kuriais gamybos sistemos susiduria kasdien:

  • Savareferenciniai iteratoriai – iteratorius, kuriame yra nuoroda į rinkinį, kurį jis kerta, saugomas kaip viena struktūra, be visą gyvenimą trunkančios gimnastikos
  • Stebėtojo šablonai – įvykių skleidėjas, tvarkantis atgalinių skambučių sąrašą, nurodantį savo būseną, įgalinantis reaktyvųjį programavimą be Rc / RefCell paketų
  • Dokumentų modeliai su žymekliais – teksto rengyklės dokumento struktūra, kurioje yra buferis ir viena ar daugiau į jį nukreipiančių žymeklio pozicijų
  • Tėvų ir vaikų hierarchijos – medžio struktūros, kuriose vaikai turi nuorodas į savo pirminį mazgą, modeliuojamas tiesiogiai, o ne naudojant silpnas nuorodas ar indeksus.
  • Darbo eigos varikliai su būsenos mašinomis – konvejerio struktūra, kuri nurodo dabartinį etapą, ankstesnius rezultatus ir laukiančius veiksmus viename nuosekliame duomenų modelyje

Platformų architektams šie modeliai nėra kraštutiniai atvejai – jie yra modulinės programinės įrangos pagrindas. When Mewayz's engineering team builds features like drag-and-drop workflow builders or real-time collaboration in its project management module, the underlying data models inevitably involve self-referential structures. Kalbos ir sistemos, kurios tvarko šiuos modelius, puikiai sumažina kūrimo laiką ir sumažina klaidų paviršių.

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

Platesnis poveikis programinės įrangos architektūrai

Dada požiūris į vidines nuorodas atspindi didesnę programavimo kalbos dizaino tendenciją: saugūs modeliai tampa ergonomiški, o ne nesaugūs modeliai neįmanomi. Ši filosofija turi tiesioginių pasekmių šiuolaikinės programinės įrangos kūrimui. Kai kalba palengvina šabloną, kūrėjai ja naudojasi. Kai dėl to modelis tampa skausmingas, kūrėjai to vengia – kartais tai kainuoja dėl architektūrinio aiškumo.

Apsvarstykite mikropaslaugų ir modulinio monolito diskusijas. Viena iš priežasčių, kodėl komandos skaido sistemas į atskiras paslaugas, yra tai, kad viename procese nebūtų sudėtinga valdyti bendrinamą būseną. Tačiau jei kalba padaro bendros būsenos modelius saugius ir skaitomus, priešlaikinio skaidymo argumentas susilpnėja. Komandos gali sukurti darnias, modulines sistemas – su 50, 100 ar net 207 tarpusavyje sujungtų modulių – viename dislokuojamame vienete ir pasiekti organizacinius moduliškumo pranašumus be paskirstytų sistemų eksploatacinių išlaidų.

Būtent tokia architektūra palaiko tokias platformas kaip „Mewayz“, kur moduliai, apimantys CRM, sąskaitų faktūrų išrašymą, darbo užmokesčio išrašymą, žmogiškųjų išteklių valdymą, transporto parko valdymą ir analizę, veikia vieningame duomenų kontekste. Kiekvienas modulis nurodo bendrus objektus – kontaktus, organizacijas, sandorius – per vidinius santykius, kuriuos būtų košmariška valdyti peržengiant paslaugų ribas, tačiau jie yra natūralūs gerai struktūrizuotame monolite. Kalbos dizaino pažanga, supaprastinanti šias vidines nuorodas, yra tiesiogiai naudinga šios klasės programinei įrangai.

Į ką kūrėjai turėtų atkreipti dėmesį

Dada tebėra eksperimentinė, o jos idėjos vis dar tobulinamos viešai plėtojant ir bendruomenės atsiliepimuose. Tačiau kelios jo naujovės jau daro įtaką pagrindinės kalbos dizainui. Vykdomas „Rust“ darbas, susijęs su vaizdo tipais ir polonius (naujos kartos skolinimosi tikrintuvas), koncepcijas skolinasi iš tos pačios tyrimų erdvės. „Swift“ nuosavybės modelis, pristatytas „Swift 5.9“, taip pat tiria detalesnes leidimų sistemas. Net „TypeScript“ tipo sistema toliau tobulėja, kad būtų galima tiksliau modeliuoti duomenų ryšius.

Šiandien gamybinę programinę įrangą kuriančioms komandoms yra aiškūs praktiniai dalykai. Pirma, pirmenybę teikite kalboms ir sistemoms, kurios savo nuosavybės modelį suderina su jūsų duomenų modeliu – kova su tipo sistema yra produktyvumo mokestis, kuris laikui bėgant didėja. Antra, investuokite į jūsų domeno reikalaujamų modelių supratimą. Jei jūsų programa iš esmės yra tarpusavyje susijusių objektų grafikas (kaip ir dauguma verslo platformų), rinkitės įrankius, kurie modeliuoja grafikus natūraliai, o ne priversdami ieškoti medžio formos sprendimo būdų.

Galiausiai stebėkite Dada ir jos atliekamus tyrimus. Jo sprendžiamos problemos – vidinės nuorodos, leidimų sudėtis, ergonominė sauga – nėra nišinės problemos. Tai yra tikslios problemos, su kuriomis susiduria kiekviena komanda, kurdama ambicingą, tarpusavyje susijusią programinę įrangą. Nesvarbu, ar valdote pristatymo transporto priemonių parką, organizuojate kelių etapų samdymo procesą, ar sinchronizuojate duomenis 207 modulių verslo platformoje, tai, kaip jūsų įrankiai tvarko vidinius ryšius, lemia visko, ką kuriate ant jų, kokybę.

Nuo kalbos teorijos iki verslo realybės

Programavimo kalbos tyrimai gali atrodyti nutolę nuo kasdienės verslo valdymo realybės. Tačiau mūsų naudojami įrankiai formuoja mūsų kuriamus produktus, o gaminami produktai formuoja įmonių veiklą. „Dada“ indėlis į vidinės nuorodos problemą nėra tik techninis etapas – tai signalas, kad pramonė pereina prie įrankių, kurie gerbia kūrėjų nuomonę apie duomenis, o ne verčia juos mąstyti kaip kompiliatorius.

Daugiau nei 138 000 įmonių, kurios savo veiklai valdyti naudoja tokias platformas kaip „Mewayz“, ši pažanga reiškia, kad programinė įranga yra patikimesnė, turi daugiau funkcijų ir sparčiau tobulėja. Kiekvienas programavimo kalbų sudėtingumo patobulinimas galiausiai virsta geresne patirtimi galutiniam vartotojui – smulkaus verslo savininkui, kuris tiesiog nori, kad jų CRM, sąskaitų faktūrų išrašymo ir užsakymo sistemos veiktų sklandžiai. Šis vientisumas yra tūkstančių gerai sumodeliuotų vidinių nuorodų rezultatas, o tokios kalbos kaip Dada daro jas saugesnes ir lengviau sukuriamas nei bet kada anksčiau.

Supaprastinkite savo verslą naudodami „Mewayz“

Mewayz vienoje platformoje sujungia 207 verslo modulius – CRM, sąskaitų faktūrų išrašymą, projektų valdymą ir kt. Prisijunkite prie daugiau nei 138 000 naudotojų, kurie supaprastino savo darbo eigą.

Pradėkite nemokamai šiandien →

Dažniausiai užduodami klausimai

Kas tiksliai yra „savarankiškos problemos“?

Savęs nuorodos problema kyla, kai duomenų struktūroje yra nuoroda į save, pavyzdžiui, grafiko mazgas, nukreipiantis į kitą mazgą toje pačioje struktūroje. Kalbose, kuriose taikomos griežtos nuosavybės taisyklės, pvz., Rust, tai sukelia konfliktą: kalbos saugos garantijos negali lengvai nustatyti, ar nuoroda bus senesnė nei nurodomi duomenys. Dėl to iš pažiūros paprastus modelius, įprastus 207+ Mewayz moduliuose, stebėtinai sunku ir nesaugu įgyvendinti.

Kaip Dada išsprendžia šią problemą kitaip nei Rust?

Nors Rust dažnai reikalauja sudėtingų sprendimų, pvz., Pin arba nesaugaus kodo, kad galėtų tvarkyti nuorodas į save, „Dada“ pateikia sprendimą tiesiai į savo nuosavybės modelį. Dada pristato „lizingo“ sąvoką, kuri yra laikinos, leidimu pagrįstos nuorodos. Tai leidžia kompiliatoriui statiškai garantuoti vidinių rodyklių saugumą, nereikalaujant specialių tipų ir nepažeidžiant atminties saugos, todėl jis yra daug ergonomiškesnis šiems įprastiems šablonams.

Ar šiandien galiu naudoti „Dada“ savo projektams?

Dada šiuo metu yra eksperimentinė kalba ir dar neparengta naudoti gamyboje. Tai mokslinių tyrimų projektas, kuriame nagrinėjamos naujos nuosavybės idėjos. Tvirtai, gamybai paruoštų sistemų programavimui „Rust“ išlieka pagrindiniu pasirinkimu. Aukštesnio lygio taikomųjų programų poreikiams tenkinti paslauga, pvz., „Mewayz“ (19 USD per mėnesį), suteikia didžiulę iš anksto sukurtų modulių biblioteką, kuri pagreitina plėtrą, nesusiduriant su žemo lygio atminties problemomis.

Ar Dada metodas turi kokių nors apribojimų?

Dada nuomos sistema skirta tam tikrai problemų klasei, susijusiai su vidinėmis nuorodomis viename nuosavybės medyje. Nors jis elegantiškai išsprendžia paradigminio grafiko ir stebėtojo modelio problemas, tai gali būti ne visų sudėtingų rodyklės scenarijų sidabrinė kulka. Modelis vis dar kuriamas, o visos jo galimybės ir apribojimai taps aiškesni, kai kalba vystysis.

Try Mewayz Free

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

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