Hacker News

Trampolining Nix me GenericClosure

Nā Manaʻo

16 min read Via blog.kleisli.io

Mewayz Team

Editorial Team

Hacker News

Ke hoʻokuʻu nei i ka mana hoʻihoʻi: mai ka hohonu hoʻopaʻa i nā kiʻekiʻe kūpono

I loko o ka honua hoʻolālā hana, ʻo ia hoʻi i loko o ka kaiaola Nix, ʻo ka hoʻihoʻi ʻana he poloka kūkulu kumu. ʻO ia ke ʻano o kā mākou hele ʻana i nā kūkulu ʻikepili paʻakikī, helu i nā hilinaʻi, a kūkulu i nā derivations paʻakikī. Eia nō naʻe, hiki mai kēia mana me kahi puʻupuʻu maʻamau: hiki i ka recursion hohonu ke alakaʻi i ka hoʻoulu ʻana o ka puʻupuʻu, hoʻopau i kāu kūkulu ʻana a me nā loiloi me ka ʻole. ʻO ka mea maʻamau, hiki i nā mea hoʻomohala ke kiʻi i kahi ʻenehana i kapa ʻia ʻo trampolining e hoʻohuli i nā kelepona hana recursive i loko o kahi loop iterative, e pale aku i ka hoʻokumu ʻana i ka hoʻopaʻa ʻana. Akā he aha inā inā he ala ʻē aʻe, Nix-centric e mālama ai i kēia? E hoʻokomo i ka 'lib.customisation.genericClosure', he hana ikaika i loko o ka hale waihona puke maʻamau ʻo Nixpkgs e hāʻawi ana i kahi ala i hoʻonohonoho ʻia a maikaʻi hoʻi e mālama i ka hoʻoili ʻana i ka ʻikepili recursive me ka hopohopo ʻole.

E hoʻomaopopo i ka pilikia hoʻihoʻi ma Nix

Ma kāna kumu, kāhea ka hana recursive iā ia iho me nā manaʻo i hoʻololi ʻia a hiki i kahi kūlana kumu. Hoʻopau kēlā me kēia kelepona i kahi ʻāpana o ka waihona kelepona o ka papahana. Ke kāhea ʻia kahi hana iā ia iho he mau kaukani manawa-no ka laʻana, i ka wā e hele ana i kahi kumulāʻau hohonu loa o nā hilinaʻi-hiki ke hoʻopau ʻia ka hoʻopaʻa ʻana, e hopena i kahi hewa overflow. Ma Nix, pili pono kēia i ka loiloi ʻana i nā hoʻonohonoho paʻakikī a i ʻole nā ​​ʻōnaehana module. ʻOiai he hopena kūpono ka trampolining (kahi e hoʻihoʻi ai kahi hana i kahi puʻupuʻu ma mua o ka hana ʻana i kahi kelepona recursive pololei, a laila loiloi ʻia i loko o kahi loop), hiki ke manaʻo e like me kahi workaround. Pono ia e hoʻopili i kāu loiloi i kahi ʻano kikoʻī, hiki ke hoʻokaʻawale i ka manaʻo o ke code. Ua hoʻomohala ka hui ʻo Nix i kahi mea hana idiomatic no kēia mau hiʻohiʻona.

Pehea ka genericClosure Trampolines nou

Hoʻolālā ʻia ka hana `genericClosure` ma `nixpkgs/lib` no ka hana ʻana i ka pani ʻana o nā mea ma muli o kahi hoʻonohonoho hoʻomaka a me kahi hana e helu ai i nā mea pani. Pono kāna pūlima e hāʻawi i kahi papa inoa mua o nā mea "hoʻomaka" a me kahi hana "operator". Aia ka manaʻo ma ke ʻano o ka hana ʻana: 'genericClosure' hoʻokele kūloko i kahi pila o nā mea e hana ai. Hoʻohana pinepine ia i ka hana o ka mea hoʻohana i kēlā me kēia mea i loko o ka pila e hoʻohua i kona mau hope, e hoʻohui iā lākou i ka pila inā ʻaʻole lākou i ʻike ʻia ma mua. Ke hoʻomau nei kēia hana a hiki i ka loaʻa ʻole o nā mea hou. ʻO ka mea nui, he hana iterative kēia, ʻaʻole he recursive. He trampolines ia i ke ala holoʻokoʻa, e hoʻokele ana i ka mokuʻāina i loko o kahi hoʻonohonoho ʻikepili i hoʻokaʻawale ʻia (ke queue a me kahi pūʻulu o nā mea i kipa ʻia) ma mua o ka hilinaʻi ʻana i ka waihona kelepona.

  • E hoʻomaka: Hāʻawi ʻoe i kahi papa inoa o nā mea mua kahi e kūkulu ʻia ai ka pani ʻana.
  • Operator Function: Lawe kēia hana i hoʻokahi mea a hoʻihoʻi i ka papa inoa o kona mau hope a i ʻole nā mea hilinaʻi.
  • Hoʻopau Aunoa: Mālama 'genericClosure' i nā mea i hana ʻia, e pale ana i nā puka lou palena ʻole a me ka hana hou ʻana.
  • Ka Hoʻoholo Hoʻoholo: Hoʻoponopono ia i nā mea ma ke ʻano ākea-mua, makemake pinepine ʻia i ka wā e pili ana i nā kiʻi hilinaʻi.

He Laʻana Maʻamau: Ke kūkulu ʻana i kahi pani hilinaʻi

E noʻonoʻo ʻoe e wehewehe ana i kahi mea lako polokalamu i loko o ka Mewayz modular business OS. He mau hilinaʻi ko kēia ʻāpana, a he mau hilinaʻi ko lākou. Me ka 'genericClosure', hiki iā ʻoe ke helu nani i ka pūʻulu piha o nā ʻāpana e pono ai.

Ma Mewayz, kahi mea nui o ka modularity, ʻo ka hoʻomaopopo ʻana i ka pakuhi hilinaʻi piha o kahi kaʻina ʻoihana he mea nui ia no ka hoʻopili ʻana a me ka reproducibility. Hāʻawi ʻo 'genericClosure' i ka ʻenekini deterministic e helu pono i kēia pakuhi.

Eia kahi ʻōlelo Nix maʻalahi e hōʻike ana i kēia:

{ lib }: hoʻokuʻu # He hōʻike maʻalahi o kahi ʻāpana me kahi inoa a me nā hilinaʻi. mkComp = inoa: deps: { kī = inoa; hoʻoilina deps; }; # E wehewehe i kahi pakuhi mea liʻiliʻi. componentA = mkComp "A" [ ]; componentB = mkComp "B" [ ]; coreModule = mkComp "Core" [ componentA componentB ]; appModule = mkComp "App" [ coreModule ]; # ʻO ka hana hoʻokele no ka genericClosure. # Lawe ia i kahi ʻāpana a hoʻihoʻi i kāna mau hilinaʻi pololei. getDeps = 'ikamu: palapala 'āina (dep: { kī = dep.key; }) item.deps; # Kūkulu i ka pani piha e hoʻomaka ana mai ka appModule. fullClosure = lib.customisation.genericClosure { startSet = [ { kī = appModule.key; } ]; mea hoʻohana = getDeps; }; i loko pani piha

E hoʻopuka kēia code i kahi papa inoa i loaʻa nā ʻāpana `App`, `Core`, `A`, a me `B`. Hoʻomaka ka hana `genericClosure` me `App`, hoʻohana iā `getDeps` e huli i kona hilinaʻi (`Core`), a laila hoʻoponopono iā `Core` e loaʻa iā `A` a me `B`, a hoʻopau hope iā `A` a me `B` (ʻaʻohe mea hilinaʻi), e hopena i ka papa inoa piha o nā mea pono a pau.

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

Hoʻopili i ka Idiomatic Nix no nā Pūnaehana Paʻa

Ma ka hoʻohana ʻana i ka `genericClosure`, neʻe ʻoe mai ka ad-hoc recursion a me ka trampolining manual i kahi paradigm hoʻolaha, paʻa, a hoʻāʻo maikaʻi ʻia. Hoʻonui ia i ka heluhelu ʻana o kāu code a me ka liʻiliʻi o ka hewa, ʻoi aku hoʻi i ka wā e pili ana i nā ʻikepili paʻakikī. No nā paepae e like me Mewayz, i kūkulu ʻia ma nā loina o Nix no ka hilinaʻi a me ka hana hou ʻana, ʻo ka hoʻohana ʻana i ia ʻano hana idiomatic he kī nui. E hōʻoia i ka loiloi kumu no ka hōʻuluʻulu ʻana i nā modules a me ko lākou hilinaʻi ʻana he kūpono a hiki ke hoʻonui ʻia, e pale ana i nā hewa loiloi e hiki ke ala mai ka hoʻihoʻi hohonu a hāʻawi i ka paʻa holoʻokoʻa o ka ʻōnaehana. I ka manawa aʻe e ʻike ai ʻoe iā ʻoe iho e kākau i kahi hana hoʻihoʻi hohonu ma Nix, e noʻonoʻo inā hiki i ka 'genericClosure' ke hāʻawi i kahi trampoline i kahi hopena maʻemaʻe.

Nīnau pinepine

Ke hoʻokuʻu nei i ka mana hoʻihoʻi: mai ka hohonu a hiki i ke kiʻekiʻe kūpono

I loko o ka honua hoʻolālā hana, ʻo ia hoʻi i loko o ka kaiaola Nix, ʻo ka hoʻihoʻi ʻana he poloka kūkulu kumu. ʻO ia ke ʻano o kā mākou hele ʻana i nā kūkulu ʻikepili paʻakikī, helu i nā hilinaʻi, a kūkulu i nā derivations paʻakikī. Eia nō naʻe, hiki mai kēia mana me kahi puʻupuʻu maʻamau: hiki i ka recursion hohonu ke alakaʻi i ka hoʻoulu ʻana o ka puʻupuʻu, hoʻopau i kāu kūkulu ʻana a me nā loiloi me ka ʻole. ʻO ka mea maʻamau, hiki i nā mea hoʻomohala ke kiʻi i kahi ʻenehana i kapa ʻia ʻo trampolining e hoʻohuli i nā kelepona hana recursive i loko o kahi loop iterative, e pale aku i ka hoʻokumu ʻana i ka hoʻopaʻa ʻana. Akā he aha inā inā he ala ʻē aʻe, Nix-centric e mālama ai i kēia? E hoʻokomo i ka 'lib.customisation.genericClosure', he hana ikaika i loko o ka hale waihona puke maʻamau ʻo Nixpkgs e hāʻawi ana i kahi ala i hoʻonohonoho ʻia a maikaʻi hoʻi e mālama i ka hoʻoili ʻana i ka ʻikepili recursive me ka hopohopo ʻole.

E hoʻomaopopo i ka pilikia hoʻihoʻi ma Nix

Ma kāna kumu, kāhea ka hana recursive iā ia iho me nā manaʻo i hoʻololi ʻia a hiki i kahi kūlana kumu. Hoʻopau kēlā me kēia kelepona i kahi ʻāpana o ka waihona kelepona o ka papahana. Ke kāhea ʻia kahi hana iā ia iho he mau kaukani manawa-no ka laʻana, i ka wā e hele ana i kahi kumulāʻau hohonu loa o nā hilinaʻi-hiki ke hoʻopau ʻia ka hoʻopaʻa ʻana, e hopena i kahi hewa overflow. Ma Nix, pili pono kēia i ka loiloi ʻana i nā hoʻonohonoho paʻakikī a i ʻole nā ​​ʻōnaehana module. ʻOiai he hopena kūpono ka trampolining (kahi e hoʻihoʻi ai kahi hana i kahi puʻupuʻu ma mua o ka hana ʻana i kahi kelepona recursive pololei, a laila loiloi ʻia i loko o kahi loop), hiki ke manaʻo e like me kahi workaround. Pono ia e hoʻopili i kāu loiloi i kahi ʻano kikoʻī, hiki ke hoʻokaʻawale i ka manaʻo o ke code. Ua hoʻomohala ka hui ʻo Nix i kahi mea hana idiomatic no kēia mau hiʻohiʻona.

Pehea ka genericClosure Trampolines nou

Hoʻolālā ʻia ka hana `genericClosure` ma `nixpkgs/lib` no ka hana ʻana i ka pani ʻana o nā mea ma muli o kahi hoʻonohonoho hoʻomaka a me kahi hana e helu ai i nā mea pani. Pono kāna pūlima e hāʻawi i kahi papa inoa mua o nā mea "hoʻomaka" a me kahi hana "operator". Aia ka manaʻo ma ke ʻano o ka hana ʻana: 'genericClosure' hoʻokele kūloko i kahi pila o nā mea e hana ai. Hoʻohana pinepine ia i ka hana o ka mea hoʻohana i kēlā me kēia mea i loko o ka pila e hoʻohua i kona mau hope, e hoʻohui iā lākou i ka pila inā ʻaʻole lākou i ʻike ʻia ma mua. Ke hoʻomau nei kēia hana a hiki i ka loaʻa ʻole o nā mea hou. ʻO ka mea nui, he hana iterative kēia, ʻaʻole he recursive. He trampolines ia i ke ala holoʻokoʻa, e hoʻokele ana i ka mokuʻāina i loko o kahi hoʻonohonoho ʻikepili i hoʻokaʻawale ʻia (ke queue a me kahi pūʻulu o nā mea i kipa ʻia) ma mua o ka hilinaʻi ʻana i ka waihona kelepona.

He Laʻana Maʻamau: Ke kūkulu ʻana i kahi pani hilinaʻi

E noʻonoʻo ʻoe e wehewehe ana i kahi mea lako polokalamu i loko o ka Mewayz modular business OS. He mau hilinaʻi ko kēia ʻāpana, a he mau hilinaʻi ko lākou. Me ka 'genericClosure', hiki iā ʻoe ke helu nani i ka pūʻulu piha o nā ʻāpana e pono ai.

Hoʻopili i ka Idiomatic Nix no nā Pūnaehana Paʻa

Ma ka hoʻohana ʻana i ka `genericClosure`, neʻe ʻoe mai ka ad-hoc recursion a me ka trampolining manual i kahi paradigm hoʻolaha, paʻa, a hoʻāʻo maikaʻi ʻia. Hoʻonui ia i ka heluhelu ʻana o kāu code a me ka liʻiliʻi o ka hewa, ʻoi aku hoʻi i ka wā e pili ana i nā ʻikepili paʻakikī. No nā paepae e like me Mewayz, i kūkulu ʻia ma nā loina o Nix no ka hilinaʻi a me ka hana hou ʻana, ʻo ka hoʻohana ʻana i ia ʻano hana idiomatic he kī nui. E hōʻoia i ka loiloi kumu no ka hōʻuluʻulu ʻana i nā modules a me ko lākou hilinaʻi ʻana he kūpono a hiki ke hoʻonui ʻia, e pale ana i nā hewa loiloi e hiki ke ala mai ka hoʻihoʻi hohonu a hāʻawi i ka paʻa holoʻokoʻa o ka ʻōnaehana. I ka manawa aʻe e ʻike ai ʻoe iā ʻoe iho e kākau i kahi hana hoʻihoʻi hohonu ma Nix, e noʻonoʻo inā hiki i ka 'genericClosure' ke hāʻawi i kahi trampoline i kahi hopena maʻemaʻe.

E hoʻopololei i kāu ʻoihana me Mewayz

Hoʻokomo ʻo Mewayz i 208 mau modula pāʻoihana i loko o ka paepae hoʻokahi — CRM, hoʻopaʻa kālā, hoʻokele papahana, a me nā mea hou aku. E hui pū me 138,000+ mea hoʻohana i maʻalahi i kā lākou kaʻina hana.

Hoʻomaka manuahi i kēia lā →

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