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

Contribuez Discussion :

Quel langage choisir ? [FAQ]


Sujet :

Contribuez

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut Quel langage choisir ?
    Proposition pour la FAQ

    --------------------


    Quel langage choisir ?

    Deux visions principales s'affrontent : le typage statique (OCaml, Haskell, F#) et le typage dynamique (Scheme, Lisp). Le choix est souvent difficile, mais nous allons tenter de vous donner quelques pistes qui devraient vous éclairer :

    typage inféré statiquement
    1. points forts:
      • permet de détecter de nombreuses incohérences dès la compilation et, donc, des erreurs potentielles du développeur;
      • ajoute une documentation implicite à l'aide des types de la fonction;
      • assure, dans le cas de nombreux langages aux typages inférés statiquement, qu'une erreur de typage est impossible à l'exécution.
    2. points faibles:
      • peut être particulièrement contraignant et peut nécessiter de développer des mécanismes peu élégant ou lourd pour que le programme soit accepté par le système de typage;
      • certaines fonctions sont mathématiquement et sémantiquement correctes mais ne sont pas typables, bien qu'en général, elles ne soient pas vraiment utilisées en pratique et soient plutôt des cas d'école;
      • de manière plus terre à terre, limite la possibilité d'utiliser la surcharge de fonction ou d'opérateur (le polymorphisme pouvant cependant largement compenser ce problème).


    typage dynamique
    1. points forts :
      • assure une grande souplesse dans le développement des fonctions, le domaine et l'image de la fonction n'ayant pas de contraintes.
      • permet de développer et de tester des morceaux de code incomplets (très efficace pour le prototypage).
      • ces langages excellent souvent dans la réflexivité et l'introspection, c'est-à-dire la capacité de se regarder et de s'auto-modifier.
    2. points faibles
      • impose une conception sans faille au risque de ne jamais retrouver une erreur faite durant le développement;
      • même si une erreur est détectée, le déverminage peut s'avérer très fastidieux.


    En résumé, un système de typage inféré offre une fiabilité et une sécurité supplémentaire, en plus d'une documentation implicite. Cependant, ceci se fait au prix d'une certaine rigidité. Le jeu en vaut probablement la chandelle, surtout pour un débutant qui aura un guide pour développer. Un développeur expérimenté peut cependant trouver des avantages dans un système de type plus souple qui lui impose moins de contraintes et moins de pirouettes pour obtenir le résultat. C'est particulièrement vrai lors d'une approche basée sur des prototypes où on ne sait pas encore tous les éléments constituants d'une fonction.
    --------------------

    Pour information
    Je n'ai pas gardé « plus proches de nombreux langages classiques par leur portée lexicale » en point fort des typages statiques ni « la portée dynamique peut en surprendre plus d'un » car ce sont des concepts distincts du typage. En Scheme, par exemple, la portée est lexicale. Elle est dynamique au top-level mais statique autrement — ce qui est dû uniquement au comportement de define qui est différent. L'utilisation de let la rend uniquement statique.

    Mon dernier paragraphe s'applique aussi aux langages qui ne sont pas fonctionnels. Python est un must pour les prototypes et je ne le conseille pas à des débutants pour ce qui fait sa force dans ce premier cas justement.

    Qu'en pensez-vous ?

  2. #2
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    La question est incontournable pour une FAQ.
    La réponse me convient, ce qui fait la richesse du paradigme fonctionnel ce sont les différents systèmes de types.
    Après, dans le détail, restons diplomates car c'est avant tout une réponse collective
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681
    Par défaut
    Citation Envoyé par SpiceGuid Voir le message
    La question est incontournable pour une FAQ.
    La réponse me convient, ce qui fait la richesse du paradigme fonctionnel ce sont les différents systèmes de types.
    Après, dans le détail, restons diplomates car c'est avant tout une réponse collective
    +1, on voit l'expérience de Garulfo en terme de pédagogie... tout y est, et pourtant ça passe tout seul
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juin 2008
    Messages : 22
    Points : 24
    Points
    24
    Par défaut
    Personnellement, je suis en train d'étudier toutes ces différences afin de me choisir un langage de prédilection... Ce texte relativise le typage fort qui à souvent été mis en valeur dans les textes pour mettre en valeur Caml, Haskell ou Anubis par exemple par rapport aux plus anciens Lisp, Common Lisp et Scheme...

    Je rajouterais qu'on reproche au typage dynamique de grever les performances, la gestion des types étant effectuer pendant l'exécution du programme...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    permet de développer et de tester des morceaux de code incomplets (très efficace pour le prototypage).
    Certes, mais ce n'est pas lié au système de typage. La plupart des langages typés permettent ce genre de choses en plaçant dans les parties à compléter des valeurs divergentes.

    Exemple en OCaml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let ma_fonction truc =
      if condition truc then
         partie_deja_codee
      else
         assert false
    ces langages excellent souvent dans la réflexivité et l'introspection, c'est-à-dire la capacité de se regarder et de s'auto-modifier.
    Il faut faire attention à ne pas mélanger les facilités de macro, qui ne sont pas liées au typage mais à la pauvreté syntaxique de ces langages, et les méthodes utilisant la fonction "eval" qui sont effectivement relativement spécifiques aux langages dynamiques (même si la limite tend à se brouiller à ce niveau).

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par bluestorm Voir le message
    Certes, mais ce n'est pas lié au système de typage. La plupart des langages typés permettent ce genre de choses en plaçant dans les parties à compléter des valeurs divergentes.

    Exemple en OCaml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    let ma_fonction truc =
      if condition truc then
         partie_deja_codee
      else
         assert false
    Tu ne parles pas de la même chose exactement de la même chose. Car on aurait pû aussi lancer une exception.
    Sur des gros morceaux, la possibilité de ne même pas savoir exactement ce que tu vas renvoyer (et donc renvoyer des résultats très différents ou en morceaux) sont simplifiés par le typage dynamique. On peut donc continuer le programme (qui marchera mal sur certains morceaux) sans même se préoccuper d'une manière de le bloquer par un assert ou une exception. C'est plus ça le sens du prototypage: pas l'envoie d'une erreur.

    J'aurais dû dire « simplifie » plutôt cependant. Car là ça paraît un peu absolu. C'est à changer.

    Citation Envoyé par bluestorm Voir le message
    Il faut faire attention à ne pas mélanger les facilités de macro, qui ne sont pas liées au typage mais à la pauvreté syntaxique de ces langages, et les méthodes utilisant la fonction "eval" qui sont effectivement relativement spécifiques aux langages dynamiques (même si la limite tend à se brouiller à ce niveau).
    Je ne mélange pas. Les facilités de macro viennent du typage dynamique. Et ce que tu appelles la pauvreté syntaxique aussi : s'il y a peu d'opérateur c'est parce que tout se fait avec cons car cdr et lambda (théoriquement). Il ne reste qu'à avoir de quoi contrôler l'évaluation (puisqu'il n'y a que très peu de langage à évaluation en ordre normal).

    Cette fois-ci je n'ai pas fait d'absolu en sous-entendant que les autres ne pouvait pas. C'est vrai que tous les langages fonctionnels à typage dynamique excelle dans les méta-fonctionnalités. C'est qu'il y a un lien ne penses-tu pas

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

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par Sygénème Voir le message
    Je rajouterais qu'on reproche au typage dynamique de grever les performances, la gestion des types étant effectuer pendant l'exécution du programme...
    On reproche... mais ce n'est pas vrai.
    Donc mieux vaut éviter les erreurs
    Des compilateurs de Scheme ou Common Lisp sont très efficaces et n'ont rien à envier à Ocamlopt ou GHC (globalement).

Discussions similaires

  1. Quel langage choisir pour un soft commercial ?
    Par AnTaReS7364 dans le forum Langages de programmation
    Réponses: 11
    Dernier message: 16/07/2006, 22h21
  2. [Débutant] Quel langage choisir pour débuter ?
    Par Invité dans le forum Débuter
    Réponses: 15
    Dernier message: 05/07/2004, 22h13
  3. Quel langage choisir pour lire sur le port série ?
    Par Nico76 dans le forum Windows
    Réponses: 7
    Dernier message: 28/04/2004, 10h42
  4. quel langage choisir pour mon interface graphique
    Par mrom34 dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 09/03/2004, 19h12
  5. quel langage choisir pour faire de script sous windows
    Par pas05 dans le forum Langages de programmation
    Réponses: 7
    Dernier message: 18/11/2002, 22h42

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