C'est mon point : il est bien plus frustrant de perdre quelque chose que l'on a que de ne pas l'avoir.
C'est un argument qui se défend, plutôt du côté ressenti humain subjectif (frustration) que technique. Je pense que cette source de frustration est en effet assez répandue et a tendance à polariser les langages : le langage dynamique a peur de perdre en flexibilité/pureté en introduisant du statique, le langage statique a peur de perdre en garanties/performances/pureté en introduisant du dynamique.
MyFnc() ne cast pas
En Go ton exemple ne cast pas, vu que c'est exactement un cas d'application d'interface, comme tu le précises, et que l'appartenance ou non à une interface est résolut statiquement. L'interface doit, effectivement, être écrite manuellement explicitement (ici une interface contenant une seule méthode foo() string) contrairement à Ruby où tout est implicite.
Par contre, sauf erreur, en Ruby ton exemple fait un cast que tu n'as pas vu : site.foo() donnerait une erreur runtime si tu passes un objet sans cette méthode. Du moins, ce serait le cas en Perl ou Tcl, je ne sais pas si Ruby fait du typage statique pour valider les appels méthode de classes, a priori non si Ruby résout comme Perl les appels méthode au runtime de façon dynamique, mais je connais pas bien Ruby.
[^] # Re: Go est lent, Rust est rouillé !
Posté par anaseto . En réponse au journal Explorer des langages de programmation - édition 2020. Évalué à 3.
C'est un argument qui se défend, plutôt du côté ressenti humain subjectif (frustration) que technique. Je pense que cette source de frustration est en effet assez répandue et a tendance à polariser les langages : le langage dynamique a peur de perdre en flexibilité/pureté en introduisant du statique, le langage statique a peur de perdre en garanties/performances/pureté en introduisant du dynamique.
En Go ton exemple ne cast pas, vu que c'est exactement un cas d'application d'interface, comme tu le précises, et que l'appartenance ou non à une interface est résolut statiquement. L'interface doit, effectivement, être écrite manuellement explicitement (ici une interface contenant une seule méthode
foo() string) contrairement à Ruby où tout est implicite.Par contre, sauf erreur, en Ruby ton exemple fait un cast que tu n'as pas vu :
site.foo()donnerait une erreur runtime si tu passes un objet sans cette méthode. Du moins, ce serait le cas en Perl ou Tcl, je ne sais pas si Ruby fait du typage statique pour valider les appels méthode de classes, a priori non si Ruby résout comme Perl les appels méthode au runtime de façon dynamique, mais je connais pas bien Ruby.