• [^] # Re: Microsoft va-t-il LIBÉRER .net ?

    Posté par . En réponse à la dépêche Tomboy vs Gnote. Évalué à 2.

    d'autant plus que tes exemples, Python, pour comparer à LINQ, voilà quoi. C'est pas possible de l'envisager dans Python, par nature : Python est un langage dynamique.

    Euh a priori (en dehors des perfs [qui vont s'écrouler]) tu peux toujours ajouter une surcouche dans un un langage dynamique pour faire de l'inférence de type même si ce n'est pas un mécanisme par défaut.
    Python supportant les pointeurs sur les fonctions et les expression lambda et les types anonymes, ces points là ne sont pas des contre indications non plus.

    Apparement, il y a dejà des briques qui permettent de le faire le même genre de truc en Python, ce n'est peut êre pas aussi "policé" que LINQ, mais il n'y a pas de contre indication technique pour le faire.
    http://www.aminus.org/blogs/index.php/2008/04/22/linq-in-pyt(...)
    http://sayspy.blogspot.com/2006/02/why-python-doesnt-need-so(...)

    Je ne dis pas ça pour argumenter mais pour comprendre si j'ai loupé un truc au passage sur les concepts des langages.

    Lambda expression
    Pareil, pas de vérification de contrat de signatures sur les types (philosophie non java).
    ??? Tu peux expliquer ???


    Tant qu'à faire, je répond à cette question aussi.
    La philosophie JAVA est d'être le plus descriptif possible pour éviter les erreurs d'interprétations par un humain du code.

    Comme une fonction lambda est une fonction inline, si je reprends la déclaration C#
    del myDelegate = x => x * x;
    Note que ton expression marchera pour les types numériques de base. Si tu crée ta classe de nombres complexes, il faudra surcharger l'opérateur "*" pour que ce code marche.

    Si tu te limite à un type, tu devra déclarer obligatoirement les types dans ta fonction qui sera déclarée dans une classe:
    int mul(int x)
    double mul(double x)
    sachant que les deux fonctions pour java sont totalement dichotomiques, elles ne prennent pas les mêmes paramètres (signature de fonction différente)

    Tu ne peux pas avoir de type anonyme dans la déclaration d'une fonction dans JAVA. Il faut déclarer tous les types des variables en entrée ou en sortie.
    Au mieux, ça sera si tu ne veux pas limiter la hiérarchie d'objets.
    Object carre(Object x) {...};
    et il faudra faire de l'introspection sur x pour connaître la bonne fonction a appeler, ça sera fait au runtime, et ne pourra pas être "précalculé" à la compilation.

    Bref 5 pages de codage avec une syntaxe illisible au lieu d'une ligne, tu auras un mécanisme carrément moins performant, donc ça supprime tout l'intérêt de vouloir avoir des fonctions anonyme à type anonymes en JAVA.