Boost logo

Boost :

Subject: Re: [boost] [Hana] Announcing Hana's formal review next week (June 10th)
From: Louis Dionne (ldionne.2_at_[hidden])
Date: 2015-06-15 16:39:08


Vicente J. Botet Escriba <vicente.botet <at> wanadoo.fr> writes:

>
> Le 05/06/15 21:18, Glen Fernandes a écrit :
> > Dear Boost community,
> >
> > The formal review of Louis Dionne's Hana library starts Monday, 10th
> > June and ends on 24th June.
> >
> > Hana is a header-only library for C++ metaprogramming that provides
> > facilities for computations on both types and values. It provides a
> > superset of the functionality provided by Boost.MPL and Boost.Fusion
> > but with more expressiveness, faster compilation times, and faster (or
> > equal) run times.
> > <snip>
> > We encourage your participation in this review. At a minimum, kindly
> > state:
> Here is my mini review. I have created some issues on github. My vote is
> not subject to the resul½˜…¹ä½˜Ñ¡•´¸()Q¡…¹­Ì™½Èå½Õȁɕ٥•Ü°Y¥•¹Ñ”¸±Í¼°Ñ¡…¹­Ì„±½Ð™½ÈÑ¡”¥ÍÍՕ́½¸¥Ñ!Õˆì)Ñ¡•Í”Ý¥±°‘•™¥¹¥Ñ•±ä½¹ÑÉ¥‰ÕÑ”Ñ¼¥µÁɽ٥¹œÑ¡”ÅÕ…±¥Ñ䁽˜Ñ¡”±¥‰É…Éä¸(((ø€ø€´]¡•Ñ¡•Èå½Ô‰•±¥•Ù”Ñ¡”±¥‰É…ÉäÍ¡½Õ±‰”…•ÁÑ•¥¹Ñ¼ ½½ÍÐ(øe•Ì°å•Ì…¹å•Ì¸$½¹Í¥‘•È ½½Íй!…¹„µÕÍЁ‰”…•ÁÑ•¥¹Ñ¼ ½½Íи(ø€ø€´e½Õȁ¹…µ”(øY¥•¹Ñ”(¸ ½Ñ•Ð͍ɥ‰„(ø€ø€´e½Õȁ­¹½Ý±•‘”½˜Ñ¡”Áɽ‰±•´‘½µ…¥¸¸(ø½½­¹½Ý±•‘”…¹$¡…Ù”±•…ɸ„±½Ðµ½É”Ý¥Ñ Ñ¡”Ý½É¬½˜1½Õ¥Ì¥¸(ø!…¹„¸(ø€ø(ø€øe½Ô…É”ÍÑɽ¹±ä•¹½ÕÉ…•Ñ¼…±Í¼Áɽ٥‘”…‘‘¥Ñ¥½¹…°¥¹™½Éµ…Ñ¥½¸è(ø€ø€´]¡…Ё¥Ìå½Õȁ•Ù…±Õ…Ñ¥½¸½˜Ñ¡”±¥‰É…ÉäÌè(ø€ø€€€€¨•Í¥¸(ø É¥±±¥…¹Ð°…ݕͽµ”¸M••¸ÑåÁ•Ì…́م±Õ•Ì¥Ì„É•Ù½±ÕÑ¥½¹…É䁑•Í¥¸¸(øQ¡…¹­Ì1½Õ¥Ì¸()½È™Õ±°‘¥Í±½ÍÕÉ”°$µÕÍЁ…‘µ¥ÐÑ¡…Ёѡ”¥‘•„½˜Í••¥¹œÑå22fÇVW2v0¦f—'7B'&÷Vv‡BW'’ÖGB6Æ'&W6RæB¦6‚Æ–æRB&ö÷7D6öâ#"³Ò␦F—66÷fW&VBF†RF†–æröâ×’÷vâ–â#B³%ÒÂ'WBF†W’FVf–æ—FVÇ’vW&RF†W&P¦f—'7Bà  £â’Æ–¶VBF†Rv’F†R†6¶VÂ6öæ6WG2†fR&VVâFFVBFò2²³Bà£à£â–â&Wf–÷W2fW'6–öâöbF†RÆ–'&'’„’FöâwB¶æ÷rv†VâF†—2†2&VVà£â6†ævVB’Â’Æ–¶V@£â¢G—R6Æ76W2À£â¢F†R–ç7FçF–F–öâV—F†W"F—&V7FÇ’÷"v†VâF†RG—R—2â–ç7Fæ6Röb£âG—R6Æ72‡W6–ærF†R6V6öæB&ÖWFW"’à ¤–b–÷R&R&VfW'&–ærFòWFöÖF–6ÆÇ’ÖFVf–æVBÖöFVÇ2ÂF†—2—27F–ÆÂ÷76–&ÆRà¤f÷"W†×ÆRÂF†RÖöFVÂöbÖöæö–B—2WFöÖF–6ÆÇ’&÷f–FVBf÷"ç’6öç7Fç@¦6öçF–æ–ær6öÖWF†–ærF†Bw2Ööæö–BFöó  ¢FV×ÆFRÇG—VæÖR3à¢7G'V7BÇW5ö–×ÃÄ2Â2Âv†VãÀ¢ÖöFVÇ3Ä6öç7FçBÂ3â‚’b`¢Ù[Ï[Û›ÚY \[˜[YHÎŽ˜[YWÝ\OŠ
Bˆˆˆ ËÈ[\[Y[][ÛˆÙˆ\Ê
BˆN‚ˆ[\]H\[˜[YHÏ‚ˆÝXÝ™\›×Ú[\ËÚ[ˆ[Ù[ÏÛÛœÝ[ ÏŠ
H ‰‚ˆ[Ù[Ï[Û›ÚY \[˜[YHÎŽ˜[YWÝ\OŠ
Bˆˆˆ ËÈ[\[Y[][ÛˆÙˆ™\›Ï‚ˆN‚•HY™™\™[˜ÙHÚ]H™]š[Ý\È\ÚYÛ‹RTË\È][ˆÜ™\ˆÈYš[™B˜H[Ù[Ùˆ[Û›ÚY [ÝH\ÙYÈÜš]HÛÛY][™ÈZÙB‚ˆ[\]H\[˜[YHÏ‚ˆÝXÝ[Û›ÚYŽš[œÝ[˜ÙOËËÚ[ˆ[Ù[ÏÛÛœÝ[ ÏŠ
H ‰‚ˆ[Ù[Ï[Û›ÚY \[˜[YHÎŽ˜[YWÝ\OŠ
Bˆˆˆ ËÈ[\[Y[][ÛˆÙˆ\Ê
H[™™\›Ï‚ˆN‚›Ý\™H\ÜÙ[X[H\]Z]˜[[ ^Ù\][ÝHØ[ˆ›ÝÈYš[™H[™]šYX[˜[ÛÜš]\È[Ü™HX\Ú[K‚‚‚ˆ
ˆHZ[š[][HYš[š][ÛˆÙ][™ÝÈÈherit from them.
> * The split concepts and data_types to make it more evident the distinction.
>
> All this has now disappeared, surely as requested in this ML :(.
>
>
> Things that I like less are
>
> * the data_type (tag) concept. IMO, what is behind is a type
> constructor. A type constructor is a class that has a nested alias
> template apply to build new types. A class template can also be seen as
> a type constructor by lifting it.

For others reading this, see this issue [3] for the ongoing discussion
about this.

> * the fact that the result type of a lot of functions is not a concrete
> type or is not defined.

This is a real difficulty. I could provide types, but then they wouldn't be
useful at all in most cases, and they would often be straigÕÀµ¥Í±•…‘¥¹œ¸)½ÈÑ¡”É•™•É•¹”½˜½Ñ¡•É́ɕ…‘¥¹œÑ¡¥Ì°Á±•…Í”Í•”Ñ¡¥Ì¥ÍÍÕ”lÑt¸(((ø€¨Ñ¡”™…ÐÑ¡…Ёѡ”¥¹Ñ•É™…”¥Ì¹½ÐÑåÁ•°Ñ¡”ÕÍ”½˜…ÕѼ…¹±…µ‰‘…Ì(ø•Ù•ÉåÝ¡•É”¥Ì±•Í́¥¹™½Éµ…Ñ¥Ù”Ñ¡…Ё„ÑåÁ•¥¹Ñ•É™…”¸()Q¡…Ё¥Ì„‘½Õµ•¹Ñ…Ñ¥½¸¥ÍÍÕ”°É¥¡Ðü$½Õ±‘•Ù¥Í”„½¹Ù•¹Ñ¥½¸Ý¡•É”Ñ¡”)½¹•ÁÑ́•áÁ•Ñ•™É½´•… …ɝյ•¹Ð¥ÌÕÍ•¥¸Ñ¡”Í¥¹…ÑÕÉ”°Í½µ•Ñ¡¥¹œ)±¥­”Ñ¡¥Ìè((€€€…ÕѼ™½±‘}±•™Ð€ômt¡½±‘…‰±”˜˜áÌ°…ÕѼ˜˜ÍÑ…Ñ”°…ÕѼ˜˜™Õ¹Ñ¥½¸¤ì(€€€€€€€€¼¼€¸¸¸(€€€ôì() ÕЁѡ•¸$Ý½Õ±ÍÑ¥±°¹••Ñ¼•áÁ±…¥¸Ñ¡”Í¥¹…ÑÕÉ”¥¸Áɽ͔°¤¹”¸Ñ¡”™…Ð)Ñ¡…Ёѡ”™Õ¹Ñ¥½¸µÕÍЁх­”„ÍÑ…Ñ”…¹…¸•±•µ•¹Ð™É½´Ñ¡”½±‘…‰±”°…¹Í¼)½¸¸¹å݅䰁$´½Á•¸Ñ¼Í՝•ÍÑ¥½¹Ì°‰ÕЁ¡•Ñ•É½•¹•½ṌÁɽÉ…µµ¥¹œ‘•™¥¹¥Ñ•±ä)‰É¥¹Ì‘¥™™•É•¹Ð‘½Õµ•¹Ñ…Ñ¥½¸¡…±±•¹•Ì™É½´ÕÍÕ…°•¹•É&öw&ÖÖ–ærà  £â¢F†R6–væGW&R2âÇFW&æF—fRv’FòFVf–æRF†R–çFW&f6R6†÷VÆB&P£âFö7VÖVçFVBà ¥F†RW6vRöbF†R6–væGW&RFòFö7VÖVçBF†R–çFW&f6R—2æ÷rW‡Æ–æVB@§F†RVæBöbF†RGWF÷&––â6V7F–öâW‡Æ–æ–ær†÷rFòW6RF†R&VfW&Væ6P¦Fö7VÖVçFF–öââF†—2—2—77VR³UÒà £â’v÷VÆBf–æBÖ÷&RW6VgVÂFòFVf–æRF†R6–væGW&R&Vf÷&RF†RFW67&—F–öâà ¥6ò–÷Rv÷VÆB&VfW"F†RFW67&—F–öâ–âv÷&G2Fò6öÖRgFW"F†R6–væGW&R–à§6VÖ’Öf÷&ÖÂÖF‚ÆæwVvSò’wVW72’6÷VÆBG'’F†B÷WBæB6VR†÷r—BÆöö·0¦Æ–¶RÂ'WB’ÒVæFW"F†R–×&W76–öâF†BÖ÷7BV÷ÆRv÷VÆB&VfW"—BF†R÷F†W §v’&÷VæBâ7&VFVB—77VR³eÒFò&VÖVÖ&W"FòG'’—B÷WBà  £â¢F†—2—2Æ–'&'’v—F‚Æ÷Böb6öæ6WG2â—B—2æ÷BV7’Fòf–æBF†P£â6÷'&V7BæÖRf÷"V6‚öbF†VÒæBVÙˆH[˜Ý[ÛœÈ[ˆHÊÊÈÛÜ›ˆÚ[ˆHÛÛ˜Ù\ÈÛÛYHœ›ÛH[›Ý\ˆ[™ÝXYÙHÚ]Y™™\™[\ÝÜžK‚ˆ\™H\™HÛÛYH˜[Y\È]HÛ‰ÝZÙK]H™XÛÙÛš^™H]š[™[™ÈBˆÛÚ\™[Ù]Ùˆ˜[Y\È\È›ÝX\ÞK‚‚ˆ
ˆH˜XÝ][H[˜Ý[ÛœÈ\™H[ˆHØ[YH˜[Y\ÜXÙKˆ\È[\Bˆ]ÙH™YYÈš[™HY™™\™[˜[YH›ÜˆXXڝ[˜Ý[Û‹ˆXZÚ[™È\ÙHÙ‚ˆ˜[Y\ÜXÙ\ț܈XXÚÛÛ˜Ù\YHœ™YYÛHYÜ™YK‚‚“Û™HÙˆ^H™X\œÈ\È]\ÈÛÝ[XZÙHHXœ˜\žH]XÚ[Ü™HÛÛ\XØ]Y ™\ÜXÚX[H›Üˆ™]È\Ù\œËˆÚ]ÛÝ[\[ˆYˆ[ÝHYÈ™Yš^XXÚ˜[ÛÜš]HÚ]H˜[YHÙˆHÛÛ˜Ù\]Yš[™\È]ÈHÛ›ÝÈHÛÝ[œÛÛY][Y\È\ÚÈ^\Ù[ˆš^KÚ]ÛÛ˜Ù\Yš[™\È\ÏÈ‹ÛÈHØ[ˆÛ›Bš[XYÚ[™HHÛÜœÙH›ÜˆÝ\ˆ\Ù\œË‚‚“^H™Y™\™[˜ÙHÛȘ\ˆ\Èn to deal with this missing degree of liberty
by selecting names that do not clash. It is sometimes a bit annoying, but
I think the resulting simplicity is worth it.

> * The functional part has disappeared as there were some overlapping
> with Boost.Fit (We need now Boost.Fit).

Technically, it's still part of Hana. It was hidden in the Details section
of the documentation to give me the liberty to switch to Fit in the future,
but I wouldn't consider its functionality gone for good.

> * the instantiation either directly or when the type is an instance of a
> type class (using the second parameter).

This was also listed in the things you liked, so I guess you have a love and
hate relationship with this feature :-).

> I'm not yet clear about
> * the ÐÑ¡…Ё!…¹„¡…́ɕ¥µÁ±•µ•¹Ñ•Á…ÉЁ½˜Ñ¡”ÍÑ…¹‘…ɐÑ¼…Ù½¥(ø‘•Á•¹‘•¹¥•Ì…¹¥µÁɽٔÁ•É™½Éµ…¹•Ì¸%5!<°Ñ¡¥Ì¥Ì¹½ÐÑ¡” ¬¬Ý…ä°()$¡…Ù”É•µ½Ù•!…¹„ÌÉ•¥µÁ±•µ•¹Ñ…Ñ¥½¸½˜€ñÑåÁ•}ÑÉ…¥ÑÌø½¸Ñ¡”‘•Ù•±½À‰É…¹ ¸)¥Ù•¸Ñ¡”Í¥é”Ñ¡”±¥‰É…É䁡…́É½Ý¸Ñ¼€ ø€Èԁ­1= ̤°$‘½¸ÐÑ¡¥¹¬¥ÐÝ…Ì)©ÕÍÑ¥™¥•…¹åµ½É”¹½ÐÑ¼ÕÍ”€ñÑåÁ•}ÑÉ…¥ÑÌø°Ý¡¥ ¥ÌÕÍÕ…±±ä…ɽչ€Ì­1= ̸)Ё™¥ÉÍаÝ¡•¸!…¹„Ý…́ɕ…±±äÍµ…±°°$Ñ¡¥¹¬¥ÐÝ…́©ÕÍÑ¥™¥•¸(((ø‰ÕЁ5…剔Ñ¡” ¬¬ÍÑ…¹‘…ɐ±¥‰É…ÉäÍ¡½Õ±‰”ÍÑÉՍÑÕÉ•¥¸„‘¥™™•É•¹Ð(øÝ…丁5…剔Ñ¡”•áÁ•Ñ•µ½‘Õ±•Ì½Õ±¡•±À¡•É”¸()$Ñ¡¥¹¬Á…ÉЁ½˜Ñ¡”ÍÑ…¹‘…ɐ±¥‰É…ÉäÍ¡½Õ±‰”ÍÑÉՍÑÕÉ•¥¸„‘¥™™•É•¹ÐÝ…ä°)¹¼‘½Õ‰Ð½¸Ñ¡¥Ì¸$Ý½Õ±‰”¡…ÁÁäÝ¥Ñ Í±¥¡Ñ±ä™¥¹•ÈµÉ…¥¹•¡•…‘•É̸)Ёѡ”Ù•É䁱•…Íа¥ÐÝ½Õ±‰”É•…ͽ¹…‰±”Ñ¼…ͬ™½È((€€€€ñFVvW%÷6WVVæ6SâòòÖ¶Uö–æFW…÷6WVVæ6RbÀ¢Æ–çFVw&Åö6öç7FçCâòò7FC£§G'VU÷G—RbÀ¢Ç—#âòò7FC£§—"Âæ÷F†–ærVÇ6R  £â⢖×ÆVÖVçFF–öà£â’W6VBFò–ç7V7BF†RöÆBfW'6–öââ’†fRÆW72–ç7V7FVBF†R7W'&VçBöæRà£à£â’f–æB—BV—FR6ÆV"æBVÆVvçBWfVâ–b’&VfW"F†R&6†—FV7GW&Rö`£âF†RöÆBfW'6–öâà£à£âà£ââ¢Fö7VÖVçFF–öà£âfW'’vööBGWF÷&–Âà£à£âF†RFö7VÖVçFF–öâv÷VÆB–×&÷fRÆ÷Bv—F‚&WGFW"FW6–vâ&F–öæÆP£â6V7F–öâà£â¢v†B6öæ6WB—2æB†÷rF†RÖ—2FöæRà ¥F†—2v–ÆÂ&R†æFÆVB'’F†R6V7F–öâöâ$7&VF–æræWr6öæ6WG2"–âF†P¢$W‡FVæF–ærF†RÆ–'&'’"6V7F–öâ‡v†–6‚—2æ÷r$†æw26÷&R"öâFWfVÆ÷’à  £â¢v†BFröFFG—R—2Âv‡’FòvRæVVB—BÂÇFW&æF—fW2ÂæB†÷rÆÀ£âF†—2v÷&·2à ¥Fw2&Ræ÷rW‡Æ–æVBˆH™]ÈÙXÝ[ÛˆX›Ý]YÜÈÛˆH]™[Üœ˜[˜Ú ‚‚‚ˆ
ˆ˜[Z[™È[™Ü™\ˆÙˆ\˜[Y]\œÂ‚’H\ÝYYH˜][Û˜[H›ÜˆÚ]š]™\È^H˜[YHÚÚXÙ\È[™HÜ™\ˆÙ‚œ\˜[Y]\œË‚‚‚ˆ
ˆÚH[™Ú[ˆœ™YH[˜Ý[ÛœÈ܈Y[X™\ˆ[˜Ý[ÛœÈ\™H\ÙY ‚‚’IÛH›ÝÝ\™HÚ]\ˆ]\È[˜IÜț؈È^Z[ˆÚHœ™YH[˜Ý[ÛœÈ\™B˜™]\ˆ[ˆY[X™\ˆ[˜Ý[ۜț܈Ù[™\šXÈ›Ùܘ[[Z[™ËˆHÛ‰ÝÛ›Ý˝]’H™Y[ZÙH[ž[Û™H™XY[™È[˜IÜÈ]ÜšX[ÛÝ[Û›ÝÈH[œÝÙ\ˆ‹JK‚‚‚ˆH™Y™\™[˜ÙHØÝ[Y[][Ûˆ\ÈH]Hš]ÛÛ™\Ú[™È›ÜˆÛÛYHÛ™H\ÙYˆÈHÊÊÈÝ[™\™Ø^K‚ˆ
ˆH\›\ÈÛÛ˜Ù\ ÔÝ\\˜Û\ÜËÓY]ÙË ‹‹‚‚“›ÝÈ\Ú[™ÈÛÛ˜Ù\ È”™Yš[™YÛÛ˜Ù\‹Ñ[˜Ý[ۜ˂‚‚ˆ
ˆH[Ü™H›Ü›X[Yš[š][ÛˆÙˆHX\[™ÜÈœ›ÛHÛۘܙ]H\HˆÛÛ˜Ù\È[™HÝ\\ˆÛ\ÜÙ\‚ˆX^X™H\s enough for Boost, but I would like to see a more C++
> standard like documentation.

I'm not sure I understand what you mean by a more formal definition of the
mapping from concrete type to concepts. Do you mean that the requirements
of a concept should be defined more formally?

> > * Tests
> Not inspected in depth, but it seems well covered.
> > * Usefulness
> Very useful.
>
> Even if I have not used it directly, I have taken a lot of ideas from
> his design.
> If the announced performances are there, it is clear that Boost.Hana
> will be used more a more by those that can use a C++14 compiler. I'll
> hope adding a dependency on the C++ standard library will not degrade
> the performance so much.

Adding a dependency on the standard library (ba…±±äÑ¡”€ñÑåÁ•}ÑÉ…¥ÑÌø…¹)Ñ¡”€ñÕÑ¥±¥Ñäø¡•…‘•É̤‘¼¹½ÐÍ••´Ñ¼¡…Ù”„±…ɝ”¥µÁ…Ð½¸½µÁ¥±”µÑ¥µ•Ì)É¥¡Ð¹½Ü¸ÑÕ…±±ä°¥Ðµ¥¡Ð‰”Ý½ÉÍ”™½Èµ¥É¼µ‰•¹¡µ…ɭ́‰•…ÕÍ”Ý”É”)ÁÕ±±¥¹œÍ±¥¡Ñ±äµ½É”ÍÑÕ™˜°‰ÕЁ™½È…ÑÕ…°½‘”‰…͕́¥ÐÌ½¥¹œÑ¼‰”)‰•Ñѕȁ‰•…ÕÍ”Ý”É”É•ÕÍ¥¹œ€ñÑåÁ•}ÑÉ…¥ÑÌø°Ý¡¥ •Ù•Éå½¹”¥¹±Õ‘•Ì…¹åÝ…ä¸(((ø€ø€´¥å½Ô…ÑÑ•µÁЁѼÕÍ”Ñ¡”±¥‰É…Éäü%˜Í¼è(ø9¼å•Ð¸(ø(ø$Ý¥±°‘¼¥Ð…́ͽ½¸…́$¥¹ÍÑ…±°Ñ¡”½½½µÁ¥±•ÈÙ•ÉÍ¥½¸¸()e½Ô…¸ÑÉ䁥Ё½¹±¥¹”…ЁlÝt¸(((ø€ø€€€€¨]¡¥ ½µÁ¥±•È¡Ì¤ü(ø€ø€€€€¨]¡…Ё݅́ѡ”•áÁ•É¥•¹”ü¹äÁɽ‰±•µÌü(ø€ø€´!½ÜµÕ •™™½ÉЁ‘¥å½ÔÁÕЁ¥¹Ñ¼å½Õȁ•Ù…±Õ…Ñ¥½¸½˜Ñ¡”É•Ù¥•Üü(ø€ø(ø€ø(øQ¡…¹­Ì……¥¸1½Õ¥Ì™½ÈÑ¡¥ÌÝ½¹‘•É™Õ°±¥‰É…Éä¸(ø$Ý½Õ±±¥­”Ñ¼Í•”¥¸ ½½ÍЁ„Í¥µ¥±…ȁ™Õ¹Ñ¥½¹…°±¥‰É…É䁉ÕЁѡ¥ÌÑ¥µ”(ø™½'Vâ×F–ÖRG—W2à ¥F†æ·2f÷"F†R&Wf–Wrà  ¥&Vv&G2À¤Æ÷V—2F–öææP ¥³Ó¢‡GG3¢ò÷wwrç–÷WGV&Ræ6öÒ÷vF6ƒ÷c׃uV×%'¤´…P¥³%Ó¢‡GG¢òöÆF–öææRæ6öÒö×ÃÖ7æ÷rÓ#Bò‡6Æ–FR#ÓB¥³5Ó¢‡GG3¢òöv—F‡V"æ6öÒöÆF–öææRö†æö—77VW2ó“@¥³EÓ¢‡GG3¢òöv—F‡V"æ6öÒöÆF–öææRö†æö—77VW2󓐥³UÓ¢‡GG3¢òöv—F‡V"æ6öÒöÆF–öææRö†æö—77VW2ó“@¥³eÓ¢‡GG3¢òöv—F‡V"æ6öÒöÆF–öææRö†æö—77VW2ó#¥³uÓ¢‡GG¢òöÖVÇöâæ÷&r÷væF&÷‚÷W&ÖÆ–æ²ôÕ§¶„ÔcwF–å¦D¦p 


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk