• [^] # Re: Mauvais compromis

    Posté par (site web personnel) . En réponse au journal Quel pov' type. Évalué à 5. Dernière modification le 22 mars 2024 à 10:51.

    Complètement d'accord.

    Plus je l'utilise, plus je suis contre.

    Il faut noter que mypy est un très mauvais outil, il abandonne très vite lorsqu'il s'agit d'inférer des types complexes. Pyright (qui est développé en typescript et inclus de base avec VS Code) est mieux, mais on a toujours pas un type-checker qui soit solide.

    Le système de type que Python propose est de plus peu expressif et ne fonctionne tout simplement pas dans des cas pourtant simple, par exemple :

    type Request = Union[
     tuple[Literal["action_a"], PayloadA],
     tuple[Literal["action_b"], PayloadB],
    ]
    match request:
     case ("action_a", payload_a):
     pass
     case ("action_b", payload_b):
     pass

    Dans cet exemple, mypy ne sait pas inférer le type de payload_a ou payload_b.

    Et il sera impossible d'exprimer un type Response dont les variants dépendent du variant de Request :

    type Response = Union[
     ResponseA,
     ResponseB,
    ]

    Comment exprimer que quand j'ai une PayloadA je reçois une ResponseA ? En Python c'est pas possible.

    De plus, Python est un langage qui est de nature purement dynamique. Aucun type-checker ne pourra vérifier la magie noire que l'on peut faire avec de la magie noire à base de subclasshook. Et pourtant ce sont des choses bien utiles parfois lorsqu'il est question de génération de code au runtime.

    Au final, je deviens de l'avis suivant :

    Si tu veux un système de type, tu veux un autre langage, alors utilise un autre langage.

    https://link-society.com - https://kubirds.com - https://github.com/link-society/flowg