IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

type statique ou typage dynamique


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 5
    Par défaut type statique ou typage dynamique
    Bonjour,
    J'aimerai savoir quels sont d'après vous les arguments qui seraient favorables à l'un ou l'autre des systèmes de typage.
    J'ai lu beaucoup d'articles critiquant Java, et qui mettent en avant Ruby ou Python, pour leur puissance notamment dû au système de typage. Mais j'ai quelques doutes, peut être en partie dû que je viens du monde Java.

    Par exemple j'ai l'impression qu'avec un typage dynamique, on peut tomber dans des travers comme nommer ces variables avec une information de typage en plus. Par exemple iNumber pour un entier, ou mapTruc pour une map, ce que je trouve assez crade. Du coups économiser le typage à la déclaration ne fait que déplacer le désagrément dans le nom de la variable. Ocaml est très clean à ce niveau vu qu'il laisse le choix de déclarer tout en gardant un contrôle à la compilation.

    Y a t il une grosse perte au niveau sûreté avec un typage dynamique ou est ce une illusion? Le fait qu'un programme ne compile pas, pour moi c'est le minimum pour détecter une non régression.
    De plus on pourrait n'utiliser que des Object en Java, si on en avait marre de se soucier du type. Mais c'est rarement le cas en réalité. On préfère typer avec des interfaces. D'ailleurs quand je manipule des Objects, çà me met mal à l'aise. Je sens qu'il faut contrôler s'il n'existe pas des cas où on se retrouve avec un type non voulu.

    Quelle est votre sentiment à ce niveau?

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Un typage dynamique offre une souplesse d'emploi. Certes cela ressemble à ce que tu obtiendrais pas l'utilisation abusive de Object en Java. Mais attention, en Java cela reviendrait à passer ton temps à faire des casts et cela surchargerait la mémoire. Cependant c'est techniquement faisable. La raison est que si le Java s'est inspiré du C/C++ pour sa syntaxe, il a cherché à s'orienter vers le smalltalk et à la philosophie du Lisp-objet: tout est un objet y compris les classes. On a donc un langage à typage statique, mais qui permet avec des tours de passe-passe de faire comme si tu avais du dynamique.

    Ceci diffèrent d'un langage comme ocaml où le typage n'est pas un objet du langage. Le typage est donc réellement fort. Ainsi seul Ada et Ocaml, à ma connaissance — mais peut être pourrait-on en classer d'autres ici — sont réellement type safe: il est impossible d'avoir un problème de typage une fois que le compilateur a validé le typage. Ce n'est pas le cas du C++ par exemple ni du Java (d'où la raison de l'existence de l'exception idoine).

    On passe donc à l'idée d'un typage statique qui effectivement améliore la fiabilité d'un programme. Mais attention, ce n'est pas pour rien que les programmes à fort risque sont en général fait en Ada ! C'est parce qu'il est un des rares langages à offrir un vrai typage sûr (avec ocaml donc si tu as suivi ) Ceci a par contre un coût pour Ada: c'est lourd en maudit à écrire. Pour ocaml, il y a une certaine souplesse dans son utilisation tout en conservant son typage sûr.

    Donc typage dynamique ou statique, tout dépend du projet, de son utilisation et de tes besoins.

  3. #3
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par Garulfo Voir le message
    Ainsi seul Ada et Ocaml, à ma connaissance — mais peut être pourrait-on en classer d'autres ici — sont réellement type safe: il est impossible d'avoir un problème de typage une fois que le compilateur a validé le typage.
    Y a tout de même pas mal de langages maintenant à avoir un vrai système de type statique, tu peux rajouter Haskell, Clean, les autres ML... à ta liste par exemple.

    --
    Jedaï

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 5
    Par défaut
    C'est d'ailleurs assez étonnant qu'en Haskell on demande de déclarer les types en soulignant que çà fait partie de la documentation utile pour le code. Est ce que certains d'entre vous trouve que çà alourdit?
    Pour les petits scripts shell fait à la va vite, je trouve python et ruby bien pratique. Mais je me demande si les succès de Ror ou autres Django ne viennent pas en partie du fait que tout est packagé, ce qui amoindrit le risque, et que s'il fallait réellement coder une grosse application, çà serait bien plus compliqué. Y en a t il parmi vous qui utilisent Python et Ruby pour des applis d'entreprise. Est ce que vous êtes obligés de mettre des assert() partout pour se protéger des risques du typage dynamique? (Perso j'ai pas mal de assert en Java, je me demande s'il n'y en pas des tonnes en Ruby et en Python, ce qui amoindrit l'intérêt du typage dynamique)

  5. #5
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    Citation Envoyé par flotteman Voir le message
    C'est d'ailleurs assez étonnant qu'en Haskell on demande de déclarer les types en soulignant que çà fait partie de la documentation utile pour le code. Est ce que certains d'entre vous trouve que çà alourdit?
    On ne te demande pas de déclarer les types partout (seules les fonctions de top-level sont à typer explicitement par convention), par contre il est vrai que dans bien des cas, le type documente bien la fonction (surtout si tu as des types personnalisés, des synonymes de types, etc...). De plus parfois, écrire le type aide à écrire la fonction.
    Note que tu peux demander à emacs par exemple d'inférer le type d'une fonction et de l'annoter automatiquement, tu n'es pas obligé de toujours le taper à la main.

    Un autre point important à comprendre c'est que le système de type de Haskell est plus puissant que celui d'OCaml, mais en conséquence il n'est pas complètement inférable. En pratique, les cas où les annotations de type sont nécessaires sont extrêmement rares. Mais le système de type d'Haskell est tout de même tel qu'aucune erreur de type ne peut avoir lieu au runtime.

    --
    Jedaï

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 5
    Par défaut
    Est ce que Python/Ruby est adapté aux pratiques agiles, prototypages, correction à chaud sans redémarrage?(plus à voir avec le fait que ce sont des langages de script que la question du typage) La flexibilité, et la relative simplicité du code compense-t-elle la sûreté à la compilation? Est ce que le typage statique tient plus de la flemme du développeur de cerner complètement ce qu'il écrit(çà compile, çà doit marcher...)?

    Bon moi, faudrais peut être que je code plus pour éclaircir mes idées.
    (pssst...c'est le mode Haskell pour emacs qui annote les fonctions?....ok bon je vais aller tester çà et jeter un coups d'oeil sur Ada )

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Y a tout de même pas mal de langages maintenant à avoir un vrai système de type statique, tu peux rajouter Haskell, Clean, les autres ML... à ta liste par exemple.

    --
    Jedaï
    Et bien a priori, c'est loin d'être aussi évident.
    Disons que puisque je n'ai pas vérifier et que je n'ai rien sous la main qui permet de l'affirmer, je ne l'affirme pas. Il me semble qu'Haskell a cette propriété, mais je n'en suis pas certain, ni les autres ML d'ailleurs. As tu quelque chose qui atteste que ce soit type safe ?

    [edit]D'ailleurs je crois me rappeler qu'un spécialiste du typage qui était venu donner une conférence à mon université a bien préciser qu'il est fort probable qu'Haskell soit type safe mais que ça n'avait pas été démontré. Quant à SML, je pense me rappeler qu'il y a justement quelques détails qui font qu'au final, ça ne l'est pas.[/edit]

  8. #8
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Garulfo: tu veux dire quoi par type-safe? Qu'il ne peut pas y avoir d'erreurs de typage à l'exécution? Si c'est le cas, je pense qu'Haskell entre dans cette définition.

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Par défaut
    Citation Envoyé par GnuVince Voir le message
    Garulfo: tu veux dire quoi par type-safe? Qu'il ne peut pas y avoir d'erreurs de typage à l'exécution? Si c'est le cas, je pense qu'Haskell entre dans cette définition.
    Qu'aucune erreurs ne peut survenir à cause d'un problème lié aux types, ce qui est un peu plus général que « erreurs de typage » mais bon on s'est compris.

    Je le pense aussi, mais je crois que ça n'est pas démontré. Alors qu'Ada (sous la condition d'utiliser du « pur » Ada) et ocaml ( sans l'utilisation de fonction externe en C ) ont déjà fait l'objet de telles preuves.

    Toujours est-il que je n'ai rien sous la main pour invalider ou valider ce fait.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/01/2007, 16h27
  2. Réponses: 36
    Dernier message: 09/09/2006, 04h06
  3. id et typage dynamique
    Par Omfraax dans le forum Développement OS X
    Réponses: 5
    Dernier message: 23/08/2006, 20h13
  4. Réponses: 6
    Dernier message: 27/06/2006, 17h09
  5. [Débat] Que pensez-vous des langages à typage dynamique?
    Par Eusebius dans le forum Langages de programmation
    Réponses: 14
    Dernier message: 16/06/2004, 13h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo