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 :

Quel est l'intérêt des langages dynamique, en général ?


Sujet :

Langages de programmation

  1. #21
    Membre averti Avatar de vintz72
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 154
    Points : 316
    Points
    316
    Par défaut
    Citation Envoyé par maa Voir le message
    ok, mais sinon ne trouves-tu pas qu'il est plus lent de développer avec un langage de script ?
    Bien sûr que non ! Ca dépend surtout de ce que tu en fais. A compétence équivalente, tu iras toujours plus vite à taper 3 lignes de script que de faire un programme en Java ou C.
    Par contre, il est clair que la méconnaissance d'un langage peut entrainer une réelle perte de temps. En outre, selon l'auteur du code que tu lis, tu pourras te retrouver avec un code illisible et inmaintenable...

    Bref, pour moi, les langages de script ont un vrai intérêt pour développer des outils, voire faire du prototypage, mais pour les gros projets, je préfère largement les langages typés, car les avantages des premiers disparaissent rapidement quand les choses se complexifient. Alors, la rigueur des compilateurs peuvent en effet faire gagner beaucoup de temps.

  2. #22
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par benwit Voir le message
    Perso, je vois pas l'intérêt des langages dynamiques.
    Ben, y'a quand même la réflection, et pouvoir changer une fonction à l'exécution, et les tests... certains disebnt que ca évite de fixer trop vite le design avant de connaître le domaine du problème qu'on veut résoudre.

    Perso moi je trouve que leurs avantages sont moins évidents maintenant qu'on a des langages statiques avec inférence de type, meilleurs support des tests et pleins de bons trucs.

    J'ai aussi l'impression que les langages dynamiques ne pourront jamais aller aussi vite que les langages statiques. Quand on voit qu'en python la plupart des types de données prennent 3x la place qu'ils prendraient dans un autre langage, ca donne l'impression d'un immense gachis d'énergie et de cycles.

    Enfin, je vois mal python et ruby tourner sur un système many-cores (mais je m'avancerait pas trop là-dessus), avec leur GIL.

  3. #23
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Attention un langage ne peut pas etre dissocié de son écosysteme. En ce qui concerne PHP, si tu l'utilises avec les bons outils et les bonnes librairies. Tu auras un des outils RAD les plus intéressant pour le developpement orienté Web. Surtout ne reste pas figé sur ta premiere impression.

    En ce qui concerne l'interet des languages dynamiques il faut pas essayer de le comparer a un langage static car tu n'en verras que les défauts.
    Ton choix doit se faire en fonction du projet.

  4. #24
    Membre actif
    Avatar de cherkaoui.j.e
    Inscrit en
    Mai 2008
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 58
    Points : 239
    Points
    239
    Par défaut
    Citation Envoyé par ponce Voir le message
    Enfin, je vois mal python et ruby tourner sur un système many-cores (mais je m'avancerait pas trop là-dessus), avec leur GIL.
    Le multiprocessing existe depuis la version 2.6 de python.

  5. #25
    mon_nom_est_personne
    Invité(e)
    Par défaut
    c'est quand même marrant, deux pages de posts, et le seul truc intéressant qui en découle c'est que personne ne comprend le sens de "langage dynamique" (désolé).
    Car sur ces deux pages voila ce que j'en tire :
    langage dynamique = typage dynamique (ou non typage) = PHP = de la merde

    moué ca vaut un débat sur l'identité national par un partie d'extrême droite ca. (troll)

    Enfin, un langage dynamique c'est aussi, (cf. http://en.wikipedia.org/wiki/Dynamic...ing_language):
    - L'évaluation de code (ndlr. eval()) Sympas quand on veux faire de la meta programmation, non ?
    - Les fonction d'ordre supérieur
    - Les fonction lambda
    - Pouvoir faire de la programmation fonctionnelle. Bon d'accord ça c'est pas utile pour tout le monde mais quand je lis des articles "programmation fonctionnelle en java" ou le type simplifie le truc a des appelles récursif de méthode, j'ai honte pour lui.
    - l'exécution au runtime. Je trouve ca plutôt cool quand on modifie un programme de juste avoir à réécrire un fichier et que ca marche de suite, au lieu de devoir tuer le processus, vider la mémoire, vider le ci et la, recompiler l'appli, repatcher le machin, redémarrer le serveur de truc. (ma dernière expérience avec J2EE me donne encore des cauchemars).

    Le problème c'est que les langage dynamique sont à la mode ces derniers temps alors que trop peu de personne savez coder en dynamique (on ne fait malheureusement plus beaucoup de LISP à l'école) et les vendent en disant des conneries comme "ca va plus vite à codé", "c'est plus simple" etc..
    Et bien ca c'est faux, les langages dynamiques c'est la merde à débugger (dure de voir un problème qui existe que pendant l'exécution), ils sont lents (forcement il se passe plus de chose au runtime) et par moment leur syntaxe est imbuvable. Mais ils sont balèzes pour faire de la récursivité, résoudre des problèmes ou justement le problème change en court de route ou encore ces problèmes ou on sais plus ou moins ce qui rentre, mais on sais pas ce qui va en sortir.

    Pour revenir à la question initiale, ma réponse va surprendre un peu, mais elle est celle du réalisme; Va pour un solution JAVA. Tu connais déjà c#, java et c# sont... très similaires. Tu vas donc être plus vite opérationnel (bien que tu vas voir là où .net est merveilleux de simplicité, java se contente de rajouté complication sur complication), les choses vont te paraître normal et à leur place, là ou en python tu chercherais à définir des accesseurs qui n'existent pas, devoir comprendre le concept d'introspection, l'importation partiel de module, etc... (bref tout ce que j'aime chez python). Et en plus je vois pas l'interêt d'écrire un ERP en python.

    P.S.: fait attention aux anachronismes, les langages statiques sont les dinosaures de l'histoire la ou les langage dynamique sont plus du 21eme siècle.

  6. #26
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par mon_nom_est_personne Voir le message
    Enfin, un langage dynamique c'est aussi, (cf. http://en.wikipedia.org/wiki/Dynamic...ing_language):
    - L'évaluation de code (ndlr. eval()) Sympas quand on veux faire de la meta programmation, non ?
    - Les fonction d'ordre supérieur
    - Les fonction lambda
    - Pouvoir faire de la programmation fonctionnelle. Bon d'accord ça c'est pas utile pour tout le monde mais quand je lis des articles "programmation fonctionnelle en java" ou le type simplifie le truc a des appelles récursif de méthode, j'ai honte pour lui.
    Comme je le prédisais dans mon post, tu tombes dans les chausses-trappes classiques de quelqu'un qui ne connaît que les langages statiques mainstream, tous ces soi-disant avantages des langages dynamiques ne sont que des avantages de langages modernes de haut-niveau, par exemple Haskell, qui est parfaitement statique (statiquement typé, compilé, ...) a tout ce que tu présentes comme typique des langages dynamiques ci-dessus (oui, même le eval()).

    Citation Envoyé par mon_nom_est_personne Voir le message
    - l'exécution au runtime. Je trouve ca plutôt cool quand on modifie un programme de juste avoir à réécrire un fichier et que ca marche de suite, au lieu de devoir tuer le processus, vider la mémoire, vider le ci et la, recompiler l'appli, repatcher le machin, redémarrer le serveur de truc. (ma dernière expérience avec J2EE me donne encore des cauchemars).
    L'"exécution au runtime" me semble plutôt un attribut normal des programmes... Je pense que tu parlais de changement de partie du code à chaud, pendant que le programme est en train de tourner, a priori peu de langages dynamiques offre cette possibilité de base (à part Erlang) bien qu'il soit plus facile de le mettre en place pour eux, rien n'exclut qu'un langage statiquement typé offre cette possibilité dans le futur.
    Si tu parlais simplement de modification d'un code non-actuellement chargé sans avoir à redémarrer toute l'infrastructure, c'est déjà le cas dans la plupart des systèmes bien pensés où cela fait sens même lorsqu'ils utilisent un langage statique, par exemple Happstack en Haskell offre ce service (il suffit de modifier ou d'ajouter un fichier Haskell, il est recompilé automatiquement et intégré à l'infrastructure existante) alors même qu'Haskell n'est pas vraiment très utilisé dans le domaine, je ne doute pas que C# ou Java offrent des systèmes similaires.

    Citation Envoyé par mon_nom_est_personne Voir le message
    P.S.: fait attention aux anachronismes, les langages statiques sont les dinosaures de l'histoire la ou les langage dynamique sont plus du 21eme siècle.
    Vu mes remarques ci-dessus, crois-tu encore cela ? A mon avis les langages dynamiques ont une place mais leur grand succès actuel est plus dû aux faiblesses des langages statiques mainstream qu'à un avantage intrinsèque des langages dynamiques sur les langages statiques en général.

    --
    Jedaï

  7. #27
    maa
    maa est déconnecté
    Membre actif
    Avatar de maa
    Inscrit en
    Octobre 2005
    Messages
    672
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Octobre 2005
    Messages : 672
    Points : 288
    Points
    288
    Par défaut
    Merci pour toutes vos réponse. La mienne sera longue en retour

    C'est à mon avis un manque d'expérience et/ou d'outil adapté qui vous font pensez cela.

    Avec un IDE digne de ce nom il est tout à fait possible de remonter vers les définition de methode d'une classe soit disant "boite noire" de php.
    J'utilisais netbeans. Si j'ai une variable dont je ne connais pas le type, comment pourrais-je remonter à sa définition ? De même comment remonter à la définition de ses membres ? Netbeans me permet de remonter à la définition d'une classe quand je connais son nom, c'est déjà ça mais loin d'être suffisant. Pour connaitre le reste, je suis très souvent obligé de debugger pour savoir où le programme "passe". C'est long et ça implique d'exécuter le programme, çe qui n'est pas sans conséquences...

    Avec une doc correcte tu fais l'auto complétion, tu remontes tes defs ect sans problèmes.
    De même qu'avec un ide décent tu peux voir tes erreurs syntaxique à l'écriture.

    Donc pour un ide sympa pour php => netbeans.
    Toujours dans le même esprit , un ide correct, va t'avertir des erreurs de débutant tel que la synthaxe ou les fonctions inexistante.
    Netbeans ne le fait pas en tout cas. Je n'ai pas l'intellisens quand j'écris les première lettre et je n'ai pas de correction si j'écris n'importe quoi. Même si j'avais l'autocompletion, ça ne serait pas interessant car ça me proposerai une liste énorme de fonctions (toutes les fonctions php) puisque celles-ci ne sont pas rattachées à une classe et n'ont donc pas de context. En .net à partir du moment où je tape "." sur une variable, la liste de tous les membres du type correspondant à la variable m'est proposé. C'est un gain de temps non négligeable. De plus, le peu d'auto-completion et correction automatique que l'on a se paye par une longue étape de parsage des fichiers au moment de l'ouverture du projet.

    Quand je dois développer en C , je suis toujours entrain de me demander si j'ai pas oublier libérer la mémoire,si j'écris bien au bon endroit , si mon tableau va être assez grand.
    Tous les langage statiques ne sont pas comme le C. Je n'ai pas ces problèmes en c#. Je trouve même que la gestion des collections et des énumération est bien plus puissante que ce qui se fait en php.

    Perso, je vois pas l'intérêt des langages dynamiques.
    moi non plus J'essaie de comprendre...

    Bien sûr que non ! Ca dépend surtout de ce que tu en fais. A compétence équivalente, tu iras toujours plus vite à taper 3 lignes de script que de faire un programme en Java ou C.
    Par contre, il est clair que la méconnaissance d'un langage peut entrainer une réelle perte de temps. En outre, selon l'auteur du code que tu lis, tu pourras te retrouver avec un code illisible et inmaintenable...
    Je suis d'accord. Si j'ai juste quelque lignes de code à modifier, ça peut être très pratique de ne pas avoir à recompiler, relancer l'application etc... Mais très rapidement dès que je code un peu plus, je préfère aussi largement les langages statiques.

    Ben, y'a quand même la réflection, et pouvoir changer une fonction à l'exécution, et les tests...
    La reflection existe aussi en .net, les tests existent aussi en .net et java. On peut aussi changer une fonction à l'exécution, même si c'est un peu moins rapide à écrire.

    Attention un langage ne peut pas etre dissocié de son écosysteme. En ce qui concerne PHP, si tu l'utilises avec les bons outils et les bonnes librairies. Tu auras un des outils RAD les plus intéressant pour le developpement orienté Web. Surtout ne reste pas figé sur ta premiere impression.
    J'ai fais de l'ASP.net et du PHP. Je trouve le premier nettement plus propre que le second. En ASP.net, on a un vrai séparation des couches métier et affichage. Tout est orienté contrôle. En php, c'est une autre histoire. Alors je ne comprends pas trop quand on me dit que les langages dynamiques on un meilleur niveau d'abstraction...

    En ce qui concerne l'interet des languages dynamiques il faut pas essayer de le comparer a un langage static car tu n'en verras que les défauts.
    Ca doit vouloir dire qu'ils sont moins bons Mais alors pourquoi sont-ils à la mode ?

    Car sur ces deux pages voila ce que j'en tire :
    langage dynamique = typage dynamique (ou non typage) = PHP = de la merde
    Pour ma part, je trouve que le typage dynamique est le plus gros inconvénient des langages dynamiques... c'est sans doute pour ça que la discussion tourne autours de ce point. Mais je te remercie de me faire voir d'autres aspect. C'est ce que j'attends au fond.

    - L'évaluation de code (ndlr. eval()) Sympas quand on veux faire de la
    meta programmation
    Metaprogramming Metaprogramming
    , non ?
    Je ne connais pas. Ca consiste en quoi ?

    - Les fonction d'ordre supérieur
    - Les fonction lambda
    Ca existe en c# en tout cas, et c'est d'ailleurs parfaitement compatible avec un typage fort. Au passage, les expressions lambda de PHP ne volent vraiment pas haut...

    - Pouvoir faire de la programmation fonctionnelle. Bon d'accord ça c'est pas utile pour tout le monde mais quand je lis des articles "programmation fonctionnelle en java" ou le type simplifie le truc a des appelles récursif de méthode, j'ai honte pour lui.
    programmation fonctionnelle = programmation procédurale ?
    En tout cas on peut tout à faire faire de la programmation procédurale avec les langages statiques.

    - l'exécution au runtime. ...
    oui, comme je l'ai dit plus haut c'est clairement un avantage... pour les petites modifications.

    Mais ils sont balèzes pour faire de la récursivité, résoudre des problèmes ou justement le problème change en court de route ou encore ces problèmes ou on sais plus ou moins ce qui rentre, mais on sais pas ce qui va en sortir.
    oui c'est vrai. Mais je trouve que le jeu n'en vaut pas la chandelle. Avec c#, je trouve que le compromis n'est pas mal: on peut dans tous ces cas utiliser des variables dynamique et rester dans le monde statique pour tout le reste. Mais je pense qu'on peut encore faire mieux en introduisant la notion d'implémentation implicite d'interface afin de garder l'intellisens tout en manipulant des objets qui n'ont pas de lien de parenté !

    Va pour un solution JAVA. Tu connais déjà c#, java et c# sont... très similaires. Tu vas donc être plus vite opérationnel (bien que tu vas voir là où .net est merveilleux de simplicité, java se contente de rajouté complication sur complication), les choses vont te paraître normal et à leur place
    oui mais j'ai l'impression que java n'est pas aussi souple que c#. Du moins si il reste au niveau de c# 2, il manque: l'inférence de type, les variable implicitement typé, les expression lambda, les variables dynamiques, etc...

    en plus je vois pas l'interêt d'écrire un ERP en python.
    Il s'agit d'OpenERP. Si quelqu'un le connait et peut nous en dire un peu plus ?

    P.S.: fait attention aux anachronismes, les langages statiques sont les dinosaures de l'histoire la ou les langage dynamique sont plus du 21eme siècle.
    Tu veux dire l'inverse ?
    ****************************************

    - I don’t write plumbing code anymore
    - I use PostSharp
    - And you?


    ****************************************

  8. #28
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Hello,

    Pour netbeans et php, très rapidement, parce qu'au fond tu ne retrouvera pas un clone de vs.net pour php
    (quoique ... phalanger php - Recherche Google).
    http://netbeans.org/kb/docs/php/php-...creencast.html
    http://wiki.netbeans.org/NetBeansUserFAQ#PHP
    http://netbeans.org/kb/docs/php/clas...creencast.html
    http://netbeans.org/kb/docs/php/name...creencast.html
    http://netbeans.org/kb/docs/php/phpunit.html
    http://wiki.netbeans.org/HowToConfigureXDebug




    Citation:
    Perso, je vois pas l'intérêt des langages dynamiques.
    moi non plus J'essaie de comprendre...
    C'est le good enough et le getting things done qui ont séduit ceux qui ont été échaudés par le doing the right thing.
    a+

  9. #29
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Petite précision pour éviter les incompréhensions, quand je dis "Perso, je vois pas l'intérêt des langages dynamiques", cela signifie juste que je ne les vois pas.
    Cela ne dit pas qu'il n'y en a pas ou que c'est de la m....

    L'instrospection, vu qu'il y a du byte code en java, on peut.
    La métaprogrammation, idem.
    La modification du code a chaud, aussi ...

    L'économie de texte à taper ...
    Dans le bloc note, je vous l'accorde mais avec un IDE a autocomplétion, c'est kifkif et on évite les fautes de frappes ...

    La durée de la compilation ? ... vous connaissez pas la compilation incrémentale des IDE ?

    D'autres arguments ?
    Après, ça dépend probablement du type de programme qu'on écrit ...
    Pour le système, des scripts ok ...
    Pour des projets plus complexes, je comprend pas.

    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait. Marcel PAGNOL
    On ne savait pas que c'était impossible, alors on l'a fait. John Fitzgerald KENNEDY.
    L'inexpérience est ce qui permet à la jeunesse d'accomplir ce que la vieillesse sait impossible. Paul (Tristant) BERNARD
    La meilleure façon de prédire l'avenir, c'est de l'inventer.

  10. #30
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Citation Envoyé par maa Voir le message
    J'ai fais de l'ASP.net et du PHP. Je trouve le premier nettement plus propre que le second. En ASP.net, on a un vrai séparation des couches métier et affichage. Tout est orienté contrôle. En php, c'est une autre histoire. Alors je ne comprends pas trop quand on me dit que les langages dynamiques on un meilleur niveau d'abstraction...
    C'est pour ca que je parle d'écosystème si tu utilises PHP sans un Framework tu ne vas pas en voir les avantages. Pour reprendre ton exemple tu compares un langage (PHP) à "une plateforme de développement" ASP.net. Cela dit tu ne retrouveras pas le confort de Visual Studio.

    Citation Envoyé par maa Voir le message
    En ce qui concerne l'interet des languages dynamiques il faut pas essayer de le comparer a un langage static car tu n'en verras que les défauts.
    Ca doit vouloir dire qu'ils sont moins bons Mais alors pourquoi sont-ils à la mode ?
    Non c'est pas ca, c'est juste que tu vas essayer de refaire ce que tu faisais en static et tu vas pester parceque tu n'y arrives pas. La programmation avec un langage dynamic demande de changer ta façon de développer. Si tu ne fais pas ça tu vas être déçus. L'un n'est pas meilleurs que l'autre ça dépend de tes besoins. Pour le WEB un langage dynamique est très intéressant.
    Ce ne pas une question de mode, les langages dynamiques répondent très bien à certains besoins voir même mieux que les langages statics. Bien évidement les critères ne sont pas que techniques.

    Citation Envoyé par maa Voir le message
    Pour ma part, je trouve que le typage dynamique est le plus gros inconvénient des langages dynamiques... c'est sans doute pour ça que la discussion tourne autours de ce point. Mais je te remercie de me faire voir d'autres aspect. C'est ce que j'attends au fond.
    Oui c'est un argument récurrent parceque comme je l'ai dit plus haut les développeurs essayent de refaire ce qu'ils faisaient en static alors qu'il faut changer sa façon de développer.

  11. #31
    mon_nom_est_personne
    Invité(e)
    Par défaut
    maa:

    la meta programmation c'est une forme programmation ou tu develope des programme qui compute d'autre programme (on peut aussi prend des programmes en argument). L'exemple le plus courant c'est la programmation genetique.

    programmation fonctionnelle = programmation procédurale ?
    En tout cas on peut tout à faire faire de la programmation procédurale avec les langages statiques.
    rien a voir, en fonctionnelle, tout est une fonction, par exemple 1+1 s'ecrira ajouter(1,1). Ca peut paraitre bizarre mais quand on programme dans des graphe non oriente (graphe oriente aussi) c'est super pratique.

    Jedai:
    Ta remarque me fait pose la question:
    Si les langages statique d'aujourd'hui implemente des propriete des langages dynamiques, sont-il toujours statiques ? (quid de C, car personne ne l'a cite)

    Vu mes remarques ci-dessus, crois-tu encore cela ? A mon avis les langages dynamiques ont une place mais leur grand succès actuel est plus dû aux faiblesses des langages statiques mainstream qu'à un avantage intrinsèque des langages dynamiques sur les langages statiques en général.
    Il est la le probleme, c'est de tombe dans une vision manicheenne de la chose. Y'a pas de techno meilleur que d'autre "en general", mais meilleur que d'autre pour resoudre un probleme donne. Comme je l'ai dis dans mon precedant post, le monde des langage dynamique n'est pas celui des bisounours, y'a des choses qu'ils font tres mal, et d'autre tres bien.
    Dernière modification par gorgonite ; 04/12/2009 à 10h19. Motif: jabai -> jedai

  12. #32
    Invité
    Invité(e)
    Par défaut
    Non c'est pas ca, c'est juste que tu vas essayer de refaire ce que tu faisais en static et tu vas pester parceque tu n'y arrives pas. La programmation avec un langage dynamic demande de changer ta façon de développer. Si tu ne fais pas ça tu vas être déçus. L'un n'est pas meilleurs que l'autre ça dépend de tes besoins. Pour le WEB un langage dynamique est très intéressant.
    Ce ne pas une question de mode, les langages dynamiques répondent très bien à certains besoins voir même mieux que les langages statics. Bien évidement les critères ne sont pas que techniques.
    J'avoue que j'aimerais bien en savoir un peu plus là-dessus.
    Python est pour l'instant mon langage préféré, mais si je l'ai choisi, c'est pour sa bibliothèque standard, sa syntaxe qui ne me pique pas les yeux, ainsi que quelques autres petites choses citées plus haut. Par contre, j'ai beaucoup d'assert qui trainent dans mon code, et ma documentation comprend presque systematiquement des informations sur le type de mes variables, validés par des décorateurs.

    Je suis conscient que je dois manquer quelque chose, auquel cas merci de m'éclairer ! Mais ce qui m'a séduit dans Python, c'est vraiment le côté haut niveau, pas le typage dynamique.

    "changer ta façon de développer", je veux bien, mais vers quoi du coup ?
    Et quel est l'intérêt pour de la programmation Web en particulier ?

  13. #33
    Expert éminent
    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
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par mon_nom_est_personne Voir le message
    rien a voir, en fonctionnelle, tout est une fonction, par exemple 1+1 s'ecrira ajouter(1,1). Ca peut paraitre bizarre mais quand on programme dans des graphe non oriente (graphe oriente aussi) c'est super pratique.
    Le paradigme fonctionnel n'a pas grand à voir avec écrire ajouter(1,1) plutôt que (1 + 1)... La plupart des langages fonctionnels offrent d'ailleurs plutôt la syntaxe (1 + 1) (où (+) est une fonction qui peut être utilisée en notation infixe, autrement dit un opérateur). Le principal apport du paradigme de programmation fonctionnel est de réduire (ou d'interdire dans le cas des langages purement fonctionnels) les effets de bords et les mutations de valeurs, à la place les langages fonctionnels mettent en avant l'utilisation de la récursivité (pas de boucles), des compositions de fonctions, des fonctions d'ordre supérieur et généralement de fonctions dont le statut est le même que celui des autres valeurs. Cette approche a des avantages du point de vue de la robustesse et du débugage ainsi que de la lisibilité car les fonctions gagnent en indépendance par rapport au système et les problèmes sont plus simple à reproduire (en l'absence d'effets de bord les fonctions gagnent la propriété de transparence référentielle, c'est à dire qu'aux même arguments elles associent toujours le même résultat, il n'y a rien d'implicite en dehors de la fonction qui puisse l'influencer). De plus un programme purement fonctionnel est facile à paralléliser sans aucun risque (bien que les dépendances entre les données puissent toujours rendre le résultat séquentiel, le fonctionnel ne transforme pas encore un algorithme séquentiel en algorithme parallélisable par magie).
    Bien évidemment ces avantages ne vont pas sans quelques inconvénients, surtout pour ceux qui n'ont connu que des langages impératifs jusque là, cela demande un gros effort d'adaptation. De plus beaucoup de structures de données bien connues en programmation impératives sont inadaptées ou inutilisables dans un monde sans mutation, mais on trouve généralement des équivalents fonctionnels persistants avec des capacités proches.

    Citation Envoyé par mon_nom_est_personne Voir le message
    Ta remarque me fait pose la question:
    Si les langages statique d'aujourd'hui implemente des propriete des langages dynamiques, sont-il toujours statiques ? (quid de C, car personne ne l'a cite)
    Tu as des soucis sémantiques : ce qui caractérise les langages dynamiques et statiques c'est bien leur typage (dynamique, c'est-à-dire à l'exécution, ou statique, c'est-à-dire à la compilation). Un certain nombre de personnes croient que le typage dynamique est ce qui permet les fonctionnalités que tu as cité, mais comme je te l'ai montré ce n'est pas vrai, tu peux tout à fait avoir ces mêmes avantages avec un typage statique. Haskell est un langage parfaitement statique, il offre même généralement de bien plus fortes garanties à la compilation qu'un langage comme le C ou encore le Java.

    --
    Jedaï

  14. #34
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par Jedai Voir le message
    A mon avis les langages dynamiques ont une place mais leur grand succès actuel est plus dû aux faiblesses des langages statiques mainstream qu'à un avantage intrinsèque des langages dynamiques sur les langages statiques en général.
    hum... Ca va tout de même être dur de modifier dynamiquement (au runtime) la définition d'une classe dans un langage statique. J'imagine mal comment le compilateur peut déterminer la méthode a appeler... lorsque la méthode n'existe pas encore !

    Perso, j'aimerai bien faire cela en Java :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Object o = new Object();
    o.addMethod("int sum(int x,int y) { return x+y;}");
     
    int s = o.sum(1,2);

    Mais je pense que le compilateur ne va pas aimer la dernière ligne.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  15. #35
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Je pense que tu puisse le faire avec les librairies de manipulation de byte code.

    Mais pour te taquiner, c'est quoi l'intérêt de ton exemple ?

    Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait. Marcel PAGNOL
    On ne savait pas que c'était impossible, alors on l'a fait. John Fitzgerald KENNEDY.
    L'inexpérience est ce qui permet à la jeunesse d'accomplir ce que la vieillesse sait impossible. Paul (Tristant) BERNARD
    La meilleure façon de prédire l'avenir, c'est de l'inventer.

  16. #36
    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 679
    Points
    18 679
    Par défaut
    Citation Envoyé par pseudocode Voir le message
    hum... Ca va tout de même être dur de modifier dynamiquement (au runtime) la définition d'une classe dans un langage statique. J'imagine mal comment le compilateur peut déterminer la méthode a appeler... lorsque la méthode n'existe pas encore !

    Perso, j'aimerai bien faire cela en Java :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Object o = new Object();
    o.addMethod("int sum(int x,int y) { return x+y;}");
     
    int s = o.sum(1,2);

    Mais je pense que le compilateur ne va pas aimer la dernière ligne.
    tu connais SmallTalk ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  17. #37
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 189
    Points : 268
    Points
    268
    Par défaut
    Citation Envoyé par benwit Voir le message
    Je pense que tu puisse le faire avec les librairies de manipulation de byte code.

    Mais pour te taquiner, c'est quoi l'intérêt de ton exemple ?
    Si j'avais à utiliser ça.
    Ce serait pour génerer dynamiquement des setter et des getter pour faire du mapping objet relationnel dynamique de table que l'on ne connait pas à l'avance (car avec hibernate ou JPA, on ne peut pas).


    Ce qui peut arriver fréquemment dans des applications de GED, où l'on peut définir dynamiquement un nouveau type de document à chaud (et pour des raisons de performances, cela crée dans la base de donnée une nouvelle table avec les champs).
    Il y aurait évidemment un point d'entrée dans la classe qui représente le document pour accèder à tous les attributs (les attributs standards seront juste là pour JPA)
    => une solution plus simple serait que JPA gère ce cas

  18. #38
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Ptite intervention de ma part,
    pour info je n'ai pas lu les pages 2-3 (au cas ou je repeterai des arguments)

    .net est un framework
    lors que tu parles de faciliter de developpement (se rendre sur la definition d'une methode, propriété...) tu parles en fait des avantages de l'ide visual studio (que j'utilise aussi)

    en php si tu veux developper de manière plus structuré, tu peux utiliser des frameworks (symfony, jelix, zend framework, mkframework...)
    je sais tu n'auras toujours pas de typage fort mais tu gagneras d'autres fonctionnalités et confort de programmation

    Pour avoir fait du .net y a un truc qui m'embete pas rapport au php c'est la gestion des erreurs, j'ai souvent eu des "erreur non catché/inopiné objet non disponible/inexistant/ou autre" mais pas de numéro de ligne!
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  19. #39
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par benwit Voir le message
    Mais pour te taquiner, c'est quoi l'intérêt de ton exemple ?
    Comme le dit Jack Sparrow, pouvoir générer dynamiquement une définition de classe à partir d'une description externe (fichiers XML, fichiers INI, schéma de base de données, ...)

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    System.createClassFromDTD("http://www.google.com/google.dtd");
    GSP data = new Object("http://www.google.com/search?q=DVP&output=xml");
    for(GSP.Res.R result : data.Res) 
    	System.out.println("web site : " + result.U);

    Ou ajouter dynamiquement des méthodes/interfaces à un objet selon son type. Une sorte de méta-programmation orienté aspect.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (o instanceof MyResource) {
      o.addInterface(java.io.Closable);
      o.addMethod("void close() { this.disconnect(); }");
    }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  20. #40
    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 679
    Points
    18 679
    Par défaut
    meta programmation sur Java ?
    tu as utilisé cet outil http://www.jetbrains.com/mps/index.html ?
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

Discussions similaires

  1. Quel est l'intérêt des Interfaces ?
    Par opeo dans le forum Langage
    Réponses: 42
    Dernier message: 06/01/2022, 14h16
  2. Quel est l'intérêt des mots clé get et set ?
    Par verbose dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 30/09/2008, 16h19
  3. Signature des assemblies : quel est l'intérêt?
    Par AdamReith dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 30/04/2008, 18h20
  4. Quel est l'intérêt des Services Web ??
    Par silvermoon dans le forum Débats sur le développement - Le Best Of
    Réponses: 19
    Dernier message: 12/02/2003, 22h28

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