New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Printf et application partielle #2679
Comments
Comment author: administrator Salut Judicaël, Pourquoi tant de haine envers cette merveilleuse fonction printf :-)
Amicalement,
|
Comment author: administrator Added documentation (Xavier, 2001-02-12) |
Comment author: administrator
C'est très naturel, mais malheureusement c'est une erreur de Printf met en évidence ce problème de façon accrue, c'est tout. (Et tu
Tout à fait d'accord, mais le moyen de l'empêcher ?
Je ne connais personnellement aucune solution aussi générale que
Tu as raison bien sûr.
Encore une fois ce n'est pas nouveau: l'eta expansion change la
Je ne suis pas sûr que la sémantique actuelle de printf soit
Euh, ton exemple est justement un cas où ça marche parfaitement! Cordialement, Pierre Weis INRIA, Projet Cristal, Pierre.Weis@inria.fr, http://pauillac.inria.fr/~weis/ |
Original bug ID: 279
Reporter: administrator
Status: closed
Resolution: fixed
Priority: normal
Severity: minor
Category: ~DO NOT USE (was: OCaml general)
Bug description
Full_Name: Judicaël Courant
Version: 3.00+8 et antérieures
OS: Linux
Submission from: ext2.lri.fr (129.175.15.5)
A propos de la question de l'utilisation de printf et de l'application
partielle
soulevée par Charles Martin
(http://caml.inria.fr/archives/200101/msg00036.html),
quelques arguments en réaction à la réponse de Pierre Weis et une suggestion
constructive.
la réponse de Pierre est que c'est une fonctionnalité. Certes, c'est une
fonctionnalité de l'implantation actuelle. Mais rien dans la doc ne laisse
supposer
que ça fonctionne comme ça. Au contraire, il me semble assez naturel d'attendre
d'une fonction qu'un coup d'eta-expansion ne modifie pas son comportement (*).
A l'inverse, j'ai du mal à concevoir un emploi de cette fonctionnalité qui ne
soit
pas immonde.
je conçois qu'il soit difficile d'implanter printf autrement qu'avec ce
comportement (encore qu'il me semble que quelqu'un avait proposé dans le passé
une solution sans Obj.magic et que la dite solution n'avait peut-être pas ce
problème (? sans garantie) et même s'il y en a une c'est du boulot.
je sais bien que, la doc de printf ne disant rien à propos de l'application
partielle, on n'est pas censé croire qu'elle a le comportement qu'on voudrait.
Cela
dit ce comportement est très naturel.
Suggestion : pourquoi ne pas ajouter dans la doc du module printf (et pas
seulement
dans la FAQ) un avertissement disant que le comportement d'un "printf"
partiellement
appliqué est non spécifié ? Cela éviterait à ceux qui n'ont pas le code de
printf en
tête de se tromper et laisserait la porte ouverte pour changer peut-être un
jour
l'implantation.
Amicalement,
Judicaël.
(*) Taquinerie : lorsque les variables de type non généralisables ont été
introduites
en Caml, il me semble que je m'était étonné (à Pierre ?) que le truc proposé
pour
permettre à Caml de généraliser (l'eta expansion) risquait de changer la
sémantique
de certaines fonctions ; il me semble qu'on m'avait répondu alors que ce genre
de fonctions ne devraient pas exister dans des codes bien écrits, donc a bon
entendeur, salut ! :-)
PS : Il me semble qu'une des forces de Caml est d'avoir su faire des choix qui
ne
soient pas guidés par la facilité ni par ce qui existe déjà mais au contraire
guidés
par le désir d'avoir un beau langage. Le pari est à mon avis largement réussi
mais
s'il y a moyen d'avoir la cerise sur le gâteau...
PPS : pour ceux qui se poseraient encore la question, je viens de perdre une
heure
avec ce problème et en aurait certainement perdu plus si je ne m'étais pas
vaguement
rappelé que quelqu'un avait posé une question à ce sujet quelques temps avant
(le
"%a" compris par printf est d'ailleurs une invitation à la faute : c'est
tellement
joli de faire List.iter (fprintf c "%a\n" printf_term) term_list)...
The text was updated successfully, but these errors were encountered: