• [^] # Re: Drôle

    Posté par (site web personnel) . En réponse au journal Utiliser Mono sans peur. Évalué à 2.

    un petit bout de cython
    C'est pas du Python, c'est un autre langage, même si la syntaxe est la même. Pérénité sur le long terme inconnue, portabilité limitée.

    fait du cython et le probleme est "presque reglé".
    Avec généricité & co ? Et tous les avantages que procurent le typage statique aux outils de développement (y'a pas que le compilateur : IDE, refactoring & co) ?

    je ne pense pas que le passage de l'etape de "compilation/check des types" soit une securité.
    c'est une sécurité. Certainement pas suffisante, mais ca en est une.
    Les tests unitaires en sont une autre, les 2 sont complémentaires et l'un ne remplace sûrement pas l'autre.

    Pour LINQ, c'est encore subjectif, mais en pratique c'est quelque chose qui se reecrit en python pur en peu de temps grace au generateurs et autres.
    Tu comprends pas. LINQ, c'est de combiner tous les avantages d'un langage de requêtage comme SQL avec les avantages d'un langage typé statiquement.
    En C# si j'écris :
    var artists = from album in database.GetAlbums()
    where album.Name.StartWith("The")
    orderby album.Name
    select album.Artist;
    foreach(var artist in artists)
    Console.WriteLine(artist.toto); //erreur, la propriété toto n'existe pas !

    le compilateur fait de l'inférence de type et ma variable ids est une suite d'objets du même type que Artist. Le typage est conservé et si je manipule cette liste, le compilateur peut me renvoyer une belle erreur à la compilation, et pas durant l'exécution d'un hypothétique test unitaire.
    De plus ca permet à mon IDE de me proposer instantanément la liste des propriétés de mon objet artist quand je tapes "artist.".

    T'auras beau reproduire l'API en Python, comme tu peux le faire en C# ou Java d'ailleur, tu n'auras pas l'intérêt principal qui est l'intégration dans le système de typage.

    ce n'est pas explicite et c'est trop magique
    Quand t'as la complétion, c'est explicite. LINQ est intégralement codé en méthode d'extensions et tout le monde est content de pouvoir utiliser LINQ sur ses listes d'objets traditionnelles.

    par contre c'est faisable en ruby, en python
    Là encore, les méthodes d'extensions permettent avant tout de conserver le typage statique, ce qui n'est pas le cas en Ruby ou en Python.

    cela existe aussi en python
    Non, le service peut être rendu à l'aide d'autres outils ou langages comme cython ou JNI, mais ce n'est pas proposé par Python.

    Ce qui fait la force de C#, c'est son côté tout terrain, qui fait qu'il n'est sûrement pas le meilleur dans un domaine, mais cela en fait souvent un bon compromis.