Hacker News

Як Dada дазваляе ўнутраныя спасылкі

Каментарыі

1 min read Via smallcultfollowing.com

Mewayz Team

Editorial Team

Hacker News

Праблема самарэферэнцыі, якая не дае спакою сістэмнаму праграмаванню на працягу дзесяцігоддзяў

Калі вы калі-небудзь спрабавалі пабудаваць графік, двайны звязаны спіс або шаблон назіральніка на мове са строгімі правіламі валодання, вы ведаеце боль. Самарэферэнцыйныя структуры даных — дзе адна частка структуры ўтрымлівае паказальнік на іншую частку той жа структуры — вядома, што цяжка бяспечна выказаць. Распрацоўшчыкі Rust змагаліся з гэтым на працягу многіх гадоў, звяртаючыся да Pin, unsafe блокаў або размеркавальнікаў арэны проста для мадэлявання шаблонаў, якія выглядаюць трывіяльнымі ў мовах, якія збіраюць смецце. Дада, эксперыментальная мова праграмавання, створаная Ніка Мацакісам, выкарыстоўвае прынцыпова іншы падыход. Пераасэнсаваўшы права ўласнасці і дазволы з нуля, Dada дазваляе выкарыстоўваць унутраныя спасылкі без шкоды для бяспекі памяці - і наступствы выходзяць далёка за рамкі акадэмічнай цікаўнасці.

Што такое ўнутраныя спасылкі і чаму яны важныя?

Унутраная спасылка ўзнікае, калі поле ўнутры структуры даных паказвае на іншае поле ў той жа структуры. Разгледзім сінтаксічны аналізатар, які захоўвае як зыходны радок, так і зрэз гэтага радка, або кампанент карыстальніцкага інтэрфейсу, які захоўвае спіс даччыных віджэтаў разам з паказальнікам на даччыны элемент, на якім зараз знаходзіцца фокус. Гэтыя шаблоны пастаянна з'яўляюцца ў рэальным праграмным забеспячэнні: сістэмы падзей, мадэлі дакументаў, канфігурацыйныя дрэвы і механізмы працоўнага працэсу - усё абапіраецца на некаторую форму самаспасылкі.

У такіх мовах, як Python або JavaScript, уборка смецця вядзе бухгалтэрыю незаўважна. Вы ствараеце спасылку, а асяроддзе выканання забяспечвае захаванне памяці да таго часу, пакуль нешта паказвае на яе. Але ў сістэмных мовах, якія аддаюць перавагу абстракцыям без выдаткаў і дэтэрмінаванаму кіраванню рэсурсамі, кампілятар патрабуе доказу таго, што спасылка не перажыве даныя, на якія яна паказвае. Тут усё ўскладняецца — і большасць моў, заснаваных на правах уласнасці, прымушаюць распрацоўшчыкаў ісці на нязручныя абыходныя шляхі, якія хаваюць намеры і ствараюць тонкія памылкі.

Задача не проста тэарэтычная. Каманды, якія ствараюць модульныя платформы — напрыклад, 207-модульную архітэктуру Mewayz — пастаянна залежаць ад унутраных спасылак. Модуль CRM, які спасылаецца на запісы ў адным і тым жа кантэксце даных, механізм выстаўлення рахункаў, які звязвае пазіцыі з іх бацькоўскім дакументам, або прыборная панэль аналітыкі, якая паказвае на жывыя патокі даных у агульным аб'екце стану: усё гэта з'яўляецца рэальнымі асобнікамі ўнутранага эталоннага шаблону, які працуе ў маштабе.

Як традыцыйныя мадэлі ўласнасці не спраўджваюцца

Сродак праверкі запазычанняў Rust з'яўляецца адным з самых знакамітых новаўвядзенняў у дызайне сучаснай мовы, ухіляючы цэлыя катэгорыі памылак падчас кампіляцыі. Тым не менш, яго строгая семантыка аднаго ўладальніка, пазычання або перамяшчэння робіць унутраныя спасылкі сапраўды балючымі. У той момант, калі структура перамяшчаецца ў памяць, любы ўнутраны паказальнік становіцца несапраўдным. Адказ Rust — API Pin, прадстаўлены ў версіі 1.33 — забяспечвае механізм, які гарантуе, што значэнне не будзе перамяшчацца, але ўскладняе тое, што павінна быць простай задачай мадэлявання.

Распрацоўшчыкі часта паведамляюць, што марнуюць 30-40% свайго часу на барацьбу з праверкай запазычанняў на шаблоны, якія ўключаюць самаспасылку. Бібліятэкі размеркавання Arena, такія як typed-arena і падыходы на аснове індэксаў (дзе вы захоўваеце індэксы ў Vec, а не ў рэальных спасылках) з'яўляюцца прагматычнымі, але недасканалымі рашэннямі. Яны абменьваюць выразнасць прамых спасылак на ўскоснасць, якую можа праверыць кампілятар, але яны таксама абменьваюць яснасць на шаблон.

<цытата>

"Лепшая асаблівасць мовы - гэта тая, якая робіць правільны шаблон самым простым для напісання. Калі распрацоўшчыкі звяртаюцца да абыходных шляхоў, гэта азначае, што мадэль мовы і іх ментальная мадэль разышліся." — Ніка Мацакіс, пра філасофію дызайну, якая ляжыць у аснове Дада

Падыход Dada да права ўласнасці, заснаваны на дазволе

Dada пераасэнсоўвае ўласнасць не як бінарнае рашэнне "валодаць або пазычаць", а як спектр дазволаў. Замест перадачы права ўласнасці або стварэння часовых запазычанняў Dada дазваляе значэнням несці анатацыі дазволаў, якія апісваюць, што вы можаце з імі рабіць — чытаць, пісаць або валодаць — і, што вельмі важна, гэтыя дазволы могуць суіснаваць на частках адной структуры даных, якія перакрываюцца.

Асноўная інфармацыя - гэта канцэпцыя арэнды. Арэнда ў Dada дае часовы доступ да каштоўнасці, у той час як першапачатковы ўладальнік захоўвае свае правы. У адрозненне ад запазычанняў Rust, дагаворы арэнды распрацаваны так, каб натуральна спалучацца з унутранай структурай. Калі вы здаяце ў арэнду поле структуры, сістэма тыпаў Dada разумее, што арэнда распаўсюджваецца на ўвесь час жыцця бацькоўскага элемента, не патрабуючы відавочных анатацый на працягу ўсяго жыцця. Гэта ліквідуе сумна вядомыя ланцужкі параметраў працягласці жыцця 'a, якія робяць подпісы функцый Rust цяжкімі для чытання.

У прыватнасці, для ўнутраных спасылак Dada прадстаўляе тое, што ў мове называецца сумесная арэнда з унутранымі шляхамі. Структура можа трымаць у арэндзе адно са сваіх палёў, таму што кампілятар адсочвае сувязь паміж кантэйнерам і змешчанымі дадзенымі як першакласную канцэпцыю. Няма неабходнасці ў PIN-кодзе, у небяспечным і ўскосным указанні на аснове індэкса. Вы проста пішаце код так, як думаеце пра дадзеныя, а кампілятар правярае яго.

Практычныя ўзоры, якія становяцца трывіяльнымі ў дадаізме

Калі ўнутраныя спасылкі ўключаны чыста, некаторыя гістарычна складаныя шаблоны становяцца простымі для рэалізацыі. Гэта шаблоны, з якімі вытворчыя сістэмы сутыкаюцца штодня:

  • Самаспасылковыя ітэратары — Ітэратар, які змяшчае спасылку на калекцыю, праз якую ён праходзіць, захоўваецца як адна структура, без пажыццёвай гімнастыкі
  • Шаблоны назіральніка — выпраменьвальнік падзей, які падтрымлівае спіс зваротных выклікаў, спасылаючыся на яго ўласны стан, дазваляючы рэактыўнае праграмаванне без абгортак Rc/RefCell
  • Мадэлі дакументаў з курсорамі — структура дакумента тэкставага рэдактара, якая змяшчае як буфер, так і адну або некалькі пазіцый курсора, якія паказваюць на яго.
  • Іерархіі бацькоў-нашчадкаў — Дрэвападобныя структуры, дзе даччыныя элементы ўтрымліваюць спасылкі на бацькоўскі вузел, змадэляваныя непасрэдна, а не праз слабыя ўказальнікі або індэксы
  • Рухавікі працоўнага працэсу з канчатковымі аўтаматамі — канвеерная структура, якая спасылаецца на бягучы этап, папярэднія вынікі і незавершаныя дзеянні, усё ў рамках адной згуртаванай мадэлі даных

Для архітэктараў платформы гэтыя шаблоны не з'яўляюцца краевымі выпадкамі — яны з'яўляюцца асновай модульнага праграмнага забеспячэння. Калі каманда інжынераў Mewayz стварае такія функцыі, як канструктары працоўных працэсаў з перацягваннем або супрацоўніцтва ў рэжыме рэальнага часу ў сваім модулі кіравання праектамі, асноўныя мадэлі даных непазбежна ўключаюць самарэферэнтныя структуры. Мовы і фрэймворкі, якія вытанчана апрацоўваюць гэтыя шаблоны, скарачаюць час распрацоўкі і мінімізуюць вобласць для памылак.

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

Шырокі ўплыў на архітэктуру праграмнага забеспячэння

Падыход Dada да ўнутраных спасылак адлюстроўвае шырокую тэндэнцыю ў дызайне мовы праграмавання: рабіць бяспечныя шаблоны эрганамічнымі, а не рабіць небяспечныя шаблоны немагчымымі. Гэтая філасофія мае прамыя наступствы для таго, як пабудавана сучаснае праграмнае забеспячэнне. Калі мова робіць шаблон простым, распрацоўшчыкі выкарыстоўваюць яго. Калі гэта робіць шаблон балючым, распрацоўшчыкі пазбягаюць яго - часам цаной архітэктурнай яснасці.

Разгледзім дыскусію аб мікрасэрвісах супраць модульнага маналіту. Адна з прычын, па якой каманды разбіваюць сістэмы на асобныя службы, заключаецца ў тым, каб пазбегнуць складанасці кіравання агульным станам у рамках аднаго працэсу. Але калі мова робіць шаблоны агульнага стану бяспечнымі і зручнымі для чытання, аргумент на карысць заўчаснага разлажэння слабее. Каманды могуць ствараць згуртаваныя модульныя сістэмы — з 50, 100 ці нават 207 узаемазвязаных модуляў — у рамках аднаго разгортваемага блока, дасягаючы арганізацыйных пераваг модульнасці без аперацыйных выдаткаў размеркаваных сістэм.

Гэта менавіта тая архітэктура, якая працуе на такіх платформах, як Mewayz, дзе модулі, якія ахопліваюць CRM, выстаўленне рахункаў, разлік заработнай платы, кадры, кіраванне аўтапаркам і аналітыку, працуюць у адзіным кантэксце даных. Кожны модуль спасылаецца на агульныя аб'екты - кантакты, арганізацыі, транзакцыі - праз унутраныя ўзаемаадносіны, кіраванне якімі па-за межамі службы было б кашмарным, але натуральнымі ў добра структураваным маналіце. Дасягненні ў моўным дызайне, якія спрашчаюць гэтыя ўнутраныя спасылкі, непасрэдна прыносяць карысць гэтаму класу праграм.

На што варта сачыць распрацоўшчыкам

Дадаізм застаецца эксперыментальным, і яго ідэі ўсё яшчэ ўдасканальваюцца праз грамадскае развіццё і водгукі супольнасці. Тым не менш, некаторыя з яе новаўвядзенняў ужо ўплываюць на асноўны дызайн мовы. Працяглая праца Rust над тыпамі прагляду і polonius (сродкам праверкі запазычанняў наступнага пакалення) запазычвае канцэпцыі з той жа даследчай прасторы. Мадэль уласнасці Swift, прадстаўленая ў Swift 5.9, гэтак жа даследуе больш падрабязныя сістэмы дазволаў. Нават сістэма тыпаў TypeScript працягвае развівацца ў напрамку больш дакладнага мадэлявання адносін даных.

Для каманд, якія сёння ствараюць вытворчае праграмнае забеспячэнне, практычныя высновы зразумелыя. Па-першае, аддавайце перавагу мовам і фрэймворкам, якія ўзгадняюць сваю мадэль уласнасці з вашай мадэллю даных - барацьба з сістэмай тыпаў - гэта падатак на прадукцыйнасць, які з часам павялічваецца. Па-другое, інвестуйце ў разуменне шаблонаў, неабходных для вашага дамена. Калі ваша прыкладанне па сутнасці ўяўляе сабой граф узаемазвязаных адзінак (як большасць бізнес-платформаў), выбірайце інструменты, якія натуральным чынам мадэлююць графікі, а не прымушаюць абыходныя шляхі ў форме дрэва.

Нарэшце, сачыце за дадаізмам і даследаваннямі, якія ён прадстаўляе. Праблемы, якія ён вырашае - унутраныя спасылкі, кампазіцыя дазволаў, эрганамічная бяспека - не з'яўляюцца нішавымі. Гэта менавіта тыя праблемы, з якімі сутыкаецца кожная каманда пры стварэнні амбіцыйнага ўзаемазвязанага праграмнага забеспячэння ў маштабе. Незалежна ад таго, кіруеце вы аўтапаркам транспартных сродкаў, арганізоўваеце шматступеньчатую канвеер найму або сінхранізуеце даныя на 207-модульнай бізнес-платформе, тое, як вашы інструменты апрацоўваюць унутраныя адносіны, вызначае якасць усяго, што вы будуеце на іх аснове.

Ад тэорыі мовы да дзелавой рэальнасці

Даследаванне мовы праграмавання можа здацца далёкім ад штодзённай рэальнасці вядзення бізнесу. Але інструменты, якія мы выкарыстоўваем, вызначаюць прадукты, якія мы ствараем, а прадукты, якія мы ствараем, вызначаюць тое, як працуе бізнес. Уклад Dada ў праблему ўнутраных даведак - гэта не проста тэхнічная вяха - гэта сігнал таго, што індустрыя рухаецца да інструментаў, якія паважаюць тое, як распрацоўшчыкі на самой справе думаюць пра даныя, а не прымушаюць іх думаць як кампілятар.

Для больш чым 138 000 прадпрыемстваў, якія выкарыстоўваюць такія платформы, як Mewayz, для кіравання сваімі аперацыямі, гэты прагрэс азначае праграмнае забеспячэнне, якое з'яўляецца больш надзейным, больш функцыянальным і хутчэй развіваецца. Кожнае ўдасканаленне таго, як мовы праграмавання спраўляюцца са складанасцю, у канчатковым выніку прыводзіць да лепшага вопыту для канчатковага карыстальніка - уладальніка малога бізнесу, які проста хоча, каб іх сістэмы CRM, выстаўлення рахункаў і браніравання працавалі разам. Гэтая бясшвоўнасць з'яўляецца прадуктам тысяч добра змадэляваных унутраных спасылак, і такія мовы, як Dada, робяць іх больш бяспечнымі і лягчэйшымі для стварэння, чым калі-небудзь раней.

Спрасціце свой бізнес з Mewayz

Mewayz аб'ядноўвае 207 бізнес-модуляў на адной платформе — CRM, выстаўленне рахункаў, кіраванне праектамі і інш. Далучайцеся да 138 000+ карыстальнікаў, якія спрасцілі свой працоўны працэс.

Пачніце бясплатна сёння →

Часта задаюць пытанні

Што такое "праблема самарэферэнцыі"?

Праблема самарэферэнцыі ўзнікае, калі структура даных змяшчае спасылку на саму сябе, як вузел у графе, які паказвае на іншы вузел у той жа структуры. У мовах са строгімі правіламі валодання, такімі як Rust, гэта стварае канфлікт: гарантыі бяспекі мовы не могуць лёгка вызначыць, ці перажыве спасылка дадзеныя, на якія яна паказвае. Гэта робіць, здавалася б, простыя шаблоны, распаўсюджаныя ў 207+ модулях Mewayz, надзіва складанымі і небяспечнымі для рэалізацыі.

Чым Dada вырашае гэтую праблему інакш, чым Rust?

У той час як Rust часта патрабуе складаных абыходных шляхоў, такіх як код Pin або unsafe для апрацоўкі самаспасылак, Dada ўпісвае рашэнне непасрэдна ў сваю мадэль уласнасці. Дада ўводзіць паняцце "арэнды", якая з'яўляецца часовымі спасылкамі на аснове дазволу. Гэта дазваляе кампілятару статычна гарантаваць бяспеку ўнутраных паказальнікаў без неабходнасці спецыяльных тыпаў або парушэння бяспекі памяці, што робіць яго значна больш эрганамічным для гэтых агульных шаблонаў.

Ці магу я выкарыстоўваць Dada для сваіх праектаў сёння?

Дада зараз з'яўляецца эксперыментальнай мовай і яшчэ не гатовая да выкарыстання ў вытворчасці. Гэта даследчы праект, які вывучае новыя ідэі ва ўласнасці. Для надзейнага, гатовага да вытворчасці сістэмнага праграмавання Rust застаецца вядучым выбарам. Для патрэб вышэйшага ўзроўню прыкладанняў такая служба, як Mewayz (19 долараў у месяц), забяспечвае шырокую бібліятэку гатовых модуляў для паскарэння распрацоўкі, не сутыкаючыся з праблемамі памяці нізкага ўзроўню.

Ці мае падыход дадаізму якія-небудзь абмежаванні?

Сістэма арэнды Dada прызначана для пэўнага класа праблем, звязаных з унутранымі спасылкамі ў адным дрэве ўласнасці. Нягледзячы на ​​​​тое, што ён элегантна вырашае парадыгматычны графік і праблемы з шаблонам назіральніка, ён не можа быць срэбнай куляй для ўсіх складаных сцэнарыяў паказальнікаў. Мадэль усё яшчэ знаходзіцца ў стадыі распрацоўкі, і яе ўсе магчымасці і абмежаванні стануць больш зразумелымі па меры развіцця мовы.

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