OVH Cloud OVH Cloud

language

284 réponses
Avatar
Marilyn Dubois
Hello,

Combien de langage va-t-on inventer encore en informatique ?
Le c/c++; java; basic; Pascal; ....etc... etc...
Pourquoi perdre son temps avec ces idiomes...hein...
Pourquoi ne pas s'en tenir comme nous le faisons nous tous à l'esperanto ?
Une seule langue et puis c'est tout.
Voilà..j'attends vos commentaires.

M.D.

10 réponses

Avatar
SL
SL , dans le message , a écrit :
On avait donc tort d'être "structurellement sûr" (il n'y a que vous
pour être structurement sûr :-)) qu'elles ne peuvent pas se produire,
puisque de fait, elles se produisent, non ?


Évidemment.

C'est effectivemetn pire que le départ *si* on "ignore
silencieusement" des exceptions (j'imagine que ça veut dire mettre
un catch vide par exemple), mais ne suffit-il pas de ne *jamais* le
faire et de toujours avoir une politique pour traiter les
exceptions déclarées comme pouvant se produire, même si on est
"sûr" qu'elles ne peuvent pas se produire ?


C'est contraire au principe d'une exception : le principe des
exceptions, c'est qu'il ne faut la traiter que quand elle est
pertinente, et que dans tous les autres cas, elle court-circuite le
flot normal du code, de sorte que son traitement s'hérite suivant la
structure dynamique du programme.


"Court circuiter", d'après ce que je lis plus bas, c'est "être une
exception descendant de java.lang.RuntimeException" et non "être
propagée à l'appelant avec un 'throws' dans la signature de la
méthode" ?

Pourquoi est-ce que le "principe" des exceptions non descendantes de
java.lang.RuntimeException est mauvais ? Il consiste finalement à dire
que ce n'est pas l'utilisateur de la classe qui decide si l'exception
est "pertinente", mais son concepteur : d'une certaine façon, si je
comprends bien la logique, la politique de traitement des exceptions
(le fait de la décider pertinente ou pas) est définis dans l'API, pas
dans son utilisation. En quoi ce n'est pas défendable ?

J'avoue qu'il m'arrive de changer une exception "checkée" en exception
"non checkée", particulièrement en ayant recours au sympathique
IllegalArgumentException ou IllegalStateException, de façon à faire
remonter sans emmerdements une exception d'une couche basse à une
couche haute à travers une couche intermédiaire, de la récupérer dans
la couche haute et de la retransformer en exception "checkée". Je sais
pas si c'est défendable.

Ainsi, la politique que tu évoques peut -- et doit -- être mise en
place au plus haut niveau du programme, et agit en permanence sur
toutes les exceptions non traitées.


Oui, c'est une sécurité super. J'ai en effet tout en haut du programme
un nombre incroyable de catch, et même des try les uns dans les autres
pour utiliser les bons finally. Le finally, au passage, implique il me
semble pour être utile de traiter toujours les exceptions.

Les exceptions déclarées mettent en échec ce principe, justement en
obligeant une gestion locale des exceptions.


On peut se contenter de récupérer une exception locale reçu d'une
couche basse, et de lancer une autre exception, d'un autre type,
spéciale à la couche supérieure. Il y a même le sympatique mécanisme
iniCause() qui permet de ne pas effacer la mémoire de l'exception.


Avatar
Nicolas George
JKB , dans le message , a
écrit :
Une fonction qui retourne un int qui n'est pas récupéré par
l'appelant _doit_ être signalée.


Blah. Ce n'est pas en le répétant une fois de plus de manière péremptoire
que tu le rends plus vrai. J'ai donné des arguments contre, j'attends une
réfutation.

Avatar
Nicolas George
SL , dans le message , a écrit :
"Court circuiter", d'après ce que je lis plus bas, c'est "être une
exception descendant de java.lang.RuntimeException" et non "être
propagée à l'appelant avec un 'throws' dans la signature de la
méthode" ?


Oui, c'est ça.

Pourquoi est-ce que le "principe" des exceptions non descendantes de
java.lang.RuntimeException est mauvais ?


Le principe ne l'est pas en essence. Ce qui est mauvais, c'est d'avoir
appelé ça exception, et de l'avoir présenté comme le mécanisme normal des
exceptions. C'est en réalité une sorte de type union pour le retour
(_local_) d'erreur, avec un mécanisme de transmission (déclaré au niveau de
la fonction) automatique.

Avatar
JKB
Le 09-05-2006, à propos de
Re: language,
Nicolas George écrivait dans fr.comp.os.linux.debats :
JKB , dans le message , a
écrit :
Une fonction qui retourne un int qui n'est pas récupéré par
l'appelant _doit_ être signalée.


Blah. Ce n'est pas en le répétant une fois de plus de manière péremptoire
que tu le rends plus vrai. J'ai donné des arguments contre, j'attends une
réfutation.


Il n'y a pas de réfutation à avoir. Ta position est "il est interdit
d'interdire, le programmeur est assez grand pour savoir ce qu'il
fait". Mon expérience me dit que le programmeur est faillible et que
par défaut ce type de comportement ne _devrait_ pas être autorisé
surtout si l'on veut faire un truc qui ne se bauge pas à la première
erreur retournée par le système (style filesystem full pour un
fprintf()). Et je mets dans la même catégorie les transtypages
automatiques qui sont des sources de merdes incommensurables.

Et en C, ce comportement est d'autant plus pervers qu'il faut
chercher dans des appels spéciaux (spécieux ?) les erreurs renoyées
par ces fonctions puis les comparer avec errno.h parce que ces trucs
sont prétendus portables.

C'est pour cela qu'un langage comme ADA est utilisé, il évite
purement et simplement tous ces problèmes qui ne sont pas problèmes
d'algorithme mais des problèmes de programmation et de langage
utilisé.

JKB


Avatar
SL
SL , dans le message , a écrit :
"Court circuiter", d'après ce que je lis plus bas, c'est "être une
exception descendant de java.lang.RuntimeException" et non "être
propagée à l'appelant avec un 'throws' dans la signature de la
méthode" ?


Oui, c'est ça.

Pourquoi est-ce que le "principe" des exceptions non descendantes
de java.lang.RuntimeException est mauvais ?


Le principe ne l'est pas en essence. Ce qui est mauvais, c'est
d'avoir appelé ça exception, et de l'avoir présenté comme le
mécanisme normal des exceptions. C'est en réalité une sorte de type
union pour le retour (_local_) d'erreur, avec un mécanisme de
transmission (déclaré au niveau de la fonction) automatique.


Je vois, mais je trouve que ça à des avantages pratiques (séparer les
types de retour "normaux" des types dévolus à l'expression d'erreur).


Avatar
Stéphane Zuckerman
On Tue, 9 May 2006, SL wrote:

SL , dans le message , a écrit :
"Court circuiter", d'après ce que je lis plus bas, c'est "être une
exception descendant de java.lang.RuntimeException" et non "être
propagée à l'appelant avec un 'throws' dans la signature de la
méthode" ?


Oui, c'est ça.

Pourquoi est-ce que le "principe" des exceptions non descendantes
de java.lang.RuntimeException est mauvais ?


Le principe ne l'est pas en essence. Ce qui est mauvais, c'est
d'avoir appelé ça exception, et de l'avoir présenté comme le
mécanisme normal des exceptions. C'est en réalité une sorte de type
union pour le retour (_local_) d'erreur, avec un mécanisme de
transmission (déclaré au niveau de la fonction) automatique.


Je vois, mais je trouve que ça à des avantages pratiques (séparer les
types de retour "normaux" des types dévolus à l'expression d'erreur).


Sauf qu'une exception n'est pas nécessairement une "erreur". Dans une
optique événementielle, "tout" est exception, par exemple : clic,
double-clic, événement clavier...

--
"Je deteste les ordinateurs : ils font toujours ce que je dis, jamais ce
que je veux !"
"The obvious mathematical breakthrough would be development of an easy
way to factor large prime numbers." (Bill Gates, The Road Ahead)



Avatar
Nicolas George
JKB , dans le message , a
écrit :
Il n'y a pas de réfutation à avoir. Ta position est "il est interdit
d'interdire, le programmeur est assez grand pour savoir ce qu'il
fait".


Non, absolument pas, il faudrait songer à apprendre à lire des fois.

La position que je défends, c'est que l'ajout d'une contrainte de
vérification du code, si elle permet d'éviter certaines erreurs, va très
souvent en causer d'autres, soit aux endroits où il devient nécessaire de la
contourner, soit au niveau des déclarations, soit simplement au niveau de la
complexité globale du langage.

Dans ces conditions, une contrainte de vérification du code n'est pas
forcément mauvaise, mais elle n'est pas forcément bonne comme tu le prétends
non plus. Il faut peser le pour et le contre, et évaluer comment ça
s'intègre à la cohérence du langage.

Dans le cas qui nous intéresse, rendre obligatoire le test des valeurs de
retour en C, ça va (1) causer plein de code inutile, et donc d'erreurs,
quand cette vérification n'est pas effectivement nécessaire et, (2) ça ne
s'intègre pas du tout dans la logique du langage.

Avatar
Nicolas George
SL , dans le message , a écrit :
Je vois, mais je trouve que ça à des avantages pratiques (séparer les
types de retour "normaux" des types dévolus à l'expression d'erreur).


Oui, ce n'est pas inutile. Mais le nom est mal choisi et trompeur. À la
limite, imagine un langage qui noterait l'addition - et la soustraction + :
ces opérations sont extrêmement utiles, mais on peut quand même dire qu'il y
a un problème. Nommer exception ce qui ne correspond pas à ce qu'on appelle
exception usuellement, c'est du même ordre.

Avatar
remy
JKB , dans le message , a
Je n'ai _jamais_ vu un compilo râler sérieusement parce qu'on ne
vérifie pas le retour d'une fonction du style fscanf (et encore
moins râler parce qu'on ne regarde pas le errno juste après).


Les compilateurs qui râlent quand on ne vérifie pas les retours d'erreur,
c'est l'exemple typique de la fausse bonne idée. Un exemple marquant est les
exceptions en java : on est obligé de les rattraper même quand on est
structurellement sûr qu'elles ne peuvent pas se produire, juste pour les
ignorer et faire taire le compilateur. Ce qui fait que le jour où
l'exception se produit réellement de manière non-prévue, non seulement le
programme n'est pas prêt, mais en plus elle est silencieusement ignorée et
propage des résultats aberrants. C'est pire que le départ.

À croire que certains concepteurs de langages n'ont jamais entendu
l'histoire de Pierre et le loup.



bonjour
public class Main {


public static void main(String[] args) throws Exception {

ZIP z=new ZIP()
z.addFichierZip(...);

}
}

public class ZIP {

public ZIP(String archive)
{
....
}

public void addFichierZip(....)throws Exception
{
}
}

simple ?

--
des conneries j'en ai dites oui oui je vous assure...
mais elles n'engagent que votre perception
remy


Avatar
Nicolas George
remy , dans le message <e3q17f$9ge$, a écrit :
simple ?


Inutilement verbeux.