Hacker News

Prògramadh meta teamplaid C ++ ann an stoidhle Lisp

Beachdan

12 min read Via github.com

Mewayz Team

Editorial Team

Hacker News

Seòrsa eadar-dhealaichte de dhraoidheachd Compiler: Metaprogramming Template C++ ann an stoidhle Lisp

Ann an cruth-tìre mòr leasachadh bathar-bog, tha C++ ainmeil airson a chumhachd amh agus a choileanadh. Ach, air falbh taobh a-staigh a phròiseas cruinneachaidh iom-fhillte tha paradigm a tha a’ faireachdainn cha mhòr coimheach: teamplaid metaprogramming (TMP). Nuair a thèid a thoirt chun fhìor cheann loidsigeach, bidh C ++ TMP a’ tòiseachadh a bhith coltach ri cànan prògramadh gnìomh ann fhèin, aon a bhios a’ coileanadh gu tur aig àm cruinneachaidh. Tha na co-shìntean ri Lisp, aon de na cànanan prògramaidh as sine agus as buadhaiche, iongantach agus domhainn. Leigidh an dòigh-obrach seo le luchd-leasachaidh àireamhachadh iom-fhillte agus loidsig a luchdachadh sìos bho àm ruith gu àm cruinneachaidh, a’ cruthachadh còd a tha air leth èifeachdach agus a tha sàbhailte. Tha a bhith a’ tuigsinn an dòigh-obrach seo ann an stoidhle Lisp deatamach ann a bhith a’ fuasgladh ìre ùr de tharraing, prionnsapal a tha sinn a’ cur luach mòr aig Mewayz nuair a bhios sinn a’ togail shiostaman gnìomhachais làidir, modular.

An cànan prògramadh tubaisteach taobh a-staigh C++

Chaidh teamplaidean C++ a dhealbhadh an toiseach airson seòrsa sìmplidh a chur an àite, leithid cruthachadh `Liosta` no `Liosta `. Ach, chruthaich an inbhe C ++, an tòir air coitcheannas, fo-chànan Turing-iomlan gun fhiosta. Tha seo a’ ciallachadh, gu teòiridheach, gum faod an neach-cruinneachaidh C ++ obrachadh a-mach sam bith a dh’ fhaodar a dhèanamh le prògram a dhèanamh rè pròiseas toirt a-steach an teamplaid. Nuair a chaidh an comas seo a lorg thàinig gu buil metaprogramming teamplaid. Chaidh a lorg le bhith a’ cleachdadh teamplaid speisealachadh, ath-chuairteachadh, agus paramadairean teamplaid, gum faodadh neach prògraman a sgrìobhadh a bhios an neach-cruinneachaidh a’ cur an gnìomh fhad ‘s a tha thu a’ togail an tagradh agad. Chan eil caochladairean sam bith aig a' "chànan" àm cruinneachaidh seo san t-seagh thraidiseanta; tha a staid air a ghabhail a-steach ann am paramadairean an teamplaid fhèin, agus tha na structaran smachd aige stèidhichte air ath-chuairteachadh agus cruinneachadh cumhachan.

A’ gabhail ri inntinn gnìomhail, coltach ri Lisp

Gus teamplaid metaprograms a sgrìobhadh gu h-èifeachdach, feumaidh duine gabhail ri dòigh-smaoineachaidh prògramadh gnìomh, coltach ri prògramadair Lisp. Chan eil staid no lùban mutable anns an t-seagh chlasaigeach. An àite sin, tha a h-uile càil air a choileanadh tro ath-chuairteachadh agus a bhith a 'làimhseachadh sheòrsachan agus co-dhùnaidhean ùine cruinneachaidh. Beachdaich air eisimpleir shìmplidh: obrachadh a-mach factaraidh. Ann an Lisp, is dòcha gun cleachd thu gnìomh ath-chuairteach. Ann an C++ TMP, tha an dòigh-obrach gu math coltach, ach tha e ag obair le seòrsaichean agus luachan.

  • Dàta so-ghluasadach: Dìreach mar ann an Lisp, cha ghabh an dàta ann an TMP a ghluasad. Cho luath ‘s a thèid paramadair teamplaid a shuidheachadh, chan urrainnear atharrachadh; chan urrainn dhut ach “suidheachaidhean” ùra a chruthachadh le diofar pharaimearan.
  • Tuairisgeul mar ath-aithris: Leis nach eil lùban 'airson' no 'fhad' ann, 's e ath-chuairteachadh am prìomh dhòigh airson obrachaidhean ath-aithris. Bidh teamplaid ga ghairm fhèin le paramadairean ùraichte gus an ruigear cùis bhunaiteach (tro speisealachadh teamplaid).
  • A’ làimhseachadh sheòrsan, chan e dìreach luachan: ’S e an taobh as cumhachdaiche de TMP a chomas àireamhachadh le seòrsaichean. ’S urrainn dhut liostaichean seòrsa a chruthachadh, sgrùdadh a dhèanamh airson feartan seòrsa, agus seòrsaichean a thaghadh stèidhichte air suidheachaidhean, a’ comasachadh dòighean prògramadh gnèitheach cumhachdach.

Tha am paradigm seo a’ sparradh dòigh smaoineachaidh eadar-dhealaichte, aon a tha a’ toirt prìomhachas do loidsig dearbhach thairis air ceumannan riatanach, a’ leantainn gu còd nas làidire agus nas seasmhaiche ri mearachdan.

"'S e cànan gnìomhach a th' ann am meta-chlàradh teamplaid am broinn C++. 'S e inneal cumhachdach a th' ann, ach feumaidh e smaoineachadh air prògraman ann an dòigh eile - dòigh a tha gu tric nas eas-chruthach agus matamataigeach." — Ball de Chomataidh Inbhean C++

Cleachdaidhean practaigeach ann an siostam modular

Ged a tha an eisimpleir fhactaraidh acadaimigeach, tha fìor chumhachd TMP ann an stoidhle Lisp a’ deàrrsadh ann an tagraidhean practaigeach a gheibh buannachd bho gheàrr-chunntasan neoni-runtime-os cionn. Mar eisimpleir, faodar a chleachdadh gus structaran dàta làn-leasaichte a ghineadh a tha sònraichte do sheòrsa sònraichte, gus rèiteachadh iom-fhillte a dhearbhadh aig àm cruinneachaidh, no gus pàtrain dealbhaidh sòlaimte leithid Dealbhadh Stèidhichte air Poileasaidh a bhuileachadh. Ann an co-theacsa àrd-ùrlar mar Mewayz, a tha ag amas air a bhith na OS gnìomhachais modular, tha na dòighean sin air leth luachmhor. Leigidh iad leinn prìomh phàirtean a thogail a tha an dà chuid air leth sùbailte agus air leth èifeachdach. Faodar API modal a dhealbhadh a’ cleachdadh TMP gus riaghailtean gnìomhachais agus dàimhean dàta a chuir an gnìomh aig ìre seòrsa, a’ glacadh mì-rèiteachaidhean a dh’ fhaodadh a bhith ann fada mus tèid am bathar-bog a chleachdadh. Tha an sàbhailteachd ùine cruinneachaidh seo deatamach airson a bhith a’ togail nan siostaman earbsach, so-ruigsinneach air a bheil gnìomhachasan an urra.

An mean-fhàs agus an àm ri teachd le `constexpr`

Chaidh TMP tràth C++ a chàineadh gu tric airson a cho-chòrdadh cryptic agus amannan cruinneachaidh slaodach. Ag aithneachadh seo, tha comataidh inbhean C ++ bhon uair sin air feartan ùine cruinneachaidh a tha nas fhasa do luchd-leasachaidh a thoirt a-steach, gu sònraichte `constexr` agus, o chionn ghoirid, `consteval`. Tha na feartan sin a’ ceadachadh mòran àireamhachadh a dh’ fheumadh cleasan teamplaid iom-fhillte a bhith air an sgrìobhadh a’ cleachdadh co-chòrdadh C ++ air a bheil sinn eòlach, riatanach a bhios a’ coileanadh aig àm cruinneachaidh. Ach, tha an dòigh-obrach TMP ann an stoidhle Lisp fhathast buntainneach airson àireamhachadh stèidhichte air seòrsa agus suidheachaidhean a dh’ fheumas an smachd as bunaitiche air pròiseas gluasad teamplaid. Tha speactram de dh’ innealan aig an leasaiche C ++ ùr-nodha, bho TMP traidiseanta gu gnìomhan `consexpr`, a’ toirt cothrom dhaibh an inneal ceart a thaghadh airson na h-obrach agus metaprograman nas glaine agus nas seasmhaiche a sgrìobhadh.

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

Ceistean Bitheanta

Seòrsa eadar-dhealaichte de dhraoidheachd Compiler: Metaprogramming Template C++ ann an stoidhle Lisp

Ann an cruth-tìre mòr leasachadh bathar-bog, tha C++ ainmeil airson a chumhachd amh agus a choileanadh. Ach, air falbh taobh a-staigh a phròiseas cruinneachaidh iom-fhillte tha paradigm a tha a’ faireachdainn cha mhòr coimheach: teamplaid metaprogramming (TMP). Nuair a thèid a thoirt chun fhìor cheann loidsigeach, bidh C ++ TMP a’ tòiseachadh a bhith coltach ri cànan prògramadh gnìomh ann fhèin, aon a bhios a’ coileanadh gu tur aig àm cruinneachaidh. Tha na co-shìntean ri Lisp, aon de na cànanan prògramaidh as sine agus as buadhaiche, iongantach agus domhainn. Leigidh an dòigh-obrach seo le luchd-leasachaidh àireamhachadh iom-fhillte agus loidsig a luchdachadh sìos bho àm ruith gu àm cruinneachaidh, a’ cruthachadh còd a tha air leth èifeachdach agus a tha sàbhailte. Tha a bhith a’ tuigsinn an dòigh-obrach seo ann an stoidhle Lisp deatamach ann a bhith a’ fuasgladh ìre ùr de tharraing, prionnsapal a tha sinn a’ cur luach mòr aig Mewayz nuair a bhios sinn a’ togail shiostaman gnìomhachais làidir, modular.

An cànan prògramadh tubaisteach taobh a-staigh C++

Chaidh teamplaidean C++ a dhealbhadh an toiseach airson seòrsa sìmplidh a chur an àite, leithid cruthachadh `Liosta` no `Liosta`. Ach, chruthaich an inbhe C ++, an tòir air coitcheannas, fo-chànan Turing-iomlan gun fhiosta. Tha seo a’ ciallachadh, gu teòiridheach, gum faod an neach-cruinneachaidh C ++ obrachadh a-mach sam bith a dh’ fhaodar a dhèanamh le prògram a dhèanamh rè pròiseas toirt a-steach an teamplaid. Nuair a chaidh an comas seo a lorg thàinig gu buil metaprogramming teamplaid. Chaidh a lorg le bhith a’ cleachdadh teamplaid speisealachadh, ath-chuairteachadh, agus paramadairean teamplaid, gum faodadh neach prògraman a sgrìobhadh a bhios an neach-cruinneachaidh a’ cur an gnìomh fhad ‘s a tha thu a’ togail an tagradh agad. Chan eil caochladairean sam bith aig a' "chànan" àm cruinneachaidh seo san t-seagh thraidiseanta; tha a staid air a ghabhail a-steach ann am paramadairean an teamplaid fhèin, agus tha na structaran smachd aige stèidhichte air ath-chuairteachadh agus cruinneachadh cumhachan.

A’ gabhail ri inntinn gnìomhail, coltach ri Lisp

Gus teamplaid metaprograms a sgrìobhadh gu h-èifeachdach, feumaidh duine gabhail ri dòigh-smaoineachaidh prògramadh gnìomh, coltach ri prògramadair Lisp. Chan eil staid no lùban mutable anns an t-seagh chlasaigeach. An àite sin, tha a h-uile càil air a choileanadh tro ath-chuairteachadh agus a bhith a 'làimhseachadh sheòrsachan agus co-dhùnaidhean ùine cruinneachaidh. Beachdaich air eisimpleir shìmplidh: obrachadh a-mach factaraidh. Ann an Lisp, is dòcha gun cleachd thu gnìomh ath-chuairteach. Ann an C++ TMP, tha an dòigh-obrach gu math coltach, ach tha e ag obair le seòrsaichean agus luachan.

Cleachdaidhean practaigeach ann an siostam modular

Ged a tha an eisimpleir fhactaraidh acadaimigeach, tha fìor chumhachd TMP ann an stoidhle Lisp a’ deàrrsadh ann an tagraidhean practaigeach a gheibh buannachd bho gheàrr-chunntasan neoni-runtime-os cionn. Mar eisimpleir, faodar a chleachdadh gus structaran dàta làn-leasaichte a ghineadh a tha sònraichte do sheòrsa sònraichte, gus rèiteachadh iom-fhillte a dhearbhadh aig àm cruinneachaidh, no gus pàtrain dealbhaidh sòlaimte leithid Dealbhadh Stèidhichte air Poileasaidh a bhuileachadh. Ann an co-theacsa àrd-ùrlar mar Mewayz, a tha ag amas air a bhith na OS gnìomhachais modular, tha na dòighean sin air leth luachmhor. Leigidh iad leinn prìomh phàirtean a thogail a tha an dà chuid air leth sùbailte agus air leth èifeachdach. Faodar API modal a dhealbhadh a’ cleachdadh TMP gus riaghailtean gnìomhachais agus dàimhean dàta a chuir an gnìomh aig ìre seòrsa, a’ glacadh mì-rèiteachaidhean a dh’ fhaodadh a bhith ann fada mus tèid am bathar-bog a chleachdadh. Tha an sàbhailteachd ùine cruinneachaidh seo deatamach airson a bhith a’ togail nan siostaman earbsach, so-ruigsinneach air a bheil gnìomhachasan an urra.

An mean-fhàs agus an àm ri teachd le `constexpr`

Chaidh TMP tràth C++ a chàineadh gu tric airson a cho-chòrdadh cryptic agus amannan cruinneachaidh slaodach. Ag aithneachadh seo, tha comataidh inbhean C ++ bhon uair sin air feartan ùine cruinneachaidh a tha nas fhasa do luchd-leasachaidh a thoirt a-steach, gu sònraichte `constexr` agus, o chionn ghoirid, `consteval`. Tha na feartan sin a’ ceadachadh mòran àireamhachadh a dh’ fheumadh cleasan teamplaid iom-fhillte a bhith air an sgrìobhadh a’ cleachdadh co-chòrdadh C ++ air a bheil sinn eòlach, riatanach a bhios a’ coileanadh aig àm cruinneachaidh. Ach, tha an dòigh-obrach TMP ann an stoidhle Lisp fhathast buntainneach airson àireamhachadh stèidhichte air seòrsa agus suidheachaidhean a dh’ fheumas an smachd as bunaitiche air pròiseas gluasad teamplaid. Tha speactram de dh’ innealan aig an leasaiche C ++ ùr-nodha, bho TMP traidiseanta gu gnìomhan `consexpr`, a’ toirt cothrom dhaibh an inneal ceart a thaghadh airson na h-obrach agus metaprograman nas glaine agus nas seasmhaiche a sgrìobhadh.

Deiseil gus na h-obraichean agad a dhèanamh nas sìmplidhe?

Co-dhiù a tha feum agad air CRM, fàirdeal, HR no na 208 modal gu lèir - tha Mewayz air còmhdach a dhèanamh leat. Rinn 138K+ gnìomhachas an tionndadh mu thràth.

Tòisich an-asgaidh →