Hacker News

Ukunyathela i-Nix nge-GenericClosure

Amagqabantshintshi

7 min read Via blog.kleisli.io

Mewayz Team

Editorial Team

Hacker News

Ukukhulula amandla abuyeleyo: Ukusuka kubunzulu beSitaki ukuya kuMphakamo oFanelekileyo

Kwinkqubo yehlabathi esebenzayo, ngakumbi ngaphakathi kwe-Nix ecosystem, ukuphinda-phinda sisakhiwo esisisiseko. Yindlela esinqumla ngayo ubume bedatha entsonkothileyo, sibale ukuxhomekeka, kunye nokwakha izinto eziphuma kuzo eziphucukileyo. Nangona kunjalo, eli gunya liza nomngxunya oqhelekileyo: ukuphindaphinda okunzulu kunokukhokelela ekuphuphumeni kwemfumba, ukumisa ulwakhiwo lwakho kunye novavanyo ngokungathandabuzekiyo. Ngokwemveli, abaphuhlisi banokufikelela kubuchule obubizwa ngokuba yi-trampolining ukuguqula iifowuni eziphinda-phindayo zokusebenza zibe yi-loop ephindaphindayo, ukunqanda ukwakhiwa kwestakhi. Kodwa kuthekani ukuba bekukho indlela engaphezulu, eyi-Nix-centric yokusingatha le nto? Ngena `lib.customisation.genericClosure`, umsebenzi onamandla kwithala leencwadi elisemgangathweni le-Nixpkgs elibonelela ngendlela eyakhiweyo, esebenzayo yokusingatha ukusetyenzwa kwedatha ephinda-phindayo ngaphandle koxinzelelo lwestack.

Ukuqonda iNgxaki yokuBuyisa kwakhona kwi-Nix

Embindini wayo, irecursive function izibiza ngeengxoxo ezilungisiweyo de kube imeko esisiseko ihlangatyeziwe. Umnxeba ngamnye utya inxenye yestack yenkqubo yokufowuna. Xa umsebenzi uzibiza amawakawaka amaxesha-umzekelo, xa unqumla umthi onzulu kakhulu wokuxhomekeka-i-stack inokuphela, okukhokelela kwimpazamo yokuphuphuma kwestaki. Kwi-Nix, oku kubaluleke ngakumbi xa uvavanya ulungelelwaniso olunzima okanye iinkqubo zemodyuli. Ngelixa i-trampolini sisisombululo esisebenzayo (apho umsebenzi ubuyisela i-thunk endaweni yokwenza umnxeba ophindaphindayo ngokuthe ngqo, othi emva koko uvavanywe kwi-loop), unokuziva ngathi yi-workaround. Ifuna ukusongela ingqiqo yakho kwipatheni ethile, enokuthi ingabonakali injongo yekhowudi. Uluntu lwe-Nix luphuhlise isixhobo sokuthetha ngakumbi kwezi meko.

Njani genericClosure Trampolines for You

I `genericClosure` umsebenzi kwi `nixpkgs/lib` uyilelwe ukwakha ukuvalwa kwezinto ngokusekelwe kwisiqalo kunye nomsebenzi obala abalandelayo. Isiginitsha yayo ifuna ukuba unikeze uluhlu lokuqala lwezinto "zokuqala" kunye nomsebenzi "we-opharetha". Umlingo ulele kwindlela osebenza ngayo: `Ukuvala jikelele` ngaphakathi ilawula umgca wezinto ekufuneka ziqhubeke. Isebenza ngokuphindaphindiweyo umsebenzi womsebenzisi kwinto nganye emgceni ukuvelisa abalandela bayo, ibongeze emgceni ukuba abakhange babonwe ngaphambili. Le nkqubo iyaqhubeka de kungabikho zinto zintsha ziveliswayo. Okubaluleke kakhulu, le yinkqubo ephindaphindayo, hayi into ephindaphindwayo. It trampolines yonke traversal, ulawulo karhulumente kwimfumba-eyabelwe isakhiwo sedatha (umgca kunye neseti yezinto ezityelelweyo) kunokuxhomekeka kwi-call stack.

  • Qalisa iSeti: Ubonelela ngoluhlu lwezinto zokuqala apho ukuvalwa kuya kwakhiwa.
  • Umsebenzi womSebenzi: Lo msebenzi uthatha into enye kwaye ubuyisela uluhlu lwabalandela ngqo okanye abaxhomekeke kuyo.
  • Ukhuphelo oluzenzekelayo: `Ukuvala jikelele` ngokuzenzekelayo kulandelela ukuba zeziphi izinto esele zisetyenzwe, kuthintelwa ukuphoswa okungapheliyo kunye nomsebenzi ongafunekiyo.
  • Umyalelo wokumisela: Isetyenza izinto ngendlela ebanzi, edla ngokunqweneleka xa ujongana neegrafu zokuxhomekeka.

Umzekelo osebenzayo: Ukwakha ukuValwa koXhomekeko

Khawufane ucinge ukuba uchaza icandelo lesoftware ngaphakathi kweMewayz yemodyuli yeshishini OS. Eli candelo linokuxhomekeka, kwaye ezo zixhomekeke zinokuxhomekeka kwazo. Usebenzisa `Ukuvala jikelele`, ungabala ngobuchule iseti epheleleyo yamacandelo afunekayo.

E-Mewayz, apho ukumodareyitha kubaluleke kakhulu, ukuqonda igrafu epheleleyo yokuxhomekeka kwenkqubo yeshishini kubalulekile ekuhanjisweni nasekuveliseni kwakhona. `Ukuvala jikelele` kubonelela ngenjini yokuqinisekisa ukubala le grafu ngokufanelekileyo.

Nantsi intetho ye-Nix eyenziwe lula ebonisa oku:

{lib}:
vumela
  # Umboniso olula wecandelo elinegama kunye nokuxhomekeka.
  mkComp = igama: deps: {isitshixo = igama; ilifa deps; };

  # Chaza igrafu yecandelo elincinci.
  componentA = mkComp "A" [ ];
  componentB = mkComp "B" [ ];
  coreModule = mkComp "Core" [ componentA componentB ];
  appModule = mkComp "App" [ coreModule ];

  # Umsebenzi womsebenzisi wokuValwa ngokubanzi.
  # Ithatha icandelo kwaye ibuyisela ukuxhomekeka kwayo ngokuthe ngqo.
  getDeps = into: imephu (dep: {isitshixo = dep.key; }) item.deps;

  # Yakha ukuvalwa ngokupheleleyo ukuqala kwi-appModule.
  Ukuvala ngokupheleleyo = lib.customisation.genericClosure {
    startSet = [ {isitshixo = appModule.key; }];
    umsebenzisi = getDeps;
  };
kwi
  Ukuvala ngokupheleleyo

Le khowudi iyakuvelisa uluhlu oluqulathe i-`App`, `Core`, `A`, kunye `B` amalungu. Umsebenzi othi `Ukuvala jikelele` uqalwe nge `App`, esetyenziswe `getDeps` ukufumana ukuxhomekeka kwayo (`Core`), emva koko kusetyenzwe `Core` ukuze kufumaneke `A` kunye `B`, kwaye kugqitywe `A` kunye `B` (ezingaxhomekekanga), kukhokelela kuluhlu olupheleleyo, oluthe tyaba lwazo zonke iinxalenye ezifunekayo.

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

Ukwamkela i-Idiomatic Nix yeeNkqubo eziQhelekileyo

Ngokusebenzisa `Ukuvala jikelele`, usuka kwi-ad-hoc recursion kunye nokunyathela ngesandla ukuya kwisibhengezo, esomeleleyo, kunye neparadigm evavanywe kakuhle. Yenza ikhowudi yakho ifundeke ngakumbi kwaye ingabinampazamo, ngakumbi xa ujongana nedatha entsonkothileyo. Kwiiplatifti ezifana neMewayz, ezakhelwe kwimigaqo ye-Nix yokuthembeka kunye nokuphindaphinda, ukusebenzisa i-idiomatic constructs ngundoqo. Iqinisekisa ukuba i-logic engundoqo yokuhlanganisa iimodyuli kunye nokuxhomekeka kwazo zisebenza kakuhle kwaye zikhawuleza, zithintela iimpazamo zokuvavanya ezinokuvela ekubuyiseleni okunzulu kunye negalelo ekuzinzeni ngokubanzi kwenkqubo. Ngexesha elizayo xa uzibhaqa sele uza kubhala umsebenzi ophindaphindwayo kwi-Nix, qwalasela ukuba `ukuvalwa ngokubanzi' kungabonelela ngetrampoline kwisisombululo esicocekileyo.

Imibuzo Ebuzwa Rhoqo

Ukukhulula amandla abuyeleyo: Ukusuka kubunzulu beSitaki ukuya kuMphakamo oFanelekileyo

Kwinkqubo yehlabathi esebenzayo, ngakumbi ngaphakathi kwe-Nix ecosystem, ukuphinda-phinda sisakhiwo esisisiseko. Yindlela esinqumla ngayo ubume bedatha entsonkothileyo, sibale ukuxhomekeka, kunye nokwakha izinto eziphuma kuzo eziphucukileyo. Nangona kunjalo, eli gunya liza nomngxunya oqhelekileyo: ukuphindaphinda okunzulu kunokukhokelela ekuphuphumeni kwemfumba, ukumisa ulwakhiwo lwakho kunye novavanyo ngokungathandabuzekiyo. Ngokwemveli, abaphuhlisi banokufikelela kubuchule obubizwa ngokuba yi-trampolining ukuguqula iifowuni eziphinda-phindayo zokusebenza zibe yi-loop ephindaphindayo, ukunqanda ukwakhiwa kwestakhi. Kodwa kuthekani ukuba bekukho indlela engaphezulu, eyi-Nix-centric yokusingatha le nto? Ngena `lib.customisation.genericClosure`, umsebenzi onamandla kwithala leencwadi elisemgangathweni le-Nixpkgs elibonelela ngendlela eyakhiweyo, esebenzayo yokusingatha ukusetyenzwa kwedatha ephinda-phindayo ngaphandle koxinzelelo lwestack.

Ukuqonda iNgxaki yokuBuyisa kwakhona kwi-Nix

Embindini wayo, irecursive function izibiza ngeengxoxo ezilungisiweyo de kube imeko esisiseko ihlangatyeziwe. Umnxeba ngamnye utya inxenye yestack yenkqubo yokufowuna. Xa umsebenzi uzibiza amawakawaka amaxesha-umzekelo, xa unqumla umthi onzulu kakhulu wokuxhomekeka-i-stack inokuphela, okukhokelela kwimpazamo yokuphuphuma kwestaki. Kwi-Nix, oku kubaluleke ngakumbi xa uvavanya ulungelelwaniso olunzima okanye iinkqubo zemodyuli. Ngelixa i-trampolini sisisombululo esisebenzayo (apho umsebenzi ubuyisela i-thunk endaweni yokwenza umnxeba ophindaphindayo ngokuthe ngqo, othi emva koko uvavanywe kwi-loop), unokuziva ngathi yi-workaround. Ifuna ukusongela ingqiqo yakho kwipatheni ethile, enokuthi ingabonakali injongo yekhowudi. Uluntu lwe-Nix luphuhlise isixhobo sokuthetha ngakumbi kwezi meko.

Njani genericClosure Trampolines for You

I `genericClosure` umsebenzi kwi `nixpkgs/lib` uyilelwe ukwakha ukuvalwa kwezinto ngokusekelwe kwisiqalo kunye nomsebenzi obala abalandelayo. Isiginitsha yayo ifuna ukuba unikeze uluhlu lokuqala lwezinto "zokuqala" kunye nomsebenzi "we-opharetha". Umlingo ulele kwindlela osebenza ngayo: `Ukuvala jikelele` ngaphakathi ilawula umgca wezinto ekufuneka ziqhubeke. Isebenza ngokuphindaphindiweyo umsebenzi womsebenzisi kwinto nganye emgceni ukuvelisa abalandela bayo, ibongeze emgceni ukuba abakhange babonwe ngaphambili. Le nkqubo iyaqhubeka de kungabikho zinto zintsha ziveliswayo. Okubaluleke kakhulu, le yinkqubo ephindaphindayo, hayi into ephindaphindwayo. It trampolines yonke traversal, ulawulo karhulumente kwimfumba-eyabelwe isakhiwo sedatha (umgca kunye neseti yezinto ezityelelweyo) kunokuxhomekeka kwi-call stack.

Umzekelo oSebenzayo: Ukwakha ukuValwa koXhomekeko

Khawufane ucinge ukuba uchaza icandelo lesoftware ngaphakathi kweMewayz yemodyuli yeshishini OS. Eli candelo linokuxhomekeka, kwaye ezo zixhomekeke zinokuxhomekeka kwazo. Usebenzisa `Ukuvala jikelele`, ungabala ngobuchule iseti epheleleyo yamacandelo afunekayo.

Ukwamkela i-Idiomatic Nix yeeNkqubo eziQhelekileyo

Ngokusebenzisa `Ukuvala jikelele`, usuka kwi-ad-hoc recursion kunye nokunyathela ngesandla ukuya kwisibhengezo, esomeleleyo, kunye neparadigm evavanywe kakuhle. Yenza ikhowudi yakho ifundeke ngakumbi kwaye ingabinampazamo, ngakumbi xa ujongana nedatha entsonkothileyo. Kwiiplatifti ezifana neMewayz, ezakhelwe kwimigaqo ye-Nix yokuthembeka kunye nokuphindaphinda, ukusebenzisa i-idiomatic constructs ngundoqo. Iqinisekisa ukuba i-logic engundoqo yokuhlanganisa iimodyuli kunye nokuxhomekeka kwazo zisebenza kakuhle kwaye zikhawuleza, zithintela iimpazamo zokuvavanya ezinokuvela ekubuyiseleni okunzulu kunye negalelo ekuzinzeni ngokubanzi kwenkqubo. Ngexesha elizayo xa uzibhaqa sele uza kubhala umsebenzi ophindaphindwayo kwi-Nix, qwalasela ukuba `ukuvalwa ngokubanzi' kungabonelela ngetrampoline kwisisombululo esicocekileyo.

Lawula ishishini lakho ngeMewayz

Mewayz izisa iimodyuli zoshishino ezingama-208 kwiqonga elinye — iCRM, i-invoyisi, ulawulo lweprojekthi, nokunye. Joyina abasebenzisi abayi-138,000+ abenze lula ukuhamba kwabo.

Qala Mahala Namhlanje →