Hacker News

Lisp-stil C ++ inyandikorugero meta gahunda

Ibitekerezo

6 min read Via github.com

Mewayz Team

Editorial Team

Hacker News

Ubwoko butandukanye bwabakusanya Magic: Lisp-Style C ++ Inyandikorugero Metaprogramming

Mubice binini byiterambere rya software, C ++ izwiho imbaraga mbisi n'imikorere. Nyamara, yashyizwe mubikorwa byayo bigoye byo gukusanya ibeshya ni paradigima yumva ari umunyamahanga: template metaprogramming (TMP). Iyo bijyanwe muburyo bukabije, C ++ TMP itangira kumera nkururimi rukora programme muburyo bwarwo, rumwe rukora rwose mugihe cyo gukusanya. Ibisa na Lisp, rumwe mundimi za kera kandi zikomeye cyane zo gutangiza porogaramu, ziratangaje kandi zimbitse. Ubu buryo butuma abaterankunga bapakurura comptabilite hamwe na logique kuva mugihe cyo gukora kugeza igihe cyo gukora, gukora code nziza kandi yubwoko-umutekano. Gusobanukirwa ubu buryo bwa Lisp ni urufunguzo rwo gufungura urwego rushya rwa abstraction, ihame duha agaciro cyane Mewayz mugihe twubaka sisitemu yubucuruzi ikomeye, yubusa.

Ururimi rwo Gutegura Impanuka Muri C ++

C ++ inyandikorugero zakozwe muburyo bwambere bwo gusimbuza ubwoko bworoshye, nko gukora `Urutonde ` cyangwa `Urutonde `. Ariko, igipimo cya C ++, mugukurikirana rusange, kubwimpanuka yakoze Turing-yuzuye-ururimi. Ibi bivuze ko mubyukuri, ibarwa iyo ari yo yose ishobora gukorwa na porogaramu irashobora no gukorwa na C ++ compiler mugihe cyo gutangiza icyitegererezo. Ivumburwa ryubu bushobozi ryatumye havuka icyitegererezo metaprogramming. Byagaragaye ko ukoresheje inyandikorugero yihariye, recursion, hamwe nibipimo byerekana, umuntu yashoboraga kwandika progaramu uwatunganije akora mugihe yubaka porogaramu. Gukusanya-igihe "ururimi" nta gihinduka muburyo gakondo; leta yacyo igizwe nicyitegererezo cyibipimo ubwabyo, kandi imiterere yubugenzuzi bushingiye kubisubiramo no gukusanya ibintu.

Kwakira Imikorere, Lisp-imeze nka Mindset

Kugira ngo wandike neza inyandikorugero metaprogrammes, umuntu agomba gufata imitekerereze ya programme ikora, cyane nka Lisp programmer. Nta leta ihindagurika cyangwa izunguruka muburyo busanzwe. Ahubwo, ibintu byose bigerwaho binyuze muri recursion hamwe na manipulation yubwoko hamwe no gukusanya-igihe gihamye. Suzuma urugero rworoshye: kubara ibintu bifatika. Muri Lisp, urashobora gukoresha imikorere isubiramo. Muri C ++ TMP, inzira irasa cyane, ariko ikorana nubwoko nagaciro.

  • Amakuru adahinduka: Nkuko muri Lisp, amakuru muri TMP ntahinduka. Inyandikorugero imaze gushyirwaho, ntishobora guhinduka; urashobora gukora gusa "ingero" nshya hamwe nibintu bitandukanye.
  • Kwisubiramo nka Iteration: Kubera ko nta `for` cyangwa` mugihe` izunguruka, recursion nuburyo bwibanze bwo gusubiramo ibikorwa. Inyandikorugero yiyita hamwe n'ibipimo bigezweho kugeza urubanza shingiro (binyuze mu cyitegererezo cyihariye) rugeze.
  • Gukoresha Ubwoko, Ntabwo Indangagaciro gusa: Ikintu gikomeye cyane cya TMP nubushobozi bwacyo bwo kubara nubwoko. Urashobora gukora urutonde rwubwoko, ukareba ubwoko bwimiterere, hanyuma ugahitamo ubwoko bushingiye kumiterere, bigafasha tekinike rusange yo gutangiza gahunda.

Iyi paradigima ihatira uburyo butandukanye bwo gutekereza, bumwe bushyira imbere logique yo gutangaza kuruta intambwe ziteganijwe, biganisha kuri code ikomeye kandi irwanya amakosa.

. - Umunyamuryango wa C ++ Ubuziranenge

Porogaramu Ifatika muri Moderi Sisitemu

Mugihe urugero rufatika ari amasomo, imbaraga nyazo za Lisp-stil ya TMP irabagirana mubikorwa bifatika byunguka zeru-runtime-hejuru-gukuramo. Kurugero, irashobora gukoreshwa kugirango habeho uburyo bwiza cyane bwamakuru yihariye yihariye yubwoko runaka, kugirango yemeze ibishushanyo bigoye mugihe cyo gukusanya, cyangwa gushyira mubikorwa ubuhanga buhanitse nka Politiki ishingiye ku gishushanyo. Mu rwego rwa platform nka Mewayz, igamije kuba OS yubucuruzi bwa modular, ubwo buhanga ni ntagereranywa. Baratwemerera kubaka ibice byingenzi byoroshye guhinduka kandi bikora neza bidasanzwe. API ya module irashobora gushushanywa ukoresheje TMP kugirango yubahirize amategeko yubucuruzi nubusabane bwamakuru kurwego rwubwoko, ifata ibishobora kubaho nabi mbere yuko software ikorwa. Umutekano wo gukusanya-igihe ningirakamaro mu kubaka sisitemu yizewe, yagutse ubucuruzi bushingiye.

Ubwihindurize nigihe kizaza hamwe na `constexpr`

Kera C ++ TMP yakunze kunengwa kubisobanuro byayo byihuta hamwe nigihe cyo gukusanya buhoro. Kumenya ibi, komite ngenderwaho ya C ++ imaze gushyiraho byinshi-biteza imbere-guteranya-igihe cyo kuranga-igihe, cyane cyane `constexpr` na vuba aha,` consteval`. Ibiranga byemerera kubara byinshi byigeze bisabwa bigoye byerekana inyandikorugero yanditswe ukoresheje ibimenyerewe, byingirakamaro C ++ syntax ikora mugihe cyo gukusanya. Nyamara, uburyo bwa Lisp-buryo bwa TMP burakomeza kuba ingirakamaro kubwoko bushingiye kubara hamwe na ssenariyo isaba igenzurwa ryibanze kubikorwa byihuta. Iterambere rya kijyambere rya C ++ ubu rifite urutonde rwibikoresho, kuva muri TMP gakondo kugeza kuri `constexpr` imikorere, ibemerera guhitamo igikoresho cyiza kumurimo no kwandika isuku, ikoreshwa neza na metaprogramu.

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

Ibibazo bikunze kubazwa

Ubwoko butandukanye bwabakusanya Magic: Lisp-Style C ++ Inyandikorugero Metaprogramming

Mubice binini byiterambere rya software, C ++ izwiho imbaraga mbisi n'imikorere. Nyamara, yashyizwe mubikorwa byayo bigoye byo gukusanya ibeshya ni paradigima yumva ari umunyamahanga: template metaprogramming (TMP). Iyo bijyanwe muburyo bukabije, C ++ TMP itangira kumera nkururimi rukora programme muburyo bwarwo, rumwe rukora rwose mugihe cyo gukusanya. Ibisa na Lisp, rumwe mundimi za kera kandi zikomeye cyane zo gutangiza porogaramu, ziratangaje kandi zimbitse. Ubu buryo butuma abaterankunga bapakurura comptabilite hamwe na logique kuva mugihe cyo gukora kugeza igihe cyo gukora, gukora code nziza kandi yubwoko-umutekano. Gusobanukirwa ubu buryo bwa Lisp ni urufunguzo rwo gufungura urwego rushya rwa abstraction, ihame duha agaciro cyane Mewayz mugihe twubaka sisitemu yubucuruzi ikomeye, yubusa.

Ururimi rutunguranye ruri muri C ++

C ++ inyandikorugero zakozwe muburyo bwambere bwo gusimbuza ubwoko bworoshye, nko gukora "Urutonde" cyangwa "Urutonde". Ariko, igipimo cya C ++, mugukurikirana rusange, kubwimpanuka yakoze Turing-yuzuye-ururimi. Ibi bivuze ko mubyukuri, ibarwa iyo ari yo yose ishobora gukorwa na porogaramu irashobora no gukorwa na C ++ compiler mugihe cyo gutangiza icyitegererezo. Ivumburwa ryubu bushobozi ryatumye havuka icyitegererezo metaprogramming. Byagaragaye ko ukoresheje inyandikorugero yihariye, recursion, hamwe nibipimo byerekana, umuntu yashoboraga kwandika progaramu uwatunganije akora mugihe yubaka porogaramu. Gukusanya-igihe "ururimi" nta gihinduka muburyo gakondo; leta yacyo igizwe nicyitegererezo cyibipimo ubwabyo, kandi imiterere yubugenzuzi bushingiye kubisubiramo no gukusanya ibintu.

Kwakira Imikorere, Lisp-imeze nka Mindset

Kugira ngo wandike neza inyandikorugero metaprogrammes, umuntu agomba gufata imitekerereze ya programme ikora, cyane nka Lisp programmer. Nta leta ihindagurika cyangwa izunguruka muburyo busanzwe. Ahubwo, ibintu byose bigerwaho binyuze muri recursion hamwe na manipulation yubwoko hamwe no gukusanya-igihe gihamye. Suzuma urugero rworoshye: kubara ibintu bifatika. Muri Lisp, urashobora gukoresha imikorere isubiramo. Muri C ++ TMP, inzira irasa cyane, ariko ikorana nubwoko nagaciro.

Porogaramu Ifatika muri Sisitemu Modular

Mugihe urugero rufatika ari amasomo, imbaraga nyazo za Lisp-stil ya TMP irabagirana mubikorwa bifatika byunguka zeru-runtime-hejuru-gukuramo. Kurugero, irashobora gukoreshwa kugirango habeho uburyo bwiza cyane bwamakuru yihariye yihariye yubwoko runaka, kugirango yemeze ibishushanyo bigoye mugihe cyo gukusanya, cyangwa gushyira mubikorwa ubuhanga buhanitse nka Politiki ishingiye ku gishushanyo. Mu rwego rwa platform nka Mewayz, igamije kuba OS yubucuruzi bwa modular, ubwo buhanga ni ntagereranywa. Baratwemerera kubaka ibice byingenzi byoroshye guhinduka kandi bikora neza bidasanzwe. API ya module irashobora gushushanywa ukoresheje TMP kugirango yubahirize amategeko yubucuruzi nubusabane bwamakuru kurwego rwubwoko, ifata ibishobora kubaho nabi mbere yuko software ikorwa. Umutekano wo gukusanya-igihe ningirakamaro mu kubaka sisitemu yizewe, yagutse ubucuruzi bushingiye.

Ubwihindurize nigihe kizaza hamwe na `constexpr`

Kera C ++ TMP yakunze kunengwa kubisobanuro byayo byihuta hamwe nigihe cyo gukusanya buhoro. Kumenya ibi, komite ngenderwaho ya C ++ imaze gushyiraho byinshi-biteza imbere-guteranya-igihe cyo kuranga-igihe, cyane cyane `constexpr` na vuba aha,` consteval`. Ibiranga byemerera kubara byinshi byigeze bisabwa bigoye byerekana inyandikorugero yanditswe ukoresheje ibimenyerewe, byingirakamaro C ++ syntax ikora mugihe cyo gukusanya. Nyamara, uburyo bwa Lisp-buryo bwa TMP burakomeza kuba ingirakamaro kubwoko bushingiye kubara hamwe na ssenariyo isaba igenzurwa ryibanze kubikorwa byihuta. Iterambere rya kijyambere rya C ++ ubu rifite urutonde rwibikoresho, kuva muri TMP gakondo kugeza kuri `constexpr` imikorere, ibemerera guhitamo igikoresho cyiza kumurimo no kwandika isuku, ikoreshwa neza na metaprogramu.

Witeguye koroshya ibikorwa byawe?

Waba ukeneye CRM, inyemezabuguzi, HR, cyangwa modul zose 208 - Mewayz wabitwikiriye. 138K + ubucuruzi bumaze gukora switch.

{"@context": "https://schema.org", "@type": "Ingingo", "umutwe": "Lisp-style C ++ template meta porogaramu "," url ":" 0 "," umwanditsi ": {" @type ":" Organisation "," izina ":" Mewayz "," url ":" https://mewayz.com "}," uwatangaje ": {" {"@context": "https://schema.org", "@type": "FAQPage", "mainEntity": [{" Metaprogramming "," yemeye Igisubizo ": {" @ ubwoko ":" Igisubizo "," umwandiko ":" Mubice binini byiterambere rya software, C ++ izwiho imbaraga zimbaraga zayo kandi ikora. Nyamara, yashyizwe mubikorwa bigoye byo gukusanya ibishushanyo bisa nkaho ari umunyamahanga: gukora progaramu ya progaramu ya progaramu ya TMP). Gukusanya-Igihe. Bisa na Lisp, rumwe mundimi za kera kandi zikomeye cyane, ziratangaje kandi zimbitse. sisitemu. " ibyo birashobora gukorwa na porogaramu irashobora kandi gukorwa na C ++ compiler mugihe cyo gutangiza inyandikorugero mugihe cyo kuvumbura ubwo bushobozi bwatumye havuka icyitegererezo cya metaprogramming. Byagaragaye ko ukoresheje icyitegererezo cyihariye, recursion, hamwe nicyitegererezo, umuntu yakwandika progaramu ikora mugihe yubaka ibyashingiweho kandi byerekana imiterere yabyo; icyegeranyo. " Gukusanya-igihe gihamye. Reba urugero rworoshye: kubara ibintu bifatika. Muri Lisp, urashobora gukoresha imikorere isubiramo. Muri C ++ TMP, inzira irasa cyane, ariko ikorana nubwoko nindangagaciro. " Lisp-style TMP irabagirana mubikorwa bifatika byungukira kuri zeru-runtime-overhead abstraction. Urugero, irashobora gukoreshwa mugutanga amakuru yimiterere yihariye yihariye yubwoko runaka, kugirango yemeze ibishushanyo mbonera bigezweho nka Politiki ishingiye kubishushanyo mbonera byubaka muburyo budasanzwe API ya module irashobora gutegurwa hifashishijwe TMP kugirango yubahirize amategeko yubucuruzi nubusabane bwamakuru kurwego rwubwoko, ifata ibishobora kuba bitari byiza mbere yuko porogaramu ikorwa. Uyu mutekano wo gukusanya igihe ni ingenzi mu kubaka sisitemu yizewe, yagutse ubucuruzi bushingiye. "}}, {" @ ubwoko ":" Ikibazo "," Izina ":" Inyandiko " yakunze kunengwa kubisobanuro byayo byihuta hamwe nigihe cyo gukusanya gahoro. Kumenya ibi, komite ngenderwaho ya C ++ imaze gushyiraho byinshi-biteza imbere-guteranya igihe, cyane cyane `constexpr` kandi, vuba aha,` consteval` igenzura ryibanze cyane kubikorwa byigihe cyo gutangiza icyitegererezo cya C ++ igezweho ubu ifite urutonde rwibikoresho, kuva TMP gakondo kugeza kumikorere ya "constexpr", ibemerera guhitamo igikoresho cyiza kumurimo no kwandika isuku, metaprogramma zishobora kubungabungwa. "}}]}

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