Re: Un comportement que je n'arrive pas à expliquer...
Sowebio - Développement (via ada-france Mailing List) <[email protected]> Wed, 13 Sep 2023 20:48:39 +0200
| Newsgroups | gmane.comp.lang.ada.france |
|---|---|
| Organization | Sowebio |
| Message-ID | <[email protected]> |
This is a multi-part message in MIME format. --------------Iv7Uz1W0NeyUsRLWpgtrbWTK Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Bonsoir Jean-Pierre, > Je ne peux pas répondre très précisément (à part Tucker Taft et Randy > Bruckardt, je ne sais pas trop qui pourrait...) ;) > mais en gros la difficulté pour résoudre les surcharges est de savoir > si le contexte externe détermine le type de ce .../... > each/dependent_/expressionof theconditional_expressionis expected to > be of type/T". > / /Merci pour ton analyse./ / / > // > Ca vaut le coup de poser la question à AdaCore ou d'essayer avec un > autre compilateur... Pas d'autre compilo ici et j'hésite à embêter AdaCore sur ça :) > NB: c'est une mauvaise idée que d'appeler un type utilisateur > "String", ou de n'importe quel autre nom défini dans Standard. Comme > Standard est implicitement le parent de toutes les autres unités, les > types y sont toujours directement visibles, et préférés aux types > synonymes que l'on pourrait croire directement visibles par une clause > "use". Ca crée souvent des confusions, et ça peut jouer dans ton cas. Oui, tu as raison bien sûr. L'idée de Pascal (Blady) est de rendre Gnoga compatible UTF-8 (avec UXString) sans reprendre toutes les sources. Je trouve que le résultat est si efficace que j'ai adopté sa technique pour notre nouveau framework v22, qui utilise Gnoga. Le portage v20 > v22 avec cette astuce a profondément simplifié le code et sa mise en œuvre. Je sais bien que ton conseil est le bon. Voici ma justification foireuse : en pratique on ne manipule plus qu'un unique type String, UTF-8, Unbounded, avec une API standard et ça règle une fois pour toute le pb des strings dans Ada. Le framework v22 masque tout. L'utilisateur est dans le confort. C'est non conforme aux bonnes pratiques et sous-optimal du coté de la mémoire. En pratique, ça impacte peu coté ram (v22 implémente des goodies Gnatcoll qui permettent de regarder ça de près) et je n'ai pas constaté d'effet de bord, hormis le cas qui fait l'objet de ce message. Aurais-je du utiliser le type de base UXString ? Certainement. Mais avec Gnoga utilisant ce subtype String, je reste uniforme. Et je ne voulais pas non plus forker Gnoga pour remettre partout le type UXString. C'est typiquement un compromis... -- Sowebio Développement [email protected] Sowebio <http://www.soweb.io> www.soweb.io <http://www.soweb.io> [email protected] +33 (0) 5 46 85 58 40 _______________________________________________ Ada-france mailing list [email protected] --------------Iv7Uz1W0NeyUsRLWpgtrbWTK Content-Type: multipart/related; boundary="------------oFrqe0ruB4O9OTfW6e9yUMrd" --------------oFrqe0ruB4O9OTfW6e9yUMrd Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <p>Bonsoir Jean-Pierre,<br> </p> <blockquote type="cite" cite="mid:[email protected]"> <div class="moz-signature">Je ne peux pas répondre très précisément (à part Tucker Taft et Randy Bruckardt, je ne sais pas trop qui pourrait...)</div> </blockquote> <p>;)</p> <p><br> </p> <blockquote type="cite" cite="mid:[email protected]"> <div class="moz-signature"> mais en gros la difficulté pour résoudre les surcharges est de savoir si le contexte externe détermine le type de ce </div> </blockquote> .../...<br> <blockquote type="cite" cite="mid:[email protected]"> <div class="moz-signature"><span style="color: rgb(0, 0, 0); font-family: "Times New Roman", Times, serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 240); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;">each<span> </span></span><i style="color: rgb(0, 0, 0); font-family: "Times New Roman", Times, serif; font-size: medium; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 240); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">dependent_</i><span class="swiss" style="font-family: Arial, Helvetica, sans-serif; font-size: 14.72px; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 240); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><a moz-do-not-send="true">expression</a></span><span style="color: rgb(0, 0, 0); font-family: "Times New Roman", Times, serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 240); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"><span> </span>of the<span> </span></span><span class="swiss" style="font-family: Arial, Helvetica, sans-serif; font-size: 14.72px; color: rgb(0, 0, 0); font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 240); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"><a moz-do-not-send="true">conditional_expression</a></span><span style="color: rgb(0, 0, 0); font-family: "Times New Roman", Times, serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 240); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial; display: inline !important; float: none;"><span> </span>is expected to be of type<span> </span></span><i style="color: rgb(0, 0, 0); font-family: "Times New Roman", Times, serif; font-size: medium; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 240); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;">T". <br> </i></div> </blockquote> <p><i>Merci pour ton analyse.</i></p> <p><i><br> </i></p> <blockquote type="cite" cite="mid:[email protected]"> <div class="moz-signature"><i style="color: rgb(0, 0, 0); font-family: "Times New Roman", Times, serif; font-size: medium; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; white-space: normal; background-color: rgb(255, 255, 240); text-decoration-thickness: initial; text-decoration-style: initial; text-decoration-color: initial;"> </i></div> <div class="moz-signature">Ca vaut le coup de poser la question à AdaCore ou d'essayer avec un autre compilateur...</div> </blockquote> <p>Pas d'autre compilo ici et j'hésite à embêter AdaCore sur ça :)</p> <blockquote type="cite" cite="mid:[email protected]"> <div class="moz-signature">NB: c'est une mauvaise idée que d'appeler un type utilisateur "String", ou de n'importe quel autre nom défini dans Standard. Comme Standard est implicitement le parent de toutes les autres unités, les types y sont toujours directement visibles, et préférés aux types synonymes que l'on pourrait croire directement visibles par une clause "use". Ca crée souvent des confusions, et ça peut jouer dans ton cas.<br> </div> </blockquote> <p>Oui, tu as raison bien sûr. <br> </p> <p>L'idée de Pascal (Blady) est de rendre Gnoga compatible UTF-8 (avec UXString) sans reprendre toutes les sources. Je trouve que le résultat est si efficace que j'ai adopté sa technique pour notre nouveau framework v22, qui utilise Gnoga. Le portage v20 > v22 avec cette astuce a profondément simplifié le code et sa mise en œuvre.</p> <p>Je sais bien que ton conseil est le bon. Voici ma justification foireuse : en pratique on ne manipule plus qu'un unique type String, UTF-8, Unbounded, avec une API standard et ça règle une fois pour toute le pb des strings dans Ada. Le framework v22 masque tout. L'utilisateur est dans le confort.</p> <p>C'est non conforme aux bonnes pratiques et sous-optimal du coté de la mémoire. En pratique, ça impacte peu coté ram (v22 implémente des goodies Gnatcoll qui permettent de regarder ça de près) et je n'ai pas constaté d'effet de bord, hormis le cas qui fait l'objet de ce message.<br> </p> <p>Aurais-je du utiliser le type de base UXString ? Certainement. Mais avec Gnoga utilisant ce subtype String, je reste uniforme. Et je ne voulais pas non plus forker Gnoga pour remettre partout le type UXString. C'est typiquement un compromis...</p> <div class="moz-signature">-- <br> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <table width="160" height="148" cellspacing="2" cellpadding="2" border="0"> <tbody> <tr> <td valign="top"> <font size="-2" face="Helvetica, Arial, sans-serif"> Sowebio Développement<br> <a href="mailto:[email protected]" class="moz-txt-link-freetext">[email protected]</a><br> </font> </td> </tr> <tr> <td valign="top"><a href="http://www.soweb.io"><img title="Cliquer pour accéder au site Web" alt="Sowebio" src="cid:[email protected]" width="150" height="30" border="0"></a></td> </tr> <tr> <td valign="top"> <font size="-2" face="Helvetica, Arial, sans-serif"> <a href="http://www.soweb.io">www.soweb.io</a><br> <a href="mailto:[email protected]" class="moz-txt-link-freetext">[email protected]</a><br> +33 (0) 5 46 85 58 40 </font> </td> </tr> </tbody> </table> <br> </div> <div style="background: transparent; border: none; clear: both; display: block; float: none; position: static"><br/>_______________________________________________<br/>Ada-france mailing list<br/>[email protected]</div></body> </html> --------------oFrqe0ruB4O9OTfW6e9yUMrd Content-Type: image/png; name="QWX0BLgDJN1KSJVV.png" Content-Disposition: inline; filename="QWX0BLgDJN1KSJVV.png" Content-Id: <[email protected]> Content-Transfer-Encoding: base64 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 wud/tP/19j8VAwRWwrBNxgAAAABJRU5ErkJggg== --------------oFrqe0ruB4O9OTfW6e9yUMrd-- --------------Iv7Uz1W0NeyUsRLWpgtrbWTK--