• [^] # Re: Go est lent, Rust est rouillé !

    Posté par . En réponse au journal Explorer des langages de programmation - édition 2020. Évalué à 3.

    tu perds le typage statique et les casts rendent la lecture du code assez moche, je trouve.

    Une vision plus positive de la même chose serait : si on veut vraiment filter ou any en Go, on peut du moment qu'on accepte que cette partie du code ait les mêmes garanties qu'en Ruby :-) Quand à la mocheté des casts explicites obligatoires, elle a un avantage : on a plus de chances de repérer les erreurs que dans un langage dynamique aux casts implicites.

    Après, il y a quand même un soucis en vrai : on ne peut pas facilement écrire Any avec la signature func(interface{}, func(interface{}) bool) bool, le mieux qu'on puisse faire c'est func([]interface{}, func(interface{}) bool) bool, ce qui force à transformer tout tableau en []interface{} ce qui n'est pas possible avec un cast : il faut céeer un nouveau tableau ou se limiter à utiliser Any pour les tableaux contenant des interfaces.

    L'alternative, c'est d'utiliser reflect et d'écrire les fonctions spécialisées (générées automatiquement ou pas) et les utiliser dans la fonction générique, mais du coup, si on a déjà les fonctions spécialisées, le gain à utiliser la fonction générique à base de reflect est très discutable (on perd typage statique et performances pour au final possiblement aucune factorisation de code).