Discussion:
Decode UTF-8 avec caractère de substitution.
(trop ancien pour répondre)
Blady
2018-03-10 18:21:43 UTC
Permalink
Bonjour,

Dans le paquetage du standard Ada.Strings.UTF_Encoding.Strings la
fonction Decode :
function Decode (Item : UTF_8_String) return String;
provoque l'exception Encoding_Error si la chaîne contient un caractère
qui n'est pas représentable en latin 1.
Est-il envisageable d'ajouter au standard une version de Decode avec un
caractère de substitution ?
Par exemple :
function Decode (Item : UTF_8_String; Substitute : Character) return String;
Y a-t-il une raison pour que ce ne soit pas au standard ?

Merci, Pascal.
http://blady.pagesperso-orange.fr
J-P. Rosen
2018-03-11 06:50:46 UTC
Permalink
Post by Blady
Dans le paquetage du standard Ada.Strings.UTF_Encoding.Strings la
function Decode (Item : UTF_8_String) return String;
provoque l'exception Encoding_Error si la chaîne contient un caractère
qui n'est pas représentable en latin 1.
Est-il envisageable d'ajouter au standard une version de Decode avec un
caractère de substitution ?
Il y a un petit risque de compatibilité à cause d'ambiguités avec
l'autre version, surtout qu'il existe une solution simple: décoder vers
wide_wide_string, puis appeler ada.characters.conversions.to_string (qui
a la possibilité de fournir un caractère de substitution).
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr
Blady
2018-03-11 09:27:01 UTC
Permalink
Post by J-P. Rosen
Post by Blady
Dans le paquetage du standard Ada.Strings.UTF_Encoding.Strings la
function Decode (Item : UTF_8_String) return String;
provoque l'exception Encoding_Error si la chaîne contient un caractère
qui n'est pas représentable en latin 1.
Est-il envisageable d'ajouter au standard une version de Decode avec un
caractère de substitution ?
Il y a un petit risque de compatibilité à cause d'ambiguités avec
l'autre version, surtout qu'il existe une solution simple: décoder vers
wide_wide_string, puis appeler ada.characters.conversions.to_string (qui
a la possibilité de fournir un caractère de substitution).
Merci Jean-Pierre pour l'astuce.

Rq : il n'y a pas de valeur par défaut pour le caractère de substitution :
function Decode (Item : UTF_8_String; Substitute : Character) return String;
Je ne vois pas bien le risque d’ambiguïté, quel est-il ?

Merci, Pascal.
J-P. Rosen
2018-03-11 15:18:59 UTC
Permalink
Post by Blady
function Decode (Item : UTF_8_String; Substitute : Character) return String;
Je ne vois pas bien le risque d’ambiguïté, quel est-il ?
Dès qu'on rajoute une opération dans un paquetage, il y a un risque
d'incompatibilité si l'utilisateur a sa propre fonction avec le même
profil (qu'il a peut-être écrite parcequ'il ne la pas trouvée en prédéfini!)

L'ARG étant très pointilleux sur la compatibilité, cela n'interdit pas
toute évolution, mais c'est mis en balance avec l'utilité de la chose.
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr
Blady
2018-03-11 17:09:26 UTC
Permalink
Post by J-P. Rosen
Post by Blady
function Decode (Item : UTF_8_String; Substitute : Character) return String;
Je ne vois pas bien le risque d’ambiguïté, quel est-il ?
Dès qu'on rajoute une opération dans un paquetage, il y a un risque
d'incompatibilité si l'utilisateur a sa propre fonction avec le même
profil (qu'il a peut-être écrite parcequ'il ne la pas trouvée en prédéfini!)
Alors cet utilisateur (s'il utilise la clause use à bonne escient ;-)
pourra choisir la sienne ou celle du standard simplement en préfixant
avec le bon paquetage.
C'est ce que je fais, au fil des années, où le standard enrichit sa
bibliothèque et que parfois je découvre une fonction ou redécouvre une
fonction oubliée du standard, alors je remplace ma fonction perso par
celle du standard. Ainsi en utilisant la signature de la fonction du
standard mon programme est plus compréhensible pour les lecteurs qui
pourront se rapporter au standard s'il ne connaisse pas le comportement
de la fonction.
Post by J-P. Rosen
L'ARG étant très pointilleux sur la compatibilité, cela n'interdit pas
toute évolution, mais c'est mis en balance avec l'utilité de la chose.
Cela me fait penser à une discussion (sur CLA si mon souvenir est bon)
où il était question de la taille de la bibliothèque standard. Et
certains argumentaient qu'elle devaient être la plus légère possible car
le standard doit se focaliser sur le langage et non perdre du temps à
standardiser des fonctions (ce qui sûrement fastidieux je le reconnais).
Je caricature peut être un peu.
Bref, je pense tout le contraire. Il est bien d'ajouter de nouvelles
constructions au langage permettant d'exprimer simplement toute la
complexité d'un problème. Il est aussi bien d'avoir à sa disposition une
boite à outils bien remplie et standardisée.
C'est ce qui a fait le succès en son temps de Turbo Pascal, puis de Java
et plus récemment de Python.

En souhaitant une importante bibliothèque standard à Ada, Pascal.
J-P. Rosen
2018-03-11 15:21:44 UTC
Permalink
Suite:

Par exemple, l'ARG vient de rajouter les fonctions Is_Basic et To_Basic
à Wide_Character. N'étais-ce pas toi qui avais posé la question?
J'en ai fait un AI.
Blady
2018-03-11 16:50:24 UTC
Permalink
Post by J-P. Rosen
Par exemple, l'ARG vient de rajouter les fonctions Is_Basic et To_Basic
à Wide_Character. N'étais-ce pas toi qui avais posé la question?
J'en ai fait un AI.
Oui, effectivement.
Merci, c'est sympa, j'espère qu'elle aboutira, Pascal.
J-P. Rosen
2018-03-11 17:01:17 UTC
Permalink
Post by Blady
Post by J-P. Rosen
Par exemple, l'ARG vient de rajouter les fonctions Is_Basic et To_Basic
à Wide_Character. N'étais-ce pas toi qui avais posé la question?
J'en ai fait un AI.
Oui, effectivement.
Merci, c'est sympa, j'espère qu'elle aboutira, Pascal.
L'AI est "ARG approved" depuis la dernière réunion (en téléconf) et sera
soumis à WG9 en juin.

Pour les curieux:
http://www.ada-auth.org/cgi-bin/cvsweb.cgi/ai12s/ai12-0260-1.txt?rev=1.4&raw=N
--
J-P. Rosen
Adalog
2 rue du Docteur Lombard, 92441 Issy-les-Moulineaux CEDEX
Tel: +33 1 45 29 21 52, Fax: +33 1 45 29 25 00
http://www.adalog.fr
Continuer la lecture sur narkive:
Loading...