caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* stderr
@ 1997-05-01 13:34 David Monniaux
  1997-05-06 10:37 ` stderr Christian Boos
  1997-05-06 14:03 ` pattern matching Olivier Montanuy
  0 siblings, 2 replies; 6+ messages in thread
From: David Monniaux @ 1997-05-01 13:34 UTC (permalink / raw)
  To: Caml-list

Bonjour,

deux petites remarques en passant:

Contrairement aux usages habituels sur Unix pour les compilateurs, ocamlc
sort ses erreurs sur stdout et non stderr. Ce n'est pas bien grave, a part
que cela met les warnings au debut de la sortie demandee par -i (qui,
elle, devrait rester sur stdout).

Par ailleurs, il arrive quelquefois que l'on fasse volontairement des
pattern-matching incomplets, parce que le programme est tel que les cas
non fournis ne peuvent arriver. ocamlc produit une warning dans ce cas, ce
qui d'ailleurs aide largement a eviter des erreurs de programmation.
Le probleme est que lorsque l'on utilise cette facilite de "warnings" pour
detecter des cas "oublies", on est "parasite" par les pattern-matching
incomplets tout a fait normaux que l'on a laisses. De meme que certains
compilateurs C acceptent des #pragma supprimant un certain avertissement
une fois, que l'on place avant un endroit où l'on a fait volontairement
une construction declenchant cet avertissemment, afin de n'etre pas
derange apres, serait-il possible de mettre un tel systeme dans ocaml?

-- David

"Si l'informatique marchait, cela se saurait."
Computer science student at ENS, Lyon, France
http://www.ens-lyon.fr/~dmonniau






^ permalink raw reply	[flat|nested] 6+ messages in thread

* stderr
  1997-05-01 13:34 stderr David Monniaux
@ 1997-05-06 10:37 ` Christian Boos
  1997-05-11 15:53   ` stderr Dave Mason
  1997-05-06 14:03 ` pattern matching Olivier Montanuy
  1 sibling, 1 reply; 6+ messages in thread
From: Christian Boos @ 1997-05-06 10:37 UTC (permalink / raw)
  To: David Monniaux; +Cc: caml-list


Bonjour,

David Monniaux writes:
 > Bonjour,
 > 
 > deux petites remarques en passant:

toujours en passant ...

 > Par ailleurs, il arrive quelquefois que l'on fasse volontairement des
 > pattern-matching incomplets, parce que le programme est tel que les cas
 > non fournis ne peuvent arriver. ocamlc produit une warning dans ce cas, ce
 > qui d'ailleurs aide largement a eviter des erreurs de programmation.
 > Le probleme est que lorsque l'on utilise cette facilite de "warnings" pour
 > detecter des cas "oublies", on est "parasite" par les pattern-matching
 > incomplets tout a fait normaux que l'on a laisses. De meme que certains

dans de telles circonstances, j'utilise :

	let matche_A_et_B_seulement_alors_qu'il_y'en_a_plein_d'autres =
	  function
	  A -> ...
	| B -> ...
	| _ -> failwith "pas possible d'avoir autre chose qu'A ou B ici"

parce que :
	1) on ne sait jamais (mais c'est vrai qu'il y aurait de toute facon
	   une exception Match_failure).
	2) c'est plus lisible : on peut ecrire explicitement dans le message
	   que l'on sait qu'ici on obtiendra jamais les autres cas, voire 
	   expliquer pourquoi dans un commentaire.

Mais par ailleurs, c'est vrai qu'un certain support du compilateur pour 
produire des messages d'erreur plus informatifs serait le bienvenu, je pense
par exemple a une nouvelle primitive [assert] qui eviterait d'ecrire des 
"assert" verbeux a la main (du type [assert (a < 100) "a < 100"]), et qui
renvoierait la position de l'erreur dans le source.


[English: David suggested that the warning about missing cases in pattern-
matching should be disabled using some sort of #pragma. I argue that it is
better to use the anonymous binding _ as the last case, with an
appropriate error message or comment.]


-- Christian




^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: pattern matching
  1997-05-01 13:34 stderr David Monniaux
  1997-05-06 10:37 ` stderr Christian Boos
@ 1997-05-06 14:03 ` Olivier Montanuy
  1997-05-06 19:59   ` Stefan Monnier
  1 sibling, 1 reply; 6+ messages in thread
From: Olivier Montanuy @ 1997-05-06 14:03 UTC (permalink / raw)
  To: David Monniaux; +Cc: caml-list

> Par ailleurs, il arrive quelquefois que l'on fasse volontairement des
> pattern-matching incomplets, parce que le programme est tel que les
> cas non fournis ne peuvent arriver. 

 Un programme, ca evolue, et ce qui est vrai aujourd'hui risque de
 ne plus l'etre si une autre personne doit retoucher le code.

 OCAML est ou sera utilise dans des codes ecrits par plusieurs
 personnes, il ne me parait pas judicieux de donner a quiconque un
 moyen de supprimer certains warning en douce. On fait pas du C++.


 match machin-bidule with
   case_normal -> bof
   _           -> failwith "y a un bug"


-- 
Olivier Montanuy  FT/CNET/DES/GRL
montanuy@lannion.cnet.fr





^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: pattern matching
  1997-05-06 14:03 ` pattern matching Olivier Montanuy
@ 1997-05-06 19:59   ` Stefan Monnier
  0 siblings, 0 replies; 6+ messages in thread
From: Stefan Monnier @ 1997-05-06 19:59 UTC (permalink / raw)
  To: caml-list

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1367 bytes --]

Olivier Montanuy <montanuy@lannion.cnet.fr> writes:
> > Par ailleurs, il arrive quelquefois que l'on fasse volontairement des
> > pattern-matching incomplets, parce que le programme est tel que les
> > cas non fournis ne peuvent arriver. 
> Un programme, ca evolue, et ce qui est vrai aujourd'hui risque de
> ne plus l'etre si une autre personne doit retoucher le code.

Pour ces cas là, il serait bien d'avoir une analyse suffisante qui détermine
"oh, ben, dit donc, il manque un cas dans le pattern-matching, mais c'est un
cas impossible alors j'vais rien dire". Comme ça, on évite les warnings (pour
autant que l'analyse est suffisamment maline) mon on a quand même
l'avertissement si qqun change le code.

Un tel système avait plus ou moins été développé pour SML/NJ sous le nom de
refinement-types (quoi que c'était pas tout à fait automatique).

Le compilateur Scheme "Stalin" utilise aussi un système similaire pour
déterminer quelle représentation choisir (éviter les tags quand ils ne
sont pas nécessaires).


        Stefan

-------------------
Version anglophone:

Freeman's refinement-types and other less-sophisticated analysis can get you
the best of both worlds by figuring out that a warning is not necessary
(because the case cannot happen) so that if you change the code, the warning
will reappear if the case becomes possible.


        Stefan





^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: stderr
  1997-05-06 10:37 ` stderr Christian Boos
@ 1997-05-11 15:53   ` Dave Mason
  1997-05-13 16:32     ` stderr Pierpaolo Bernardi
  0 siblings, 1 reply; 6+ messages in thread
From: Dave Mason @ 1997-05-11 15:53 UTC (permalink / raw)
  To: caml-list

Sorry, English only (I *really* have to spend a summer in Quebec or
France soon to get my French to the not-totally-embarassing stage):

The problem with Cristian's solution is that you don't automatically
get told what positions in what file had the mismatch, like you do if
you simply leave out the wildcard match.  If there were a convenient
way to get that automatic error tracking, I'd rather do as Cristian
suggests because it makes it more explicit

../Dave

Christian Boos writes:
> 
> Bonjour,
> 
> David Monniaux writes:
>  > Bonjour,
>  > 
>  > deux petites remarques en passant:
> 
> toujours en passant ...
> 
>  > Par ailleurs, il arrive quelquefois que l'on fasse volontairement des
>  > pattern-matching incomplets, parce que le programme est tel que les cas
>  > non fournis ne peuvent arriver. ocamlc produit une warning dans ce cas, ce
>  > qui d'ailleurs aide largement a eviter des erreurs de programmation.
>  > Le probleme est que lorsque l'on utilise cette facilite de "warnings" pour
>  > detecter des cas "oublies", on est "parasite" par les pattern-matching
>  > incomplets tout a fait normaux que l'on a laisses. De meme que certains
> 
> dans de telles circonstances, j'utilise :
> 
> 	let matche_A_et_B_seulement_alors_qu'il_y'en_a_plein_d'autres =
> 	  function
> 	  A -> ...
> 	| B -> ...
> 	| _ -> failwith "pas possible d'avoir autre chose qu'A ou B ici"
> 
> parce que :
> 	1) on ne sait jamais (mais c'est vrai qu'il y aurait de toute facon
> 	   une exception Match_failure).
> 	2) c'est plus lisible : on peut ecrire explicitement dans le message
> 	   que l'on sait qu'ici on obtiendra jamais les autres cas, voire 
> 	   expliquer pourquoi dans un commentaire.
> 
> Mais par ailleurs, c'est vrai qu'un certain support du compilateur pour 
> produire des messages d'erreur plus informatifs serait le bienvenu, je pense
> par exemple a une nouvelle primitive [assert] qui eviterait d'ecrire des 
> "assert" verbeux a la main (du type [assert (a < 100) "a < 100"]), et qui
> renvoierait la position de l'erreur dans le source.
> 
> 
> [English: David suggested that the warning about missing cases in pattern-
> matching should be disabled using some sort of #pragma. I argue that it is
> better to use the anonymous binding _ as the last case, with an
> appropriate error message or comment.]
> 
> 
> -- Christian
> 





^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: stderr
  1997-05-11 15:53   ` stderr Dave Mason
@ 1997-05-13 16:32     ` Pierpaolo Bernardi
  0 siblings, 0 replies; 6+ messages in thread
From: Pierpaolo Bernardi @ 1997-05-13 16:32 UTC (permalink / raw)
  To: dmason; +Cc: caml-list


   From: Dave Mason <dmason@plg.uwaterloo.ca>

   The problem with Cristian's solution is that you don't automatically
   get told what positions in what file had the mismatch, like you do if
   you simply leave out the wildcard match.  If there were a convenient
   way to get that automatic error tracking, I'd rather do as Cristian
   suggests because it makes it more explicit

In these cases I just use:

 	  function
 	  A -> ...
 	| B -> ...
 	| _ -> failwith "Useful message 498249"
                                        ^^^^^^-- a random string.

Or am I misunderstanding what you want?

Pierpaolo.




^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~1997-05-13 19:10 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-05-01 13:34 stderr David Monniaux
1997-05-06 10:37 ` stderr Christian Boos
1997-05-11 15:53   ` stderr Dave Mason
1997-05-13 16:32     ` stderr Pierpaolo Bernardi
1997-05-06 14:03 ` pattern matching Olivier Montanuy
1997-05-06 19:59   ` Stefan Monnier

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).