Trampolining Nix kple GenericClosure | Mewayz Blog Skip to main content
Hacker News

Trampolining Nix kple GenericClosure

Nyaŋuɖoɖowo

15 min read Via blog.kleisli.io

Mewayz Team

Editorial Team

Hacker News

Ŋusẽ si gbugbɔna ƒe asiɖeɖe le eŋu: Tso Stack ƒe Goglome dzi yi Kɔkɔme si wɔa dɔ nyuie dzi

Le dɔwɔwɔ ƒe ɖoɖowɔɖi ƒe xexeame, vevietɔ le Nix ƒe lãwo ƒe agbenɔnɔ ƒe ɖoɖoa me la, gbugbɔgadzɔ nye xɔtunu vevi aɖe. Enye alesi míetoa nyatakaka ƒe ɖoɖo sesẽwo me, bua akɔnta le nusiwo dzi woanɔ te ɖo ŋu, eye míetuaa nusiwo woɖe tso eme deŋgɔwo. Gake ŋusẽ sia va kple mɔ̃ si wonya nyuie: gbugbɔgawɔ goglo ate ŋu ahe stack overflows vɛ, si atɔ te wò xɔtutuwo kple evaluations le kɔnu manɔmee. Tso blema ke la, dɔwɔlawo ate ŋu aɖo aɖaŋu aɖe si woyɔna be trampolining gbɔ be woatrɔ recursive function calls woazu iterative loop, si aƒo asa na stack buildup. Gake ne mɔ aɖe li si dzi woato akpɔ esia gbɔ wu, si me wotsia dzi ɖe Nix ŋu le wu le afima ya ɖe? De `lib.customisation.genericClosure`, dɔwɔwɔ sẽŋu aɖe le Nixpkgs ƒe agbalẽdzraɖoƒe si woɖo ɖi si naa mɔnu si woɖo, si wɔa dɔ nyuie be woakpɔ nyatakakawo ƒe dɔwɔwɔ gbugbɔgawɔ gbɔ stack dzimaɖitsitsi manɔmee.

Gbugbɔgadzɔ ƒe Kuxia gɔmesese le Nix

me

Le eƒe gɔmedzedze la, dɔwɔwɔ si wogbugbɔna yɔa eɖokui kple nyaʋiʋli siwo ŋu wotrɔ asi le vaseɖe esime woɖo gɔmeɖoanyi ƒe nɔnɔme aɖe gbɔ. Kaƒoƒo ɖesiaɖe ɖua ɖoɖowɔɖia ƒe kaƒoƒo ƒe akpa aɖe. Ne dɔwɔwɔ aɖe yɔ eɖokui zi akpe geɖe—le kpɔɖeŋu me, ne ele ati si dzi woanɔ te ɖo si goglo ŋutɔ dzi tom—la, ƒuƒoƒoa ate ŋu agbɔdzɔ, si ana vodada si nye stack overflow. Le Nix me la, esia sɔ vevietɔ ne wole ɖoɖo sesẽwo alo module systemwo me tom. Togbɔ be trampolining nye egbɔkpɔnu si sɔ (afisi dɔwɔwɔ aɖe trɔa thunk tsɔ wu be wòawɔ yɔyɔ si wogbugbɔ gblɔna tẽ, si wodaa asɔ emegbe le loop me) hã la, ate ŋu ase le eɖokui me abe egbɔkpɔnu ene. Ebia be nàxatsa wò susuŋudɔwɔwɔ ɖe ɖoɖo aɖe koŋ nu, si ate ŋu ana tameɖoɖo si le kɔdasia ŋu natsi. Nix habɔbɔa to dɔwɔnu si nye nyakpakpa wu vɛ na nɔnɔme siawo.

Alesi genericClosure Trampolines na Wò

Wowɔ `genericClosure` dɔwɔwɔ le `nixpkgs/lib` me be wòatu nuwo ƒe nutsotso si wotu ɖe gɔmedzedze ƒe ƒuƒoƒo kple dɔwɔwɔ si bua akɔnta le amesiwo ava xɔ ɖe eteƒe dzi. Eƒe asidede agbalẽ te bia be nàna "gɔmedzedze" nuawo ƒe xexlẽdzesi gbãtɔ kple "dɔwɔla" ƒe dɔwɔwɔ. Akunyawɔwɔa le alesi wòwɔa dɔe me: `genericClosure` kpɔa nusiwo le fli me dzi le ememe be woawɔ dɔ tso eŋu. Ewɔa dɔdzikpɔla ƒe dɔwɔwɔ ŋudɔ enuenu ɖe ​​nu ɖesiaɖe si le fli me ŋu be wòawɔ eƒe kplɔlawo, eye wòtsɔa wo kpena ɖe fli la ŋu ne womekpɔ wo kpɔ o. Dɔ sia yia edzi vaseɖe esime womewɔa nu yeye aɖeke o. Vevietɔ la, esia nye nusi yia edzi enuenu, ke menye esi wogbugbɔna yia edzi o. Etrampolines traversal bliboa, ekpɔa nɔnɔme dzi le heap-allocated data structure (fli kple nusiwo wosrã kpɔ ƒe hatsotso) tsɔ wu be wòaɖo ŋu ɖe yɔyɔ ƒe ƒuƒoƒoa ŋu.

    ƒe nyawo
  • Dze egɔme ƒe Ðoɖo: Èna nu gbãtɔ siwo me woatu nutsotso la tsoe ƒe xexlẽdzesi.
  • Dɔwɔla ƒe Dɔwɔwɔ: Dɔwɔwɔ sia xɔa nu ɖeka eye wòtrɔa eƒe teƒenɔlawo tẽ alo nusiwo dzi wònɔ te ɖo ƒe xexlẽdzesi.
  • Automatic Deduplication: `genericClosure` léa ŋku ɖe nusiwo ŋu wowɔ dɔ le ŋu le eɖokui si, si xea mɔ na loop siwo seɖoƒe meli na o kple dɔ siwo mehiã o.
  • Deterministic Order: Ewɔa dɔ tso nuwo ŋu le kekeme-gbãtɔ ƒe mɔnu nu, si nye nusi wodina zi geɖe ne wole nu wɔm kple nusiwo dzi woanɔ te ɖo ƒe nɔnɔmetatawo.
ƒe nyawo

Kpɔɖeŋu Nyui aɖe: Nutsitsi ƒe Nutuƒe Tutu

Tsɔe be èle kɔmpiutadziɖoɖo ƒe akpa aɖe gɔme ɖem le Mewayz modular business OS me. Nusiwo dzi woanɔ te ɖo le akpa sia si, eye nusiwo dzi woanɔ te ɖo mawo hã le woawo ŋutɔ ƒe nusiwo dzi woanɔ te ɖo. Ne èzã `genericClosure` la, àteŋu awɔ akɔnta le akpa siwo hiã ƒe hatsotso bliboa ŋu le atsyã me.

ƒe nyawo Le Mewayz, afisi modularity nye nu vevitɔ kekeake le la, asitsatsa ƒe ɖoɖo aɖe ƒe ŋuɖoɖo ɖe nu ŋu ƒe nɔnɔmetata bliboa gɔmesese le vevie na dɔwɔwɔ kple egbugbɔgawɔ. `genericClosure` naa deterministic engine be wòabu akɔnta le graph sia ŋu nyuie.
ƒe nyawo

Nix nyagbɔgblɔ bɔbɔe aɖe si ɖe esia fia enye si:

{ lib }: 1. na # Akpa aɖe ƒe nɔnɔmetata bɔbɔe aɖe si ŋu ŋkɔ kple nusiwo dzi woanɔ te ɖo. mkComp = ŋkɔ: deps: { safui = ŋkɔ; domenyinyi deps ƒe dome; }; # Ðe akpa sue aɖe ƒe nɔnɔmetata gɔme. akpaA = mkComp "A" [ ]; akpaB = mkComp "B" [ ]; coreModule = mkComp "Nu vevi" [ akpaA ƒe akpaB ]; appModule = mkComp "Dɔwɔɖoɖo" [ coreModule ]; # Dɔwɔla ƒe dɔwɔwɔ na genericClosure. # Exɔa akpa aɖe eye wòtrɔa eƒe nusiwo dzi wònɔ te ɖo tẽ. getDeps = nusi: anyigbatata (dep: { safui = dep.key; }) nu.deps; # Tu nutsotso bliboa tso appModule dzi. bliboClosure = lib.tɔtrɔ.genericClosure { . startSet = [ { safui = appModule.safui; } ]; dɔwɔla = getDeps; }; le Nuwuwu bliboe ƒe nyawo

Kɔda sia awɔ xexlẽdzesi si me `App`, `Core`, `A`, kple `B` ƒe akpawo le. `genericClosure` dɔwɔwɔ dze egɔme kple `App`, zã `getDeps` tsɔ di eƒe ŋuɖoɖo ɖe eŋu (`Core`), emegbe ewɔ dɔ tso `Core` ŋu tsɔ di `A` kple `B`, eye mlɔeba wòwɔ dɔ tso `A` kple `B` (siwo ŋu kakaɖedzi aɖeke mele o), si na be akpa siwo katã hiã la ƒe xexlẽdzesi blibo, gbadzaa.

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

Idiomatic Nix Xɔxɔ na Dɔwɔɖoɖo Sesẽwo

To `genericClosure` zazã me la, èʋuna tso ad-hoc recursion kple manual trampolining gbɔ yia declarative, robust, eye wodoe kpɔ nyuie ƒe paradigm gbɔ. Enaa wò kɔdasia te ŋu xlẽna nyuie wu eye vodada menɔa eme fũ o, vevietɔ ne èle nu wɔm kple nyatakaka sesẽ siwo le atɔ me. Le mɔ̃ siwo le abe Mewayz ene, siwo wotu ɖe Nix ƒe gɔmeɖosewo dzi hena kakaɖedzi kple gbugbɔgawɔ gome la, nyagbɔgblɔ ƒe xɔtutu mawo zazã nye nu vevitɔ. Ekpɔa egbɔ be susu vevi si woatsɔ aƒo modules kple woƒe nusiwo dzi woanɔ te ɖo nu ƒu la wɔa dɔ nyuie eye woate ŋu atrɔ asi le eŋu, si xea mɔ na dodokpɔ ƒe vodada siwo ate ŋu ado mo ɖa tso deep recursion me eye wòakpe ɖe ɖoɖoa ƒe liƒo bliboa ŋu. Ɣebubuɣi si nàkpɔ ɖokuiwò be yeaŋlɔ dɔwɔwɔ si gbugbɔna goglo le Nix me la, bu eŋu kpɔ nenye be `genericClosure` ateŋu ana trampoline na egbɔkpɔnu si le dzadzɛ wu.

Nyabiase Siwo Wobiana Enuenu

Ŋusẽ si gbugbɔna ƒe asiɖeɖe le eŋu: Tso Stack ƒe goglome dzi va ɖo Kɔkɔme si wɔa dɔ nyuie

Le dɔwɔwɔ ƒe ɖoɖowɔɖi ƒe xexeame, vevietɔ le Nix ƒe lãwo ƒe agbenɔnɔ ƒe ɖoɖoa me la, gbugbɔgadzɔ nye xɔtunu vevi aɖe. Enye alesi míetoa nyatakaka ƒe ɖoɖo sesẽwo me, bua akɔnta le nusiwo dzi woanɔ te ɖo ŋu, eye míetuaa nusiwo woɖe tso eme deŋgɔwo. Gake ŋusẽ sia va kple mɔ̃ si wonya nyuie: gbugbɔgawɔ goglo ate ŋu ahe stack overflows vɛ, si atɔ te wò xɔtutuwo kple evaluations le kɔnu manɔmee. Tso blema ke la, dɔwɔlawo ate ŋu aɖo aɖaŋu aɖe si woyɔna be trampolining gbɔ be woatrɔ recursive function calls woazu iterative loop, si aƒo asa na stack buildup. Gake ne mɔ aɖe li si dzi woato akpɔ esia gbɔ wu, si me wotsia dzi ɖe Nix ŋu le wu le afima ya ɖe? De `lib.customisation.genericClosure`, dɔwɔwɔ sẽŋu aɖe le Nixpkgs ƒe agbalẽdzraɖoƒe si woɖo ɖi si naa mɔnu si woɖo, si wɔa dɔ nyuie be woakpɔ nyatakakawo ƒe dɔwɔwɔ gbugbɔgawɔ gbɔ stack dzimaɖitsitsi manɔmee.

Gbugbɔgadzɔ ƒe Kuxia gɔmesese le Nix

me

Le eƒe gɔmedzedze la, dɔwɔwɔ si wogbugbɔna yɔa eɖokui kple nyaʋiʋli siwo ŋu wotrɔ asi le vaseɖe esime woɖo gɔmeɖoanyi ƒe nɔnɔme aɖe gbɔ. Kaƒoƒo ɖesiaɖe ɖua ɖoɖowɔɖia ƒe kaƒoƒo ƒe akpa aɖe. Ne dɔwɔwɔ aɖe yɔ eɖokui zi akpe geɖe—le kpɔɖeŋu me, ne ele ati si dzi woanɔ te ɖo si goglo ŋutɔ dzi tom—la, ƒuƒoƒoa ate ŋu agbɔdzɔ, si ana vodada si nye stack overflow. Le Nix me la, esia sɔ vevietɔ ne wole ɖoɖo sesẽwo alo module systemwo me tom. Togbɔ be trampolining nye egbɔkpɔnu si sɔ (afisi dɔwɔwɔ aɖe trɔa thunk tsɔ wu be wòawɔ yɔyɔ si wogbugbɔ gblɔna tẽ, si wodaa asɔ emegbe le loop me) hã la, ate ŋu ase le eɖokui me abe egbɔkpɔnu ene. Ebia be nàxatsa wò susuŋudɔwɔwɔ ɖe ɖoɖo aɖe koŋ nu, si ate ŋu ana tameɖoɖo si le kɔdasia ŋu natsi. Nix habɔbɔa to dɔwɔnu si nye nyakpakpa wu vɛ na nɔnɔme siawo.

Alesi genericClosure Trampolines na Wò

Wowɔ `genericClosure` dɔwɔwɔ le `nixpkgs/lib` me be wòatu nuwo ƒe nutsotso si wotu ɖe gɔmedzedze ƒe ƒuƒoƒo kple dɔwɔwɔ si bua akɔnta le amesiwo ava xɔ ɖe eteƒe dzi. Eƒe asidede agbalẽ te bia be nàna "gɔmedzedze" nuawo ƒe xexlẽdzesi gbãtɔ kple "dɔwɔla" ƒe dɔwɔwɔ. Akunyawɔwɔa le alesi wòwɔa dɔe me: `genericClosure` kpɔa nusiwo le fli me dzi le ememe be woawɔ dɔ tso eŋu. Ewɔa dɔdzikpɔla ƒe dɔwɔwɔ ŋudɔ enuenu ɖe ​​nu ɖesiaɖe si le fli me ŋu be wòawɔ eƒe kplɔlawo, eye wòtsɔa wo kpena ɖe fli la ŋu ne womekpɔ wo kpɔ o. Dɔ sia yia edzi vaseɖe esime womewɔa nu yeye aɖeke o. Vevietɔ la, esia nye nusi yia edzi enuenu, ke menye esi wogbugbɔna yia edzi o. Etrampolines traversal bliboa, ekpɔa nɔnɔme dzi le heap-allocated data structure (fli kple nusiwo wosrã kpɔ ƒe hatsotso) tsɔ wu be wòaɖo ŋu ɖe yɔyɔ ƒe ƒuƒoƒoa ŋu.

Kpɔɖeŋu Nyui aɖe: Nutsitsi ƒe Nutsotso Tutu

Tsɔe be èle kɔmpiutadziɖoɖo ƒe akpa aɖe gɔme ɖem le Mewayz modular business OS me. Nusiwo dzi woanɔ te ɖo le akpa sia si, eye nusiwo dzi woanɔ te ɖo mawo hã le woawo ŋutɔ ƒe nusiwo dzi woanɔ te ɖo. Ne èzã `genericClosure` la, àteŋu awɔ akɔnta le akpa siwo hiã ƒe hatsotso bliboa ŋu le atsyã me.

Idiomatic Nix Xɔxɔ na Dɔwɔɖoɖo Sesẽwo

To `genericClosure` zazã me la, èʋuna tso ad-hoc recursion kple manual trampolining gbɔ yia declarative, robust, eye wodoe kpɔ nyuie ƒe paradigm gbɔ. Enaa wò kɔdasia te ŋu xlẽna nyuie wu eye vodada menɔa eme fũ o, vevietɔ ne èle nu wɔm kple nyatakaka sesẽ siwo le atɔ me. Le mɔ̃ siwo le abe Mewayz ene, siwo wotu ɖe Nix ƒe gɔmeɖosewo dzi hena kakaɖedzi kple gbugbɔgawɔ gome la, nyagbɔgblɔ ƒe xɔtutu mawo zazã nye nu vevitɔ. Ekpɔa egbɔ be susu vevi si woatsɔ aƒo modules kple woƒe nusiwo dzi woanɔ te ɖo nu ƒu la wɔa dɔ nyuie eye woate ŋu atrɔ asi le eŋu, si xea mɔ na dodokpɔ ƒe vodada siwo ate ŋu ado mo ɖa tso deep recursion me eye wòakpe ɖe ɖoɖoa ƒe liƒo bliboa ŋu. Ɣebubuɣi si nàkpɔ ɖokuiwò be yeaŋlɔ dɔwɔwɔ si gbugbɔna goglo le Nix me la, bu eŋu kpɔ nenye be `genericClosure` ateŋu ana trampoline na egbɔkpɔnu si le dzadzɛ wu.

Tsɔ Wò Dɔwɔƒea Naɖɔ Ðo kple Mewayz

Mewayz tsɔa asitsatsa ƒe modules 208 vaa mɔnu ɖeka dzi — CRM, fexexe, dɔa dzikpɔkpɔ, kple bubuwo. Wɔ ɖeka kple zãla 138,000+ siwo na woƒe dɔwɔwɔ le bɔbɔe.

Dze egɔme Femaxee Egbe →
ƒe nyawo

Try Mewayz Free

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

Start managing your business smarter today

Join 6,207+ businesses. Free forever plan · No credit card required.

Ready to put this into practice?

Join 6,207+ 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